考虑一个应用程序的场景,其中我有用户和项目,并且要求是用户应分配给项目。可以将一个用户分配给多个项目。这是一对多关系。那么建模这样一个要求的最佳方法是什么。
我想讨论一些模拟这种要求的方法:
- 嵌入数据模型
在这种方法中,我将用户文档嵌入到项目文档中。
优点:您可以在一次API调用中获取所有必需的数据,或者通过获取一个文档来获取所需的数据。
缺点:数据重复可以
Real problem is if you update user information for eg user mobile no or name from users screen then this updated information should also be reflected under all embedded user documents. For this some bulk update query should be fired.
但这是正确的方法???
- 嵌入对象引用而不是对象(已规范化)
在这种情况下,如果我们嵌入用户ID而不是用户对象,那么上面提到的问题就不会存在,但是我们将不得不进行多次网络调用以获取所需的数据或者像在SQL中那样建立单独的文档关系
这是最好的方法吗?
答案 0 :(得分:0)
我们有相同的场景,所以我嵌入了objectId。对于客户端的填充数据,在查找函数中填充用户数据。
contract.find({}).populate('user').then(function(){});
答案 1 :(得分:0)
几乎没有硬性规则和快速规则,但通常与多对多关系相比,您更喜欢引用而不是嵌入。这并不意味着您的数据完全平坦/标准化。
例如,您可以拥有一个包含项目ID数组的用户文档。你可以反过来做项目。
考虑您的查询以及如何构建它们。这可以为您提供有关如何构建文档的其他提示。