RavenDb NoSQL 多对多建模

3

我对NoSQL数据库(RavenDb)还不熟悉,想知道以下情况最好的建模方式:

我正在为医学咨询制作预约日历。根据医学专业和咨询类型(初诊或复诊),有多种类型的医学咨询。例如,心脏病学的首次医学咨询需要30分钟,而后续医学咨询只需要15分钟。每个专业都有其持续时间。

问题在于,有些医生的咨询时间与普通咨询时间不同。因此,通常情况下,心脏病学的首次咨询需要30分钟,但是当医生是John the Rapid时,只需要20分钟。

对于这种情况,我们过去使用了一张表来关联这些罕见医生的咨询类型和特殊持续时间。因此,我们可以左连接此表,并且如果针对所选医生的此类咨询存在记录,则应用此表中的持续时间。如果没有记录,则采用咨询类型的标准值。

我是否应该继续使用这种方法并查询另一个集合以查看是否有不同的持续时间,还是把这些信息包含在咨询类型的集合中更好?

1个回答

2
为什么不创建一个“医生”集合,每个文档可以如下所示:
{ 
    "Name": "John the Rapid",
    "speciality": "Cardiaology",
    "FirstConsultationTime": "20",
    "SecondConsultationTime": "10",
    .....
}

就是这样。

对于“普通”医生,您可以在相同的文集中创建更瘦的文档,例如:

{ 
    "Name": "Some other name",
    "speciality": "Cardiaology",
    .....
}

当您查询医生时,如果“时间”字段不存在,则使用一些默认值(30分钟和15分钟)...
您可能需要阅读: https://ravendb.net/learn/inside-ravendb-book/reader/4.0/3-document-modeling#document-modeling

咨询类型应该是一个独立的集合,因为它在多个地方被使用。 - mattinsalto
虽然我可以将咨询类型的参考添加到医生对象中,并为不同类型的咨询设置不同的时间,但我认为另一种方法更好。将医生和时间添加到咨询类型中。这是由于应用程序的操作原因。当您要预约咨询时,通常首先搜索例如心脏病学初诊,应用程序会在所有心脏病学日历中进行搜索,而无需加载医生。感谢您的回答,它帮助我决定将所需信息嵌入文档中而不是创建新集合。 - mattinsalto
1
通过您的第一种方法 - 您可以使用“相关文档” - 而文档字段将类似于: “FirstConsultationTime”:“consultationTimes/2-A”。 (其中的“consultationTimes/2-A”是指另一个集合中的文档。) 了解有关相关文档的更多信息,请访问:https://demo.ravendb.net/demos/csharp/related-documents/create-related-documents - Danielle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接