我有一组表,我正在尝试为表设置正确的关系。精简版本如下。
Users
ID INT NOT NULL
Activities
ID INT NOT NULL
UserID INT NULL
Logs
ID INT NOT NULL
UserID INT NULL
ActivityID INT NULL
我与UserID
和Activities
的{{1}}关系回Logs
和Users.ID
关系回ActivityID
。
我已将Activities.ID
和Activities.UserID
设置为在删除时设置为null,并在更新时级联。当我尝试将相同的更新和删除函数设置为Logs.UserID
时,我的问题就出现了,但我收到有关“可能导致循环或多个级联路径”的错误。我的问题是,Logs.ActivityID
需要用户,并且不需要Logs
,但Activity
如果Logs
需要更新Activity
1}}改变。
我对此有何看法,不涉及两个单独的Activity
表,并且不涉及手动更新Logs
表。这在SQL Server 2012中是否可行?
答案 0 :(得分:7)
SQL Server不支持多个级联路径。您可以选择解决此限制:
编写自己的逻辑来处理多个级联路径(推荐)。
更改您的架构,以便不需要多个级联路径。
等待SQL Server修复此问题。不要屏住呼吸 - 多年来这一直是一种限制。请参阅这些连接项目:
一个。 http://connect.microsoft.com/SQLServer/feedback/details/126159/cascade-updates
湾http://connect.microsoft.com/SQLServer/feedback/details/307723/allow-multiple-cascade-paths-for-foreign-key-and-on-dalete-update-cascade
请注意他们如何继续说“我们现在没时间做这件事;我们会考虑下次发布”吗?这不是销售软件的东西,因为人们通常会对编写逻辑本身感到满意。
迁移到支持多个级联路径的数据库平台(听起来你觉得你有很多选择,但我不认为你这样做,我不知道你通过切换牺牲了什么,而不是甚至计算移植您的架构和代码。)