要求
project
的文档始终与类型为quotation
的一个文档有关系。projects
不能与同一个quotation
有关系。quotations
不能与同一个project
有关联path
属性,该属性应为[projectId, ..., entityId]
形式的数组,该数组指示层次结构关系并用于索引。 为projects
和quotations
之间的关系建模的最佳方法是什么?
这是我正在考虑的替代方案
生成的ID
动机:这与我在关系数据库中所做的最相似。
quotation {
"_id": "quotation:46025df3-f08e-49ff-8fbe-d9afbef116ee",
"path": [
"project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"quotation:46025df3-f08e-49ff-8fbe-d9afbef116ee"
]
}
project {
"_id": "project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"quotationId": "quotation:46025df3-f08e-49ff-8fbe-d9afbef116ee",
"path": [
"project:60babbcb-6b5c-48c3-a4e7-3c348887528d"
]
}
固定ID
动机:由于关系始终是一对一的关系,因此我不应该将它们视为关系数据库中的关系。这更多是针对文档存储的突破。在这里,我避免添加创建无用的随机ID,从而避免不必要的复杂性
quotation {
"_id": "quotation:project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"path": [
"project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"quotation:project:60babbcb-6b5c-48c3-a4e7-3c348887528d"
]
}
project {
"_id": "project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"path": [
"project:60babbcb-6b5c-48c3-a4e7-3c348887528d"
]
}
无id,仅路径
动机:由于我们有索引路径,因此我们会基于此进行查找。不需要ID。
quotation {
"path": [
"project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"quotation:project:60babbcb-6b5c-48c3-a4e7-3c348887528d"
]
}
project {
"_id": "project:60babbcb-6b5c-48c3-a4e7-3c348887528d",
"path": [
"project:60babbcb-6b5c-48c3-a4e7-3c348887528d"
]
}