0

我对 mongoDB 中的嵌入式关系有疑问。

例如,如果我有这样的数据结构:

company
- company_members
- company_clients
- company_templates
-- company_templates_items

我应该在这里使用嵌入,因此成员、客户和模板嵌入在公司集合中,并且模板项目嵌入在 company_templates 中,还是应该在这里使用引用关系?

我在问这个,因为我想知道嵌入所有内容时数据库查询响应是否太大?

有什么建议吗?

谢谢!

编辑:

该表的内容将是例如 100 家公司,每家公司有 15 个客户、20 个成员和 4 个模板,每个模板包含 10 个项目。

一切都是文字。

4

1 回答 1

1

即使有来自您编辑的附加信息,也很难判断。我们需要知道你想要完成什么。我将向您展示两种选择来解释我的意思,我认为您可以从中推断出适合您的方式。

前任。A:你正在建立一种黄页网站

假设您要构建一个网页,列出公司及其一些客户,以及他们的工作样本。数据将主要被读取。唯一可以更改信息的是客户(相应公司的员工),他们可以登录并更改一些数据。更改不会经常发生,并且没有版本冲突。

在这种情况下,嵌入很好。由于您可能希望将这些信息一起显示,因此信息量不是杀手,而且只有一个作者。

前任。B:您正在构建一个 SaaS 项目管理解决方案

公司员工可以登录和管理客户端,添加或删除用户,创建/读取/更新/删除(CRUD)项目模板。多人可以同时登录。

在这种情况下,除了可能company_templates_items应该嵌入之外,以上都不是。


作为指导,请考虑以下几点:如果集合项可以由不同的用户进行 CRUD 操作,并且可以同时编辑不同的对象而没有问题(在业务意义上),请不要嵌入。例如,Jim 添加一个新客户,而 Jane 编辑一个新客户,Mike 创建一个新项目,这并没有错。如果所有这些操作都必须写入同一个对象,那么您必须非常非常小心地编写代码,以确保不会丢失、覆盖或添加两次。

您可以使用$push,$pull等使这些操作成为原子操作,但排序、搜索和更新更复杂。通常,集合比嵌入文档具有更多的功能。

于 2012-06-07T12:18:59.627 回答