2
因此,您有一个关系数据库,并且为引用完整性定义了一些外键。但是现在有什么更好的方法来利用它们呢?假设我们要删除表中有外键的行到其他表中。关系数据库外键约束在实践中的用法
使用他们作为垃圾收集 - 设置为级联所有约束。因此,在您的应用程序中,首先检查目标行是否有任何“子”,并向用户提供中止删除操作的选项,如果不希望从属行也被删除。
将它们作为实际使用约束 - 在您的应用程序中,试图删除目标行。如果操作失败,,然后检查是否有子项并向用户提供选项;如果用户想要继续操作,请首先手动删除依赖行。
第二个选项使删除循环引用相当艰难 - 您必须将外键设置为null,然后才能删除任何内容。
我认为你回答了错误的问题,或者我错误地解释了你的答案......但是我的困境适用于你的情况。我的问题是要求**应该强制执行完整性 - 而不是应该强制执行还是不强制执行。在这两种情况下,一行取决于另一行;问题是,删除时,谁进行检查 - 数据库或应用程序? – 2010-10-26 11:20:37
我会依靠数据库来处理组合级联删除,因为删除父母时保留孩子是没有意义的。对于关联而言,逻辑更加复杂,取决于业务规则的位置。如果它们在数据库之外,那么业务层(应用程序,服务)应负责级联删除。但这种情况没有金科玉律。当您删除与部门关联的最后一名员工时,是否删除该部门?也许,可能不会,这取决于... – 2010-10-26 12:12:14
我不是在寻找一条黄金法则;我想听听其他人在_practice_中采用哪种方式。不过,谢谢你的意见。 – 2010-10-27 07:47:30