R K*_*lev 5 database-design entity-relationship foreign-keys relationship database-normalization
我正在研究一个存储实验数据(拉曼光谱)及其元数据的PostgreSQL数据库.除了我们的样品的"正常"光谱之外,还必须获取并保存用于仪器校准目的的特殊光谱.
每次我进行实验时,我都会在表中创建一条新记录measurements
,在此我指定measurement type
相应的元数据(其他表的外键).
问题是,元数据类型的不同取决于measurement type
:
sample_id
从表中存储samples
substances
source_id
必须提供特殊标准化光源样品,物质和光源具有完全不同的属性,因此我们必须将它们保存在单独的表中,measurements
通过外键链接到表中.我认为我的数据在这里有多态关系(如果我错了,请纠正我).
在当前设计中,存储在列measurementtype_id
(突出显示为红色)中的值定义必须NULL
编辑哪些外键(突出显示为黄色)以及哪些必须包含值.
我很确定这个设计违反了第三种常规形式.我们可以有一个场景,当错误类型的元数据与测量相关联时.如何确保数据完整性?不幸的是,到目前为止我找不到合理的解决方案......
使用 PostgreSQL,您可以拥有检查约束。现在,我认为你的大问题是,如果你必须添加更多类型,随着时间的推移维护可能会成为问题。
但是,您可以相当轻松地执行以下操作:
ALTER TABLE measurements ADD
CHECK((measurementtypeid <> 1
OR (... IS NOT NULL ...)) -- CONSTRAINTS FOR TYPE 1
AND (measurementtypeid <> 2
OR (....) -- constraints for type 2
-- etc
);
Run Code Online (Sandbox Code Playgroud)
这再次解决了您眼前的问题,但稍后会成为维护问题
更好的方法是将相关列分成两个单独的联接表,因为这可以避免这种令人头疼的问题。
归档时间: |
|
查看次数: |
89 次 |
最近记录: |