解析循环和多个级联路径

biz*_*dee 0 t-sql 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
Run Code Online (Sandbox Code Playgroud)

我有与关系UserID从两个ActivitiesLogsUsers.IDActivityID与回Activities.ID.

我已设置Activities.UserIDLogs.UserID在删除时设置null,并在更新时级联.当我尝试将相同的更新和删除功能设置为Logs.ActivityID但我得到关于"可能导致循环或多个级联路径"的错误时,我的问题就来了.我的问题是,Logs需要一个用户,并且不需要Activity,但是,如果和更改Logs,确实Activity需要更新Activity.

我有什么方法可以不涉及两个单独的Logs表,并且不涉及手动更新Logs表.这在SQL Server 2012中甚至可能吗?

Aar*_*and 7

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

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

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

  3. 等待SQL Server修复此问题.不要屏住呼吸 - 多年来这一直是一种限制.请参阅以下连接项:

    一个.http://connect.microsoft.com/SQLServer/feedback/details/126159/cascade-updates
    b.http://connect.microsoft.com/SQLServer/feedback/details/307723/allow-multiple-cascade-paths-for-foreign-key-and-on-dalete-update-cascade

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

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

  • @bizzehdee太棒了,玩得开心!大多数人没有这种灵活性.希望以后在这个项目中你不会遇到mysql或pgsql的限制,这会让你想要切换回来. (2认同)