我对mongoDB中的嵌入式关系有疑问。
e.g。如果我有这样的数据strcutre:
company
- company_members
- company_clients
- company_templates
-- company_templates_items
我应该在这里使用嵌入,因此成员,客户和模板都嵌入在公司集合中,templates_items嵌入在company_templates中,或者我应该在这里使用引用的关系吗?
我问这个,因为我想知道嵌入所有内容时db查询响应是否太大了?
任何建议?
谢谢!
修改
表的内容将是例如100家公司,每家有15个客户,20个成员和4个模板,每个10个项目。
一切都是文字。
答案 0 :(得分:1)
即使您使用编辑中的其他信息,也很难判断。我们需要知道你想要完成什么。我将告诉你两个解释我的意思的选择,我认为你可以从中推断出适合你的东西。
假设您要构建一个列出公司及其部分客户的网页,以及他们的工作样本。数据将主要被读取。唯一可以更改信息的是客户(相应公司的员工),他们可以登录并更改某些数据。更改不会经常发生,并且没有版本控制冲突。
在这种情况下,嵌入很好。由于您可能希望将这些信息一起显示,因此信息量不是杀手,而且只有一个作者。
公司员工可以登录和管理客户端,添加或删除用户,以及创建/读取/更新/删除(CRUD)项目模板。很多人可以同时登录。
在这种情况下,除了company_templates_items
之外,上述任何一个都不应该被嵌入。
作为指导,请考虑以下事项:如果收集项目可以由不同的用户进行CRUD操作,并且可以同时编辑不同的对象而没有问题(在商业意义上),请不要嵌入。例如,当Jane编辑一个并且Mike创建一个新项目时,Jim添加一个新客户并没有错。如果所有这些操作都必须写入同一个对象,那么您的代码必须非常小心,以确保没有丢失,覆盖或添加两次。
您可以使用$push
,$pull
等来使这些操作成为原子,但排序,搜索和更新会更复杂。通常,集合具有比嵌入文档更多的功能。