我在将级联删除添加到 SQL Server 中的外键时遇到问题。表 A 有三列。表 A 中的第 1 列和第 2 列是对表 B 中同一列的外键查找。我希望删除表 B 中的一行,以便根据这些外键对表 A 上的一行进行删除。
表 A 中的另一列具有对表 C 的外键查找。如果表 C 中的一行被删除,那么我希望将表 A 中的相应单元格设置为空。
当我添加这些约束时,我会抛出错误:
在表“RelatedDeliverableUnit”上引入 FOREIGN KEY 约束“FK_RDU_TODELIVERABLEUNITREF”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
我对此有点坚持,Oracle 似乎对这个逻辑非常满意。我正在使用 Liquibase 添加这些约束。我认为错误取决于我的逻辑而不是语法,但为了完整起见,这里是管理外键的 Liquidbase 脚本:
<addForeignKeyConstraint constraintName="FK_RDU_FROMDELIVERABLEUNITREF" baseTableName="relatedDeliverableUnit"
baseColumnNames="FROMDELIVERABLEUNITREF" referencedTableName="DELIVERABLEUNIT" referencedColumnNames="DELIVERABLEUNITREF" onDelete="CASCADE"/>
<addForeignKeyConstraint constraintName="FK_RDU_TODELIVERABLEUNITREF" baseTableName="relatedDeliverableUnit"
baseColumnNames="TODELIVERABLEUNITREF" referencedTableName="DELIVERABLEUNIT" referencedColumnNames="DELIVERABLEUNITREF" onDelete="CASCADE"/>
<addForeignKeyConstraint constraintName="FK_RDU_RELATIONSHIPREF"
baseTableName="relatedDeliverableUnit" baseColumnNames="RELATIONSHIPREF" referencedTableName="RELATIONSHIPTYPES" referencedColumnNames="RELATIONSHIPREF" onDelete="SET NULL"/>
提前感谢您的帮助