更新级联仅用于非规范化表吗?

时间:2011-06-26 20:34:30

标签: php mysql sql database rdbms

我只是阅读更新级联,我想知道这是否仅适用于非规范化表,状态和类型字段?似乎规范化将消除对此的需要,但我只是想确认或了解更新级联的其他有用原因。 THX!

2 个答案:

答案 0 :(得分:5)

规范化表对于强制它们之间的外键关系是必要且有用的。更改PK字段的值有点罕见,特别是如果它是auto_increment,但是当它发生时,更改会在规范化的FK关系中向下级联。

同样,ON UPDATE DELETE对于通过所有1:1 FK关系级联行删除非常有用,因此无需从应用程序代码执行多次删除操作。无论如何,这样做很容易出错。

请考虑以下事项:

table customers:
custid INT NOT NULL PRIMARY KEY,
custname VARCHAR(64) NOT NULL

table orders:
orderid INT NOT NULL PRIMARY KEY,
custid INT NOT NULL,
FOREIGN KEY (custid) REFERENCES customers (custid) ON UPDATE CASCADE ON DELETE CASCADE

假设您需要合并来自两个数据库的记录,但这会导致PK冲突。您现在可以安全地更新其中一个数据库中custid中的所有PK customers,并且所有关联的订单会自动与新ID重新关联。

答案 1 :(得分:4)

更新级联也可用于维护参照完整性。当父表的主键不是自动增量的标识值时,这非常有用。