Sql server SQL Server-循环级联路径
假设我有两个表-User和Post 我引入了一个定制的联接表Vote,以便在User和Post之间建立多对多关系 这些表格的结构如下:Sql server SQL Server-循环级联路径,sql-server,foreign-keys,entity-relationship,jointable,table-relationships,Sql Server,Foreign Keys,Entity Relationship,Jointable,Table Relationships,假设我有两个表-User和Post 我引入了一个定制的联接表Vote,以便在User和Post之间建立多对多关系 这些表格的结构如下: 用户(UseId,名称) 发布(发布ID、用户ID、内容) 投票(Id、用户Id、PostId、值) 注: 每个表的强调列都是一个PK Post中的UserId是一个FKtoUser表 Vote表中的UserId和PostId列位于 各表 其他列如Value、Content、Name等都是varchar 考虑到上述设计是合适的(如果不是,欢迎建议:)
- 用户(UseId,名称)
- 发布(发布ID、用户ID、内容)
- 投票(Id、用户Id、PostId、值)
- 每个表的强调列都是一个
PK
- Post中的
是一个UserId
toUser表FK
Vote表中的
和UserId
列位于 各表李>PostId
- 其他列如
、Value
、Content
等都是varcharName
- 其他列如
考虑到上述设计是合适的(如果不是,欢迎建议:) 我想要的是:
UserId
列应设置为NULL更新:
如果您也遇到过多个级联路径,请查看这一令人敬畏的消息:您正在寻找级联外键关系。对于前两项:
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;
其中一种方法是向每个表中添加
isdeleted bit,changed datetime
列,并在删除时使用触发器更新列值。在这种情况下,您将保留投票、帖子和用户的历史记录
或者只是删除触发器
或者使用Gordon Linoff发布的cascade关系。您忘记了
引用部分,或者我遗漏了什么?@MikeNakis。谢谢你。@GordonLinoff我尝试了级联外键,但最终导致循环冗余。我会按你的方式试试看:)@GordonLinoff它确实有效,谢谢!我把人际关系搞砸了,陷入了循环路径。。现在完成了..@VijayChavda。很高兴我能帮忙。外键关系可能会变得混乱,尤其是当您试图管理多个关系时。