【发布时间】:2020-02-23 00:21:48
【问题描述】:
我想知道在数据库设计方面,存储参考 ID 或嵌入文档之间的最佳方法是什么,即使这意味着多个文档可以出现多次。
假设我目前有这种模型:
收藏用户:
{
name: String,
types : List<Type>
sharedTypes: List<Type>
}
如果我使用嵌入式模型而不使用其他集合,则可能会导致重复的对象类型。例如,用户 A 创建类型 aa,用户 B 创建类型 bb。当他们相互分享时,他们键入会导致:
{
name: UserA,
types : [{name: aa}]
sharedTypes: [{name:bb}]
},
{
name: UserB,
types : [{name: bb}]
sharedTypes: [{name:aa}]
}
这会导致重复,所以我猜这是非常糟糕的设计。我应该使用另一种方法,例如创建集合类型并存储 referenceId 吗?
收藏类型:
{
id: String
name: String
}
这仍然会导致重复,但不是一个完整的文档,我想这样会更好。
{
name: UserA,
types : ["randomString1"]
sharedTypes: ["randomString2"]
},
{
name: UserA,
types : ["randomString2"]
sharedTypes: ["randomString1"]
}
最后一种方法,也许是最好的方法是从这样的集合类型中存储。
收藏用户:
{
id: String
name: String
}
收藏类型:
{
id: String
name: String,
createdBy: String (id of user),
sharedWith: List<String> (ids of user)
}
这 3 之间的最佳方法是什么? 我正在查询,我有一组用户,所以对于每个用户,我想要创建的类型和人们与我共享的类型。
【问题讨论】:
-
另外,请参阅:MongoDB Data Modeling。
标签: database mongodb database-design