解析循环和多个级联路径

时间:2014-01-20 20:19:20

标签: tsql sql-server-2012

我有一组表,我正在尝试为表设置正确的关系。精简版本如下。

Users
    ID INT NOT NULL

Activities
    ID INT NOT NULL
    UserID INT NULL

Logs
    ID INT NOT NULL
    UserID INT NULL
    ActivityID INT NULL

我与UserIDActivities的{​​{1}}关系回LogsUsers.ID关系回ActivityID

我已将Activities.IDActivities.UserID设置为在删除时设置为null,并在更新时级联。当我尝试将相同的更新和删除函数设置为Logs.UserID时,我的问题就出现了,但我收到有关“可能导致循环或多个级联路径”的错误。我的问题是,Logs.ActivityID需要用户,并且不需要Logs,但Activity如果Logs需要更新Activity 1}}改变。

我对此有何看法,不涉及两个单独的Activity表,并且不涉及手动更新Logs表。这在SQL Server 2012中是否可行?

1 个答案:

答案 0 :(得分:7)

SQL Server不支持多个级联路径。您可以选择解决此限制:

  1. 编写自己的逻辑来处理多个级联路径(推荐)。

  2. 更改您的架构,以便不需要多个级联路径。

  3. 等待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

    请注意他们如何继续说“我们现在没时间做这件事;我们会考虑下次发布”吗?这不是销售软件的东西,因为人们通常会对编写逻辑本身感到满意。

  4. 迁移到支持多个级联路径的数据库平台(听起来你觉得你有很多选择,但我不认为你这样做,我不知道你通过切换牺牲了什么,而不是甚至计算移植您的架构和代码。)