2012-12-10 84 views
1

我的MSSQL數據庫設計如下:級聯刪除重複的外鍵?那可能嗎?

一個帶圖片表格,image_id = PK一個表影片,VIDEO_ID與評論 = PK一張桌子,COMMENT_ID = PK,和兩個字段唯一匹配父:item_id(等於image_id或 video_id)和item_type,告訴我是誰的父級( 圖像或視頻)。

如何添加級聯刪除,以便在刪除圖像時自動刪除與Images.image_id = Comments.item_id AND Comments.item_type = 'image'匹配的註釋?正如你看到的,爲了這個工作,我必須指定項目類型和item_id,因爲另一個註釋可以存在於相同的item_id但具有不同的item_type屬性。

回答

1

使用TRIGGER,這允許你包括必要的c.item_type = 'image'過濾器:

CREATE TRIGGER [dbo].[TrgImagesDelete] ON [dbo].[Images] FOR DELETE 
AS 
BEGIN 
    DELETE c 
    FROM 
     Comments c 
     JOIN Deleted d 
      ON c.item_id = d.image_id 
      AND c.item_type = 'image' 
END 
GO 
+0

感謝您的回答,但我一直在尋找一種非觸發的解決方案。如果不能這樣做,我想我最好通過代碼來完成,併發送2條刪除語句,包含在一個tranzaction語句中。你認爲這樣可以嗎? – osmiumbin

+0

@osmiumbin是的,這聽起來對我來說也是一個很好的解決方案。 –

+0

@osmiumbin我的理解是希望避免觸發器,因爲如果它們被大量使用,它們可能很難排除故障,但請注意,應用程序方法並不能保證數據庫中的規則正在被遵循......未來可能會出現一個問題,即應用程序的不同部分以不同的方式實現刪除操作,並且不會像應該那樣清理註釋......只是需要牢記。 –