【发布时间】:2010-01-19 08:29:50
【问题描述】:
我的朋友正在开发一种产品,供不同的独立医疗单位使用。
数据库存储在不同时间进行的大量测量值,例如温度、血压等......
让我们假设它们保存在一个名为exams 的表中,其中包含temperature、pressure 等列(以及id、patient_id 和timestamp)。大多数测量值都存储为浮点数,但有些是其他类型(字符串、整数...)
虽然其中许多测量是由他们的产品处理的,但它需要允许不同的医疗单位记录和处理其他自定义测量。一个非常漂亮的 UI 允许管理员编辑这些自定义字段,指定它们的名称、类型、可能的值范围等......
他不确定如何存储这些自定义字段。
他倾向于一张单独的表(比如一张表custom_exam_data,其中包含exam_id、custom_field_id、float_value、string_value、...等字段)
我担心这会使搜索更难实现,效率也更低。
我倾向于直接修改考试表(同时避免列名与某些方案发生冲突,例如在所有自定义字段前加上下划线或将它们命名为 custom_1,...)
他担心动态修改数据库并为每个医疗单位使用不同的模式。
希望有更多经验的人可以在这个问题上发表意见。
注意事项:
他正在使用 Ruby on Rails,但我认为这个问题几乎与框架无关,除了他只在 SQL 数据库中寻找解决方案这一事实。
我稍微简化了问题,因为自定义字段需要可用于多个表,但我相信这不会真正影响采取的方向。
(添加)一个非常通用的报告模块将需要搜索、排序、生成这些数据的统计信息等,因此需要将这些数据存储在适当类型的列中
(已添加)对于标准字段和自定义字段,将过滤用户输入。例如,将检查给定范围内的数字(不能有 -12 或 +444 的温度)等...因此,转换为适当的 SQL 类型不是问题。
【问题讨论】:
标签: sql database database-design