我刚开始学习nosql数据库,特别是MongoDB(没有具体的mongodb原因)。我浏览了一些教程网站,但仍然无法弄清楚,它如何处理两个文档/实体之间的关系
让我们举例说: 1.一名员工在一个部门工作 2.一名员工在多个部门工作
我不知道“关系”一词对mongodb有意义。
有人可以请一些关于加入,关系的事情。
答案 0 :(得分:7)
简短回答:使用“nosql”你不会这样做。
您要做的不是加入或关系,而是将用户所在的部门添加到用户对象中。
如果您需要从该方向查看用户,您还可以将用户添加到“部门”对象中的字段。
这样的非规范化数据在“nosql”数据库中是典型的。
请参阅此非常密切相关的问题:How do I perform the SQL Join equivalent in MongoDB?
答案 1 :(得分:1)
通常,您希望对集合(=表)中的数据进行非规范化。您的集合应该进行优化,这样您就不需要进行连接(在NoSQL中无法进行连接)。
在MongoDB中,您可以引用其他集合(=表格),也可以将它们相互嵌入 - 无论您的域名更有意义。集合中的条目有大小限制,因此您不能只嵌入百科全书britannica; - )
如果您查找所选编程语言的API文档和示例,这可能是最好的。 对于Ruby,我建议使用Mondoid库:http://mongoid.org/docs/relations.html
答案 2 :(得分:1)
在某些情况下,您希望/需要将文档分开,在这种情况下,您将从一个对象中获取_id
并将其作为值添加到另一个对象中。
例如:
db.authors
{
_id:ObjectId(21EC2020-3AEA-1069-A2DD-08002B30309D)
name:'George R.R. Martin'
}
db.books
{
name:'A Dance with Dragons'
authorId:ObjectId(21EC2020-3AEA-1069-A2DD-08002B30309D)
}
书籍和作者之间没有官方关系,只是作者_id
的副本到书中的authorId
值。
希望有所帮助。
答案 3 :(得分:1)
通常,如果您决定了解NoSql数据库,您应该遵循“NoSql方式”,即学习移动以外的原则和设计方法,而不是简单地尝试将RDBMS映射到您的第一个NoSql项目。
简单地说 - 你应该学习如何嵌入和反规范化数据(如上面提到的那样),而不是简单地复制id来模拟外键。
如果您执行“foreign _id way”,则下一步是搜索事务以确保始终插入/更新两个“行”。 Oracle / MySql等待后几步。 :)