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

bla*_*e24 4 php mysql sql database rdbms

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

Mic*_*ski 5

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

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

考虑以下:

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
Run Code Online (Sandbox Code Playgroud)

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