2016-02-03 182 views
0

假設我有上Article下表外鍵級聯刪除時

User,Article,Comment 

一個User可以Comment或寫Article

我想要的行爲:

  • 當我刪除User應該刪除他的所有ArticlesComments
  • 當我刪除Article應該刪除其所有Comments

所以我認爲我應該使用FOREIGN KEYS並試圖將上面的模型設爲

CREATE TABLE [User](
    UserId int PRIMARY KEY IDENTITY(1,1), 
    Username nvarchar(50) NOT NULL 
) 

CREATE TABLE [Article](
    ArticleId int PRIMARY KEY IDENTITY(1,1), 
    UserId int NOT NULL, 
    FOREIGN KEY(UserId) references [User](UserId) ON DELETE CASCADE 
) 

CREATE TABLE [Comment](
    CommentId int PRIMARY KEY IDENTITY(1,1), 
    UserId int Not NULL, 
    ArticleId int NOT NULL , 
    FOREIGN KEY(UserId) references [User](UserId) ON DELETE CASCADE, 
    FOREIGN KEY(ArticleId) references [Article](ArticleId) ON DELETE CASCADE 
) 

但問題自帶Comment造成

Introducing FOREIGN KEY constraint 'FK__Comment__Article__32E0915F' on table 'Comment' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. 

我的問題是你會如何模擬這種行爲,並仍然使用CASCADE ON DELETEFOREIGEN KEYS

+0

不相關的問題,但你可能想'Username'有超過一個字符。 –

+0

@GordonLinoff爲什麼不能!我把它做成50讓你開心;) – Bread

回答

2

您應該只能刪除註釋上的用戶外鍵上的級聯刪除。

當用戶被刪除,這將級聯刪除的文章,這將反過來級聯刪除評論:

CREATE TABLE [Comment](
    CommentId int PRIMARY KEY IDENTITY(1,1), 
    UserId int Not NULL, 
    ArticleId int NOT NULL , 
    FOREIGN KEY(UserId) references [User](UserId), 
    FOREIGN KEY(ArticleId) references [Article](ArticleId) ON DELETE CASCADE 
)