SQL Server 2008 - 多个级联 FK - 我需要触发器吗?

2023-12-02

我之间有 1..* 关系User and Post。 (一个用户有多个帖子)

Post有一个名为“UserId”的 FK,它映射到上的“UserId”字段User table.

我尝试将此 FK 设置为 Cascade UPDATE/DELETE,但出现此错误:

“用户”表已成功保存 “帖子”表 - 无法创建关系“FK_Posts_Users”。
在表“Posts”上引入 FOREIGN KEY 约束“FK_Posts_Users”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束。请参阅以前的错误。

我有一张桌子叫帖子有帮助。一篇文章有​​很多有用的内容。

Helpful 具有到用户的级联 FK(因此,当删除用户时,其 Helpful 也会被删除)。

但我认为这就是抱怨“多级联路径”的原因。

因为如果我删除一个用户(当前),它将删除他们的帮助。但我也尝试向帖子添加一个级联,这样做会删除该帖子,然后尝试删除该帖子的“有用”(因为“有用”也有一个到“帖子”的级联 FK)。在这种情况下,SQL 会选择哪个级联 FK?

这是所讨论的三个表的数据库图:

enter image description here

正如您所看到的,“PostHelpful”是“Post”和“User”的子级(两者都有 FK)。

所以我不能让两个键级联吗?我是否需要“用户”上的触发器(删除后)来手动删除帮助信息(以及引用用户的其他表)。


SQL Server 选择哪条路径并不重要,它不允许这样做,这样它就不会陷入妥协的境地。当我们遇到这种情况时,我们不得不求助于触发器。

1)根据错误提示,修改用户帖子帮助 FK to 删除时不执行任何操作.

2)添加一个而不是删除触发用户:

CREATE TRIGGER dbo.Users_IO_Delete 
ON dbo.Users
INSTEAD OF DELETE
AS
BEGIN;
    DELETE FROM dbo.PostHelpfuls WHERE UserId IN (SELECT UserId FROM deleted);

    DELETE FROM dbo.Users WHERE UserId IN (SELECT UserId FROM deleted);
END;

现在,FK 仍将强制执行 DRI,但触发器是级联删除而不是 FK 约束。

你可以替换帖子帮助者 with Posts在上述步骤中。但执行此操作时,最好使用触发器来删除不太独立的实体的记录。换句话说,更有可能的是Posts与旁边的表相关Users and 帖子帮助者 than 帖子帮助者与旁边的表相关Users and Posts.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2008 - 多个级联 FK - 我需要触发器吗? 的相关文章

  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • 没有 OAuth 的 Spring Security JWT

    最近我开始学习如何使用oauth 2 0 jwt配置spring boot 我有一个问题 是否可以使用spring boot security jwt避免oauth 2 0 是的 可以使用JWT无需使用标准化的功能OAuth 2 0 flo
  • 如何为 Windows toast 注册协议?

    如何注册 Windows toast 协议 样本中来自https blogs msdn microsoft com tiles and toasts 2015 07 02 adaptive and interactive toast not
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 自定义 Visual Studio 2008 中的位置栏

    有人成功定制了 VS 2008 的 Places Bar 吗 我从 VS 2005 进行的自定义设置并没有转移到 2008 显然 并且无论我如何处理注册表 我都无法使我的自定义位置出现在 打开 对话框中 我已经阅读并应用了相关的MS KB文
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议

随机推荐

  • 问:解决Java中的almostIncreasingSequence问题(Codefights)

    我无法通过最后的隐藏测试 你能告诉我我错过了什么吗 提前谢谢 以下是语句 给定一个整数序列作为数组 确定是否可以通过从数组中删除不超过一个元素来获得严格递增序列 boolean almostIncreasingSequence int se
  • 使用非托管代码使用扩展名获取文件图标时在 x86 系统上出现异常

    我正在开发磁盘目录应用程序 需要我使用从数据库检索的文件扩展名来获取文件图标 使用其扩展名获取文件图标的代码在具有任何 CPU 调试配置的 Windows 7 x64 计算机上工作得非常好 但是当我在调试配置中切换到 x86 时 我收到以下
  • 适用于 Chrome 扩展的 Azure AD 应用重定向 URI

    我正在使用适用于 JavaScript 的 Microsoft 身份验证库 MSAL js 版本1 3 2在我的基于 React JS 的 chrome 扩展中 我需要支持两个登录场景 以便获得在应用程序的其余部分中使用的不记名令牌 pro
  • 使用 CSS 添加虚线间隔/填充

    我正在一家餐厅网站上工作 该设计要求在菜单项和价格之间使用典型的虚线填充 我已经在网上搜索并弄乱了它一个小时左右 但似乎找不到任何仅使用 CSS 来做到这一点的好方法 我在这里发现了一些其他解决方案 如果您有纯色背景 它们效果很好 但是在这
  • 如何在 ChartJS 中排序、插入和更新完整数据集?

    我在使用 ChartJS 时遇到一些问题 简单的更新方法无法解决 我想知道是否有一个选择 轻松地对数据集进行排序 在两点之间插入一些数据 重新加载整个图表而不用替换画布 全新的图表 没有内置选项 但使用以下命令编写自己的选项非常容易addD
  • catch 和finally 中return 语句的行为

    请参阅以下代码并解释输出行为 public class MyFinalTest public int doMethod try throw new Exception catch Exception ex return 5 finally
  • Python:为列表或对象中的变量赋值[重复]

    这个问题在这里已经有答案了 我想做以下事情 a 1 b 2 c 3 tom a b c for i in tom i 6 期望的结果是a 6 实际结果是a 1 我猜想如果没有某种执行程序就没有办法做到这一点 正确的 最初我误解了你的问题 我
  • Codeigniter:更新图像和显示

    我遇到了更新图像的问题 我已经创建了图像上传 效果很好 但我也希望对其进行更新 当我添加需要的图像时 它会正确更新 但如果我不想更改图像并保持原样 则无法检索我当前的图像 请帮我 控制器 public function insert dat
  • 元数据和微观数据有什么区别?

    我对这两个术语感到很困惑 我知道元数据的基本含义是 关于数据的数据 微观数据是指网页现在更容易被搜索引擎访问 但这两个术语的区别是什么 微观数据是特定技术的名称 metadata是一个通用术语 正如您所解释的 元数据是关于数据的数据 我们通
  • 具有重复项的类的多标签编码

    如何对具有重复项的列表列进行 n hot 编码 就像是MultiLabelBinarizer来自 sklearn 它计算重复类的实例数量而不是二值化 输入示例 x pd Series a b a b c c c 预期输出 a b c 0 2
  • 序列化数组时删除 根元素

    这是一个代码示例 public class Person public string FirstName get set public string LastName get set static void Main Person pers
  • 字节数组到 UIImage Objective-C

    我有一个字节数组 unsigned char outputData unsigned char malloc sizeof unsigned char w h 4 outputData y h 4 x 4 0 all alpha value
  • 我可以直接将地址分配给指针吗?如果是这样,该怎么做?

    int main int a 2 address is 0x7ffeefbff58c int b a std cout lt lt address of a lt lt b lt lt std endl return 0 我的 int 变量
  • Firebase身份验证单元测试错误没有Firebase应用程序

    我正在尝试测试我的firebase auth方法 身份验证方法有登录 注销 注册等 这是我想要执行单元测试的方法 我收到错误No Firebase App DEFAULT has been created call Firebase ini
  • 如何创建自定义消息框?

    我正在尝试用我的控件制作一个自定义消息框 public static partial class Msg Form public static void show string content string description 实际上我
  • 如何隐藏不适合网格的项目?

    我有一个水平放置 6 个项目的网格 每个项目的最小宽度为 200 像素 如果没有足够的空间容纳整个项目 则应隐藏该项目 现在 当没有足够的空间容纳整个项目时 它会部分显示 如何隐藏不完全适合网格的项目 而不是部分显示 进一步解释 每个网格项
  • C/C++ - 可执行路径

    我想获取当前可执行文件的文件路径 末尾不包含可执行文件名称 我在用着 char path 1024 uint32 t size sizeof path if NSGetExecutablePath path size 0 printf ex
  • JWPlayer - 自定义列表栏以添加“下载”链接

    我们需要允许用户下载他们当前在 JWPlayer 中观看的任何视频 最合乎逻辑的方法是在播放列表 列表栏中添加 下载 链接 列表栏可以定制到这种程度吗 这是一个快速演示 我更新了它 以便它可以在每个播放列表项目的基础上工作 并且我对图像进行
  • Spring mvc @RequestMapping 在类级别和方法级别 404 状态

    我知道这里有很多帖子都有同样的问题 但它们似乎都没有帮助我 所以这可能是重复的 我使用 Maven 创建一个 spring mvc 应用程序 我只有一个控制器和一种方法 当我仅将请求映射注释放在类级别时 应用程序工作正常 但是当我将其放在类
  • SQL Server 2008 - 多个级联 FK - 我需要触发器吗?

    我之间有 1 关系User and Post 一个用户有多个帖子 Post有一个名为 UserId 的 FK 它映射到上的 UserId 字段User table 我尝试将此 FK 设置为 Cascade UPDATE DELETE 但出现