SQL 服务器 - 循环级联路径

SQL Server - Cyclic Cascade Path

假设我有两个 tables - UserPost

我引入了自定义的 Join table Vote 以在 UserPost.

table 具有以下结构:

备注:


考虑到上面的设计是合适的(如果不合适,欢迎提出建议:)......

我要的是:

  1. 如果PostTable中的一行被删除,投票中的相关行也应该被删除已删除。
  2. 如果 User Table 中的一行被删除,Vote 中的相关行也应该被删除。
  3. 如果 User Table 中的一行被删除,Post[= 中相关行的 UserId 列76=] 应设置为 NULL。

我可以在没有任何 Cyclic-Redundancy 的情况下建立这种关系吗?如果是,怎么做?


更新:

看看这个很棒的 answer 如果您也遇到过多个级联路径:

您正在寻找级联外键关系。对于前两个:

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 中有解释。

一种方法是向每个 table 添加 isdeleted bit, changed datetime 列,并使用触发器在删除时更新列值。在这种情况下,您将保留您的投票、帖子和用户的历史记录。

或者只是删除触发器。

或者使用 Gordon Linoff 发布的级联关系。