用数千列来规范化数据库 - 设计建议

时间:2016-08-14 14:09:50

标签: mysql database-design normalization

背景:我正在协助的实验室将从小鼠身上采集小唾液样本。将为每只鼠标分配一个患者编号(第一张表上的主键),并且每个鼠标的具体信息将存储在此表中(年龄,性别等)

每个唾液样本将被分配一个唯一的编号(主键,第二个表),将参考患者编号,并使用他们的设备扫描1000次。我的任务是记录和存储每位患者的每次唾液扫描的值(双倍),每次对患者进行采样(每周多次)。

我们理论上会将所有唾液采样都放在一张表中(我认为)。这将允许容易地生成人口平均值,并且经常更新。这也有助于确定给定患者与相关人口平均值(相似年龄,性别等)之间的增量。

我明显关注的是1000多列不是MySQL或任何数据库的好习惯。我很难想出构建这些数据的好方法。 (也许每个患者都可以拥有自己的样本读数表,但似乎对整个人群产生平均值会有问题。)

修改 我没有指定,但每次扫描都使用特定波长的光,因此除了唯一的扫描编号外,扫描区域中的每个条目都应以其特定波长参考。

2 个答案:

答案 0 :(得分:2)

您的设计的问题是让示例表包含所有扫描的数据(1000多个)。那就是你遇到问题的地方。

你需要3张桌子。一个用于患者,您已描述过。第二个用于样本,第三个用于扫描。

扫描表是扫描数据的去向。该表可能有4列ScanId(主键)。 SampleId(引用样本表中一行的外键),序列号,因此您可以按时间顺序(如有必要)对样本进行所有扫描,并扫描值。

现在,样本表中只有每个样本出现一次的数据值,例如样本日期。

您可以在需要时将所有三个表连接在一起。

答案 1 :(得分:-1)

为什么不使用MongoDB呢?每只鼠标都有一个包含扫描数据的文档。

然后,您可以使用MongoDB的板载分析(或使用Apache Spark之类的内容)随意对数据进行切片和切块。