Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除时的外键级联_Sql_Sql Server - Fatal编程技术网

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英镑是为了让你开心;)