2010-10-26 40 views
2

因此,您有一个关系数据库,并且为引用完整性定义了一些外键。但是现在有什么更好的方法来利用它们呢?假设我们要删除表中有外键的行到其他表中。关系数据库外键约束在实践中的用法

  1. 使用他们作为垃圾收集 - 设置为级联所有约束。因此,在您的应用程序中,首先检查目标行是否有任何“子”,并向用户提供中止删除操作的选项,如果不希望从属行也被删除。

  2. 将它们作为实际使用约束 - 在您的应用程序中,试图删除目标行。如果操作失败,,然后检查是否有子项并向用户提供选项;如果用户想要继续操作,请首先手动删除依赖行。

第二个选项使删除循环引用相当艰难 - 您必须将外键设置为null,然后才能删除任何内容。

回答

1

有2级典型的外键的场景:

  • 协会:链接,可以在自己的
  • 成分存在2个实体:子实体链接到它的父实体(子实体它存在不存在不一个父母,例如:订单和订单项目)

我只会在组合的情况下级联,并分别处理每个关联情况。

+0

我认为你回答了错误的问题,或者我错误地解释了你的答案......但是我的困境适用于你的情况。我的问题是要求**应该强制执行完整性 - 而不是应该强制执行还是不强制执行。在这两种情况下,一行取决于另一行;问题是,删除时,谁进行检查 - 数据库或应用程序? – 2010-10-26 11:20:37

+0

我会依靠数据库来处理组合级联删除,因为删除父母时保留孩子是没有意义的。对于关联而言,逻辑更加复杂,取决于业务规则的位置。如果它们在数据库之外,那么业务层(应用程序,服务)应负责级联删除。但这种情况没有金科玉律。当您删除与部门关联的最后一名员工时,是否删除该部门?也许,可能不会,这取决于... – 2010-10-26 12:12:14

+0

我不是在寻找一条黄金法则;我想听听其他人在_practice_中采用哪种方式。不过,谢谢你的意见。 – 2010-10-27 07:47:30