我需要创建一个数据库表来存储一组假设患者的生理特征(例如收缩压、甘油三酯浓度等)的参数描述。
例如,假设用户为 SBP 指定三角分布,则必须存储最小值、最大值和众数(以及分布类型)。或者,用户可以指定一个正态分布,需要存储平均值和标准偏差。
我正在努力使用正确的方法来规范化这些数据。目前,我有一个 Cohort 表和一个 Distribution 表,其中包含许多一对一的关系,如下所示(省略了一些字段):
队列 id(INT,NOT NULL,PRIMARY) 名称(文本,非空) 评论(文本) systolic_blood_pressure_dist(引用 Distributions.id 的外键) triglyceride_dist(引用 Distributions.id 的外键) ...其他生理参数 分布 id(INT,NOT NULL,PRIMARY) 分布类型(文本) 最小值(浮动) 最大(浮动) 平均值(浮点数) 模式(浮动) sd(浮点数) ...其他分布参数(α、β、形状、比例等)
(distribution_type 包含一个描述分布的字符串:“Triangular”、“Weibull”等)
我很确定这不是执行此操作的最佳方法,因为我在 Distributions 的每一行中都留下了大量的 NULL 字段。
我的另一个想法是为每种分布类型设置单独的表(一个用于三角形,一个用于高斯,一个用于统一等),并在中间有一个带有 id 列的表(用作队列中的外键table *_dist 列),一个分布类型列和一个 id 列,用于存储相应分布表中行的外键。
该查询将使用存储在 Cohort 列中的 id 从中间表中查找分布类型和行 id,然后使用该 id 在适当的表中查找参数。但是,使用一个字符串来选择合适的表,然后另一个 id 来选择合适的行,这与传统的 JOIN 相去甚远,而且感觉也不是一种非常干净的方法。
那么,是否有人对如何最好地实现这一点(在标准化和/或性能方面)有任何建议?
非常感谢,丰富