我正在设计一个新的实验室数据库,其中包含许多我的主实体类型。
每个实体的表将保存所有类型的该实体的公共字段(entity_id、created_on、created_by等)。然后,我将使用具体继承(为每个唯一属性集创建单独的表)来存储所有其余字段。
我认为这是处理实验室日常流程中标准数据的最佳设计。但是,我们经常有特殊样本,通常伴随着发起者希望存储的特定值。
问题:如何对特殊(非标准)实体进行建模?
选项1:使用实体-值存储特殊字段
一个表(entity_id、attribute_name、numerical_value)将保存任何特殊实体的所有数据。
+ 较少的表。
- 无法强制要求特定属性。
- 必须转换(透视)行到列,效率低下。
选项2:严格的具体继承。
为每个单独的特殊情况创建单独的表。
+ 符合所有其他规则
- 许多只有几行的表的开销较大。
选项3:具体继承,特殊表位于不同的用户下。
将所有特殊表放在不同的用户下。
+ 保持所有特殊和标准表分开。
+ 更容易在列表中搜索常见的标准表,而无需搜索所有特殊表。
- 许多只有几行的表的开销较大。