*MSSQL Server中的 *CASCADE DELETE
只能级联到单个表。如果您有两个与维表具有外键关系的表,则只能级联删除到其中一个表。(这是为了防止删除通过多个路径级联并造成冲突,就像C
++允许多重继承,而C#仅允许单一继承一样)
在这种情况下,您将不得不使用触发器或在代码中专门处理该情况。
因此,我看到许多人在所有情况下都选择使用触发器。即使只有一张外国桌子。这样可以确保一致性,因此人们知道维护数据库时要查找的内容。
如果可以将一个删除级联到一个以上的表,我会说这将是最可取的选择。但是,这种限制使情况更加混乱,我目前更赞成拥有所有此类行为的触发器。就编码而言,使用触发器进行级联删除和更新的开销很小,但确实允许真正通用的标准实践。
编辑:
您可能想将“已接受的答案”移给其他人,我已经算出我在上述问题上是错的。
您可以有多个事实表,它们具有对DESIGNE Dimension表的ON DELETE CASCADE外键约束。
您不能做的是拥有一个事实表,并具有对多个维度表的ON DELETE CASCADE外键约束。
因此,例如…-
维度表[人](id INT IDENTITY,)
-维度表[考试](id INT IDENTITY,)
-面孔表[Exam_Score](person_id INT,exam_id INT,得分INT)
如果“人员”或“考试”中的任何一个被删除,则您希望关联的Exam_Score记录也被删除。
在MS SQL Server中使用ON DELETE CASCADE是不可能的,因此需要触发器。
(向迈尔达德致歉,他试图向我解释这一点,但我完全错过了他的观点。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)