【问题标题】:NoSQL documents structure vs SQL tables structure [duplicate]NoSQL 文档结构与 SQL 表结构 [重复]
【发布时间】:2016-05-24 08:03:04
【问题描述】:

在 SQL 中,我通常会有表/实体 AccountAccountDetailsAddress 等。

Account { Id, Name, Password }
AccountDetails { AccountId, LastSignedIn, CreatedDate, /*etc*/}
Address {AccountDetailsId, City, Country, /*etc*/ }

在 NoSQL 类型的数据库中,我应该将所有这些存储在一个数据库中吗?

Account { Id, Name, Password, LastSignedIn, CreatedDate, City, Country, /*etc*/}

换句话说:我应该规范化 NoSQL 文档吗?

你能指点一下吗?

在我的特殊情况下,我将 mongodb 与 mongoose 一起使用。

【问题讨论】:

    标签: sql mongodb nosql


    【解决方案1】:

    NoSQL 是一个过于笼统的术语,它取决于您考虑的特定数据库。但确实在其中一些(也取决于特定情况)中最好不要进行规范化。

    例如,在 MongoDB 中,通常更喜欢使用数组和子文档而不是规范化。如果你规范化,那么你需要加入,而加入不是 Mongo 的强项之一。

    【讨论】:

    • 刚刚更新了问题。我正在使用 mongodbmongoose
    • 那么,正如我所说,在很多情况下,最好只有一个大集合。当然也有例外,这取决于关系的基数(整合表示多对多关系的两个表会导致组合爆炸......)
    • 所以如果我有document 和它的subdocuments,我可以说检索特定的subdocument 还是用findqueries 跳过另一个?类似于:Account.findOne({name:'user'}, include: {'subdoc1'}) - 所以它将包括subdoc1 的任何内容,并且不会在结果中包括任何其他subdocuments
    • 是的,例如对于像 {name:'xx', telfs:{cell:'56565',house:'12121'}} 这样的文档,您可以使用符号 telfs 编写 db.people.find({name:'xx'},{'telfs.home':1})。 home:1 表示“在 telfs 内部查找 key home,如果存在则显示其值”
    • 刚刚为此stackoverflow.com/questions/35375243/…创建了单独的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多