SQL Server の外部キーにカスケード削除を追加する際に問題が発生しています。テーブル A には 3 つの列があります。テーブル A の列 1 と 2 は、テーブル B の同じ列への外部キー ルックアップです。これらの外部キーに基づいてテーブル A の行の削除をカスケードするために、テーブル B の行の削除が必要です。
テーブル A の他の列には、テーブル C への外部キー ルックアップがあります。テーブル C の行が削除された場合、テーブル A で対応するセルを null に設定する必要があります。
これらの制約を追加すると、エラーがスローされます。
テーブル '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"/>
助けてくれてありがとう