建模父文档和拆分后的子文档之间关系的最佳方法?

时间:2019-05-10 09:18:02

标签: nosql couchdb entity-relationship

要求

  • 类型为project的文档始终与类型为quotation的一个文档有关系。
  • 两个projects不能与同一个quotation有关系。
  • 两个quotations不能与同一个project有关联
  • 所有文档必须具有path属性,该属性应为[projectId, ..., entityId]形式的数组,该数组指示层次结构关系并用于索引。

projectsquotations之间的关系建模的最佳方法是什么?

这是我正在考虑的替代方案

生成的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"
  ]
}

0 个答案:

没有答案
相关问题