帮助在SQL / NoSQL混合中建模EAV(Sql server / RavenDB)

时间:2010-12-08 15:46:43

标签: sql sql-server nosql data-modeling ravendb

我正在设计一个健康SaaS应用程序,并希望在初始建模方面提供一些帮助。我从this thread开始确认我应该使用EAV - 由于临床数据的稀疏性,答案是肯定的。然后我开始考虑使用NoSQL选项,而不是尝试将其纳入SQL。似乎这两者的组合效果最好。我会尝试解释要求和我的想法,并会喜欢任何反馈。我正在使用.net。

要求 在最高级别,我们有一个'患者'。对于需要某些医疗帮助的患者,会发生一些事情,让我们称之为“事件”。对于每个“事件”,可以多次看到“患者”,称为“访问”。根据“访问”存储所有临床数据(测试/历史/等)。所以我们有:

患者1 - ∞事故1 - ∞访问1 - 1临床数据(许多潜在的键/值对)

解决方案(反馈会很棒)

SQL表

Patient
- PatientID
- other patient info

Incident
- IncidentID
- PatientID
- Other incident info

Visit
- VisitID
- IncidentID
- Datetime

NoSQL DocumentDB (可能是RavenDB)

{ // Visit document - id: visits/12345
 "Patient": {
   "PatientId": "patients/54321",
   "Name": "John Smith"
 },
 "Incident": {
   "IncidentId": "incidents/55555",
   "Name": "Cardiac Arrest"
 },
 "VisitData": {
   "BP": "110/70",
   "Hypertension": "True"
   "Cardiac Disease": "Angina"
   "Stroke": "False"
   .... (could be tens or hundreds of key/value pairs)
 },

}

这就是我到目前为止所拥有的。除了一般意见(欢迎所有人)之外,我想知道是否有人认为我应该将每位患者的所有事故和访问都放在一个文件中,而不是每次访问都有一个文件(这就是上述内容)。我相信文档可能会“太大”(不知道基于文档的数据库中有什么太大的意义),而且几乎总是这些视图都是基于访问 - 尽管我们需要在访问期间显示趋势报告

提前致谢!!

麦克

2 个答案:

答案 0 :(得分:0)

根据您的要求,这看起来很合适。

我认为可能还有其他事情发生,这可能是“条件”,不一定是任何患者事件的一部分。例如,患有高血压的人在出现手指骨折时可能会出现这种情况。

此外,事件可能难以定义 - 它是单个时间点事件还是逐渐恶化的持续时间?也许这意味着事件实际上只是访问时的一个标记,或者您可以访问vist关联表,该表允许您声明访问是另一次访问的后续操作,构建患者接受的护理的层次结构或网络。 / p>

顶部的几个想法.. hth

编辑 - 事后的想法:我肯定会推荐一个带有正确规范化表格的SQL数据库......

答案 1 :(得分:0)

混合数据库可能效果最好。现有的appraches使用EAV,但问题在于嵌套的事实 - 关于药物交互的警报可能是SQL表中的主事件

然后有多严重警报,向谁发送,哪两种药物 - 这些细节可以转到基于文档的noSQL数据库。