gpt4 book ai didi

c# - 数据集的插入/删除/修改的正确顺序是什么?

转载 作者:可可西里 更新时间:2023-11-01 03:10:20 25 4
gpt4 key购买 nike

The MSDN claims that the order is :

  1. 子表:删除记录。
  2. 父表:插入、更新和删除记录。
  3. 子表:插入和更新记录。

我对此有疑问。

例子:ParentTable 有两条记录 parent1(Id : 1) 和 parent2(Id : 2)

ChildTable有一条记录child1(Id : 1, ParentId : 1)

如果我们更新 child1 以拥有一个新的父 parent2,然后我们删除 parent1。

  1. 我们在子表中没有要删除的内容
  2. 我们删除 parent1 :我们打破了约束,因为 child 仍然依附于 parent1,除非我们先更新它。

那么什么是正确的顺序,MSDN 在这个问题上是错误的吗?

我个人的想法是

  1. 子表:删除记录。
  2. 父表:插入、更新记录。
  3. 子表:插入和更新记录。
  4. 父表:删除记录。

但问题是,由于存在潜在的唯一约束,我们必须始终在添加新记录之前删除表中的记录...所以我现在没有将数据提交到数据库的解决方案。

编辑:感谢您的回答,但您的极端案例是我的日常案例...我选择了禁用约束的丑陋解决方案,然后更新数据库并重新启用约束。我仍在寻找更好的解决方案..

最佳答案

您的 SQL 产品不支持延迟约束检查吗?

如果没有,你可以试试

删除所有子记录-删除所有父记录-插入所有父记录-插入所有子记录

其中任何 UPDATE 已被拆分为其构成的 DELETE 和 INSERT。

这应该在所有情况下都能正常工作,但可能在任何情况下都以可接受的速度......

还可以证明,这是唯一可以在所有情况下正常工作的方案,因为:

(a) 对父项的关键约束规定父项 DELETES 必须先于父项 INSERTS,
(b) 对子项的关键约束规定子项 DELETES 必须先于子项 INSERTS,
(c) FK 规定子 DELETES 必须先于父 DELETES
(d) FK 还规定子 INSERTS 必须跟在父 INSERTS 之后

给定的序列是满足这 4 个要求的唯一可能的序列,它还表明无论如何更新对 child 的解决方案都是不可能的,因为更新意味着“同时”删除和插入。

关于c# - 数据集的插入/删除/修改的正确顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com