我在Azure SQL中使用可视化编辑器尝试过这种方法,而SQL并不是我最强大的技能。
带2个表的简单数据库。
Table Person with just id.
Table Hating with id, hater, target.
Hating.hater
和Hating.target
都是必需的,都是Person.id
的外键
并且都有ON DELETE CASCADE。
因此,人与人之间基本上是多对多的关系,如果删除了发起者或目标,则有意删除该关系。
但是,如果两个外键都是级联的,那么这将不起作用。如果只是其他的,那就可以正常工作,但如果两者都是,那就不行。
这是SQL中的一些限制吗?有没有办法完成我想要做的事情?
答案 0 :(得分:1)
同一个表中不能有2个级联键。但是,你可以让一个触发器为你工作。因此,不要使用两个级联键,而是在人员表中添加一个触发器(未经测试,但这里有想法):
CREATE TRIGGER T_PERSON_CASCADE ON Person FOR DELETE AS
DELETE FROM Hating WHERE hater IN (SELECT id FROM deleted) OR target IN (SELECT id FROM deleted)
END