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