要为每个特定用户创建MySQL表,还是要概括这些表?

要为每个特定用户创建MySQL表,还是要概括这些表?,mysql,Mysql,在规划数据库时,我遇到了各种各样的思维问题: 大纲: 该数据库是一个包含大量患者的患者数据库。 每个患者都有大量数据,例如:不同日期的血压值 问题: 是否更容易为每位患者创建表格,例如。 “bob_builder_BPvalues”或为BP值创建一个表,例如“BP_值”,然后通过外键链接其中的所有患者值 由于每个患者都有如此多的数据,所以将每个患者的血压值混合到一个表中似乎没有意义,因为这在人类看来非常混乱。在数据处理和排序方面,哪种方法更快 为所有患者提供一张桌子。然后可以使用外键链接到血压表

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

问题:

  • 是否更容易为每位患者创建表格,例如。 “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。非常感谢!这正是我一直在寻找的答案!非常感谢。