要为每个特定用户创建MySQL表,还是要概括这些表?
在规划数据库时,我遇到了各种各样的思维问题: 大纲: 该数据库是一个包含大量患者的患者数据库。 每个患者都有大量数据,例如:不同日期的血压值 问题:要为每个特定用户创建MySQL表,还是要概括这些表?,mysql,Mysql,在规划数据库时,我遇到了各种各样的思维问题: 大纲: 该数据库是一个包含大量患者的患者数据库。 每个患者都有大量数据,例如:不同日期的血压值 问题: 是否更容易为每位患者创建表格,例如。 “bob_builder_BPvalues”或为BP值创建一个表,例如“BP_值”,然后通过外键链接其中的所有患者值 由于每个患者都有如此多的数据,所以将每个患者的血压值混合到一个表中似乎没有意义,因为这在人类看来非常混乱。在数据处理和排序方面,哪种方法更快 为所有患者提供一张桌子。然后可以使用外键链接到血压表
为所有患者提供一张桌子。然后可以使用外键链接到血压表。之间的关系
患者1---*血压结果
所以一个病人可以有很多血压结果
然后,您可以使用简单的查询查看特定患者的血压结果
从血压结果中选择*
其中患者Id='1'
这将返回Id为1的患者的所有血压结果。
然后,您还可以添加其他表格,如
weightsresults
或BloodTestResults
,方法与BloodPressureResults表格相同,假设您有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表(或者任意多个表,如果需要,每个数据类型一个表,血压表等等),一切都变得简单了。您可以使用同一查询查询任何患者,只更改患者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表上的正确索引和适当的表示层,所有这些数据都可以被普通用户完全读取。!谢谢你快速而翔实的回答。将使用选项2。非常感谢!这正是我一直在寻找的答案!非常感谢。