1
3
与Ed Harpers解决方案类似,我还建议您使用一个而不是DELETE触发器。然而,我们的解决方案不同之处在于,我建议您实际配置数据库以强制执行所需的完整性检查/规则。
或者,如果没有冲突发生,删除操作将简单地成功完成。 此实现确保DBMS处理管理数据库完整性的全部责任,这当然应该是所需的场景。 有道理? |
2
1
你可以用一个 INSTEAD OF DELETE 在目标表上触发以运行select语句,以便在执行delete(如果未找到)之前检查FK冲突。这将使您能够封装数据库中的所有逻辑,尽管如果有大量删除、大型数据集或许多外键,性能可能会有问题。如果您觉得这是一个不可接受的维护问题,那么可以编写使用数据库元数据动态构建必要查询的通用代码,而不是手工编写所有内容。 另一个可能更简单的选项是对所有删除执行软删除,然后包括一个计划维护任务,该任务将所有可以安全删除的软删除转换为硬删除。根据数据集的大小和删除次数,不执行计划的硬删除可能是可以接受的。 编辑 John Sansom的答案是更好地实现触发器解决方案。 |