在规划我的数据库时,我遇到了各种各样的思考问题: 大纲: 该数据库是具有大量患者的患者数据库。 每位患者都有大量数据,例如:血压值在不同日期。
问题:
为每位患者创建表格会更容易吗? “bob_builder_BPvalues”或为BP值创建一个表格,例如。 “BP_values”然后通过外键将所有患者值都链接在一起?
由于每位患者都有如此多的数据,将每位患者的血压值混合到一张单独表中似乎没有意义,因为这对人类来说看起来非常混乱。在处理和分类数据方面哪种方法会更快?
答案 0 :(得分:0)
为所有患者准备一张桌子。然后,可以使用外键链接到BloodPressure表。 ......之间的关系。
Patient 1----* BloodPressureResults
因此,单个患者可能会有很多血压结果。
然后,您可以使用简单的查询查看特定患者的血压结果......
SELECT * FROM BloodPressureResults
WHERE Patient_Id = '1'
然后,这将返回Id为1的患者的所有血压结果。
然后,您还可以使用与WeightResults
表格相同的方式添加其他表格,例如BloodTestResults
或BloodPressureResults
答案 1 :(得分:0)
假设您有10名患者:
使用第一种方法,最终会得到10个不同的表,这些表总是包含相同类型的数据。
对于单个患者的每个查询,您必须构建一个连接到右表的动态查询:
SELECT ...
FROM patients
INNER JOIN bobby_measures ON ... -- this has to be crafted dynamically each time
WHERE patients.name = 'bobby'
如果您想为所有患者的某些日期的某些数据制作一些统计数据,该怎么办?即使有10名患者,询问这也是一场噩梦。那么猜猜当你有1000 ...
时会发生什么另一方面,你的第二个选择(可以说)人类阅读数据库更加困难。但是被人阅读并不是数据库的目标之一。
使用单个patientData表(或者您想要的表,每个数据类型一个,如果需要,bloodPressure和东西),一切都变得更简单。您可以使用相同的查询查询任何患者,仅更改患者ID,您可以针对一系列日期进行所需的所有查询,过滤某些数据类型或其他任何内容。
SELECT ...
FROM patients
INNER JOIN patientData ON ...
WHERE patients.name in ('bobby', 'joe'...)
AND patientData.type = 'blood pressure'
AND patientData.date BETWEEN ... AND ...
-- and so on
在patientData表和适当的表示层上使用正确的索引,普通用户可以完全读取所有这些数据。