要为每个特定用户创建MySQL表,还是一般化表?

时间:2016-01-26 15:12:53

标签: mysql

在规划我的数据库时,我遇到了各种各样的思考问题: 大纲: 该数据库是具有大量患者的患者数据库。 每位患者都有大量数据,例如:血压值在不同日期。

问题:

  1. 为每位患者创建表格会更容易吗? “bob_builder_BPvalues”或为BP值创建一个表格,例如。 “BP_values”然后通过外键将所有患者值都链接在一起?

  2. 由于每位患者都有如此多的数据,将每位患者的血压值混合到一张单独表中似乎没有意义,因为这对人类来说看起来非常混乱。在处理和分类数据方面哪种方法会更快?

2 个答案:

答案 0 :(得分:0)

为所有患者准备一张桌子。然后,可以使用外键链接到BloodPressure表。 ......之间的关系。

Patient 1----* BloodPressureResults

因此,单个患者可能会有很多血压结果。

然后,您可以使用简单的查询查看特定患者的血压结果......

SELECT * FROM BloodPressureResults WHERE Patient_Id = '1'

然后,这将返回Id为1的患者的所有血压结果。 然后,您还可以使用与WeightResults表格相同的方式添加其他表格,例如BloodTestResultsBloodPressureResults

答案 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表和适当的表示层上使用正确的索引,普通用户可以完全读取所有这些数据。