我有一组表,我目前正试图为表设置正确的关系。浓缩版本如下。解决循环和多个级联路径
Users
ID INT NOT NULL
Activities
ID INT NOT NULL
UserID INT NULL
Logs
ID INT NOT NULL
UserID INT NULL
ActivityID INT NULL
我有关系,从两个Activities
和Logs
回Users.ID
和ActivityID
与回Activities.ID
与UserID
。
我已经设置Activities.UserID
和Logs.UserID
在删除时设置为null,并在更新时级联。我的问题是,当我试图设置相同的更新和删除功能Logs.ActivityID
,但我得到一个关于“可能导致周期或多个级联路径”的错误。我的问题是,Logs
需要一个用户,并且不需要Activity
,但Logs
确实有一个Activity
需要更新,如果Activity
发生更改时。
我有什么办法,不涉及有两个单独的Logs
表,并且不涉及手动更新Logs
表。这在SQL Server 2012中甚至可能吗?
为什么你需要这样做级联?我怀疑,删除一个用户是一个非常罕见的事件,你可以编写自己的删除逻辑,在删除用户之前手动删除(或设置NULL)值。 –
如果我实际上不能使用它们,级联和设置为null会有什么意义?重点是,他们在那里被使用,我希望能够解决SQL服务器在几乎所有其他的SQL引擎上的缺点,而不必编写删除和空逻辑我自己 – bizzehdee
很多东西存在考虑到最简单的实现编写的SQL Server,并且未针对更复杂的实现进行测试(因此不支持)。 FWIW,由于这个和其他原因,我从未在生产中使用CASCADE。如果在有多条路径的情况下让CASCADE自动工作对您来说很重要,那么请务必使用另一个数据库平台。当然,你会花更多的时间来转换你的模式和代码,而不是编写一个程序来为你做这件事...... –