ハウディ、同じテーブルを指す複数の外部キーにカスケードが必要な問題があります。
[Insights]
| ID | Title |
| 1 | Monty Python |
| 2 | Spamalot |
[BroaderInsights_Insights]
| broaderinsight_id | insight_id |
| 1 | 2 |
基本的に、インサイトテーブルのレコード1つまたは2つが削除されると、関係も削除する必要があります。
私はこれを試しました:
CREATE TABLE broader_insights_insights(id INT NOT NULL IDENTITY(1,1),
broader_insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
PRIMARY KEY(id))
Go
これにより、カスケードが「サイクルまたは複数のカスケードパスを引き起こす可能性がある」という警告が表示されます。
そこで、iveはinsight_idだけにカスケードを追加しようとしましたが、結果は次のようになります。
「DELETEステートメントがREFERENCE制約と競合しました」
何か案は?
ありがとう
ダニエル
これを機能させるには、これをインサイトのINSTEADOF削除トリガーとして実装する必要があります。何かのようなもの:
create trigger T_Insights_D
on Insights
instead of delete
as
set nocount on
delete from broader_insights_insights
where insight_id in (select ID from deleted) or
broader_insight_id in (select ID from deleted)
delete from Insights where ID in (select ID from deleted)
多くの場合、カスケード削除と多くの外部キーでは、「ツリー」の最上位で発生する削除が参照テーブルに正常にカスケードされるように、「カスケード」順序を計算するために時間を費やす必要があります。しかし、この場合、それは不可能です。