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发布的级联关系。