sql – INSTEAD OF触发器和CASCADE路径
|
假设我在层次结构中有3个表: TableA -> TableB -> TableC TableC与TableB有外键关系,TableB与TableA有外键关系. 如果我删除了表A中的一个记录,它应该通过层次结构级联删除.使用ON DELETE CASCADE可以正常工作. 但是我们需要在TableC上放置一个INSTEAD OF触发器.我的理解是,INSTEAD OF触发器不能放在具有删除级联的表上.取自MSDN:
如果我必须在TableB-> TableC之间进行级联删除,我将需要使用INSTEAD OF触发器来强制引用完整性,然后与TableB-> TableA有相同的问题.这是一个简单的例子,但是想象一下级联路径要大得多.看起来它可以很容易地在一个漫长的瀑布路径上滚雪球. 那么处理这种情况的最佳做法是什么? 解决方法假设您必须使用INSTEAD OF触发器,并且AFTER触发器不是一个选项,最好的方法是a)严格控制模式,以便您可以b)以常规方式脚本化INSTEAD OF触发器以实现CASCADE DELETE和任何你需要的其他操作像以前一样创建FK约束,但是没有任何级联行为.在FK名称中,使用一些惯例来指出什么样的级联行为和自定义行为应该发生,例如: > FK_UC_DC_Table1_Table2 – 更新级联,删除级联 使用任何有意义的东西,但创建FK,它们是代码生成的有用的元数据,您可以使用FK名称来记录代码生成器的指令. 然后,我会进一步,并在自己的模式中隔离这些表.它们的行为方式与其他表格不同,在测试和微调代码生成时,它们首先会更加错误.最好保留所有这些隔离,并且容易被一个普通容器识别. 专用模式还将通知任何人修改不同规则和行为的数据. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQL – .NET – SqlParameters – AddWithValue
- 数据库设计 – 每个客户端的一个数据库在什么时候
- sql-server-2005 – 为什么Reporting Services在
- sql-server – SQL Server 2012中序列的用法
- sql-server – 在SQL Server中以编程方式将索引从
- 数据库设计 – 为具有多个多对多关系的视频游戏业
- SQL Server 有用的SQL语句(删除重复记录,收缩日
- sql – 没有重复组合的交叉连接
- 详解linux下redis安装、启动与停止,redis做成服
- sql-server – 使用存储过程作为业务逻辑层
