1

可以說我有兩個表 - 用戶SQL服務器 - 循環級聯通路

我介紹了一個定製的連接表投票用戶之間的許多一對多的關係郵政編碼

該表具有以下結構:

  • 用戶USEID,名稱)
  • 郵政帖子ID,用戶ID,內容)
  • 投票標識,UserId,PostId,Value)

注:

  • 每個表的列強調是PK
  • UserId郵政FK用戶表。
  • 投票表中的UserIdPostId列是FK到 各表。
  • 其他列如ValueContent,Name等都是varchar。

考慮到上述的設計是適當的(如果不是,建議是歡迎:) .....

我要的是:

  1. 如果後一排表被刪除,中的相關行投票也應該刪除。
  2. 如果中的一行用戶表被刪除,相關行投票也應該刪除。
  3. 如果中的一行用戶表被刪除,相關行的UserId應該設置爲NULL。

我可以實現這種關係嗎,沒有任何Cyclic-Redundancy?如果是,如何?


UPDATE:

退房這個真棒answer如果你也曾經面臨多個級聯路徑:

回答

2

您正在尋找級聯外鍵關係。對於前兩種:

alter table vote 
    add constraint fk_vote_user 
     foreign key (userid) references user(userid) on delete cascade; 

alter table vote 
    add constraint fk_vote_post 
     foreign key (postid) references post(postid) on delete cascade; 

對於第三:

alter table post 
    add constraint fk_post_user 
     foreign key (userid) references user(userid) on delete set null; 

這些在documentation說明。

+0

您忘記了'references'部分,還是我錯過了什麼? –

+1

@MikeNakis。 。 。謝謝。 –

+0

@GordonLinoff我嘗試了級聯外鍵,但我最終得到了循環冗餘。我會試試你的方式,看看:) –

1

一種方法是將isdeleted bit, changed datetime列添加到每個表,並使用觸發器更新刪除列值。在這種情況下,您將保留您的投票,帖子和用戶的歷史記錄。

或者只是刪除觸發器。

或者使用Gordon Linoff發佈的級聯關係。