Sql 删除时的外键级联
假设我有以下表格Sql 删除时的外键级联,sql,sql-server,Sql,Sql Server,假设我有以下表格 User,Article,Comment 用户可以对文章发表评论,或撰写文章 我想要的行为是: 当我删除一个用户时,它应该删除他所有的文章和 注释 当我删除一篇文章时,它应该删除它的所有评论 因此,我认为我应该使用外键,并尝试将上述内容建模为以下内容 CREATE TABLE [User]( UserId int PRIMARY KEY IDENTITY(1,1), Username nvarchar(50) NOT NULL ) CREATE TABLE
User,Article,Comment
用户
可以对文章
发表评论
,或撰写文章
我想要的行为是:
- 当我删除一个
时,它应该删除他所有的用户
和文章
注释
- 当我删除一篇
时,它应该删除它的所有文章
评论
外键
,并尝试将上述内容建模为以下内容
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
)
但问题在于注释
导致
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.
我的问题是,您如何对这种行为建模,并且仍然使用
删除时级联
和外键
?您应该能够删除注释中用户外键上的级联删除
当用户被删除时,这将级联删除文章,这将级联删除评论:
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
)
您应该能够删除注释中用户外键上的级联删除 当用户被删除时,这将级联删除文章,这将级联删除评论:
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
)
与您的问题无关,但您可能希望
Username
包含多个字符。@GordonLinoff为什么不!我做了50英镑是为了让你开心;)与您的问题无关,但您可能希望Username
包含多个字符。@GordonLinoff为什么不!我做了50英镑是为了让你开心;)