【发布时间】:2014-06-28 23:49:22
【问题描述】:
在 PostgreSQL 中,我有一个主表 ICD9,它旨在保存 cicd9 和 cdesc 的唯一组合,并具有以下约束:
CONSTRAINT constraint_cdesc UNIQUE (cicd9, cdesc)
我有多个子表引用 ICD9 表:
CONSTRAINT fk_icd9 FOREIGN KEY (cicd9, cdesc)
REFERENCES icd9 (cicd9, cdesc) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED
我可以更改我需要的任何约束,但我的目标是使用主表来更正子表的所有拼写错误。我在互联网上没有找到好的(或任何)答案。问题是更新 cdesc 中的错误拼写或 cicd9 中的错误代码会导致主表中出现重复条目——因此会引发错误。
解决这个(我认为)相对常见的问题的最佳方法是什么?
注意:我在一个单独的程序中使用 C# (Net 4.0) 来处理 PostgreSQL 9.1 数据库服务器(我是其中的管理员)。
【问题讨论】:
-
我认为你的做法是错误的。如果您打算让“主”表包含拼写,则应在主表中引入人工键(身份或类似键),并将其用作关联表中的 FK。重复描述是要避免的。对于您的特定问题,如果您在更新时遇到重复值冲突,那么这是因为数据会导致一个(您可能会修复拼写错误,其中已经存在非拼写错误记录),然后您应该更新数据手动/通过触发器代替。
-
@AllanS.Hansen 有道理。我需要更多地研究触发因素。举个例子真的很有帮助。
标签: c# sql database postgresql constraints