![]() |
1
15
级联删除 在MSSQL中,服务器只能级联到单个表。如果有两个表与维度表具有外键关系,则只能将删除级联到其中一个表。(这是为了防止通过多个路径级联,并创建冲突,就像C++允许多重继承,但C.*只允许单继承)。 在这种情况下,您必须使用触发器或在代码中专门处理这种情况。 出于这个原因,我看到许多人在所有情况下都选择使用触发器。即使只有一张外国桌子。这确保了一致性,因此人们知道在维护数据库时要寻找什么。 如果可以将一个删除级联到多个表,我会说这是最可取的选择。然而,这种限制使水变得浑浊,我目前更倾向于拥有所有此类行为的触发器。使用触发器进行级联删除和更新的开销在编码方面只是很小的,但允许真正通用的标准实践。 编辑: 你可能想把“接受的答案”转移到别人身上,我已经知道我错了。 您可以让多个事实数据表具有对一个可签名维度表的删除级联外键约束。 您不能做的是让一个事实表具有对多个维度表的删除级联外键约束。
例如…
如果删除了个人或考试,您还需要删除相关的考试分数记录。 在MS SQL Server中不能使用on delete cascade,因此需要触发器。 (向试图向我解释这一点但我完全没有理解他的观点的迈尔达道歉。) |
![]() |
2
10
远离不必要的触发。
一起去
|
![]() |
3
1
我会在删除时使用cascade,但是只有当您确定要删除父级时才使用cascade。 如果您有任何条件逻辑(如果在星期日删除,我只删除子级),那么使用触发器。
我就把它换成
|
![]() |
4
1
我几乎同意这里的DEMS,除了我使用
称我为乐观主义者,但我相信a)我的代码将在移植到未来版本的MS SQL Server后仍然有效;b)SQL Server团队将很快着手解决“一个级联路径”的限制,在这一点上,我将用级联引用操作替换触发器:) |
![]() |
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 1 年前 |
![]() |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
Java · 使用交叉应用同时显示两列 2 年前 |