【问题标题】:RavenDb NoSQL many to many modelingRavenDb NoSQL 多对多建模
【发布时间】:2019-12-16 19:11:24
【问题描述】:

我是 NoSQL 数据库 (RavenDb) 的新手,我想知道对以下情况建模的最佳方法是:

我正在为医疗咨询做一个预约日历。根据医学专业和咨询类型(第一次或随后),有几种类型的医疗咨询。 例如,心脏病学的第一次医疗咨询需要 30 分钟,随后的一次需要 15 分钟。每个专业都有其持续时间。

当有些医生的就诊时间与一般医生不同时,问题就来了。因此,通常情况下,第一次心脏病咨询需要 30 分钟,但如果医生是 John the Rapid,则只需 20 分钟。

对于这种情况,我们曾经有一个表格,将这些罕见的医生的咨询类型与里面的特殊持续时间联系起来。所以我们对这个表进行了左连接,如果有这种类型的咨询和选择的医生的记录,我们在这个表中应用时间。如果没有记录,我们取咨询类型的标准值。

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

【问题讨论】:

    标签: nosql ravendb


    【解决方案1】:

    为什么不简单地创建一个“Doctors”集合,每个文档都可以像这样:

    { 
        "Name": "John the Rapid",
        "speciality": "Cardiaology",
        "FirstConsultationTime": "20",
        "SecondConsultationTime": "10",
        .....
    }
    

    就是这样。

    (可选)对于“常规”医生, 您可以在这个 same 集合中创建更精简的文档,如下所示:

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

    当您查询医生时,
    如果“时间”字段不存在,那么您使用一些默认值(30 分钟和 15 分钟)...

    您可能想阅读: https://ravendb.net/learn/inside-ravendb-book/reader/4.0/3-document-modeling#document-modeling

    【讨论】:

    • 咨询类型应该是一个单独的集合,因为它在多个地方使用
    • 虽然,我可以为不同时间的医生对象添加咨询类型的引用,以进行不同类型的咨询,我认为另一种方式会更好。将医生和时间添加到咨询类型。这是因为应用程序操作。当您要预约咨询时,通常您会搜索例如心脏病学首次咨询,该应用程序会在所有心脏病学日历中进行搜索,而无需加载医生。感谢您的回答,它帮助我做出了将所需信息嵌入文档而不是创建新集合的决定
    • 使用第一种方法 - 您可以使用“相关文档” - 文档字段将类似于:“FirstConsultationTime”:“consultationTimes/2-A”。 (其中consultationTimes/2-A”指的是另一个集合中的文档。)了解更多相关文档:demo.ravendb.net/demos/csharp/related-documents/…
    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2015-07-04
    • 2011-05-22
    • 2019-10-22
    • 1970-01-01
    • 2011-08-16
    • 2017-05-23
    相关资源
    最近更新 更多