删除hasOne或者hasMany关联时,是否应将foreignKey设置为NULL?
时间:2020-03-06 14:52:08 来源:igfitidea点击:
鉴于:
Group hasMany Persons
但是关系是独立的(即,人员可以不属于某个组而存在),在删除组时,应将人员表中的外键(即group_id)设置为0(或者NULL)吗?如果我们不这样做,那么该人将尝试属于一个不存在的组。
我问的原因是这是Cakephp中的默认行为。如果将dependency设置为true,它将删除关联的模型,但是如果将其设置为false,则将保持关联的模型不变。
解决方案
一言以蔽之。将外键留在人员表上会导致数据库内参照完整性的丢失。
是的,外键应设置为NULL(如果我们选择的是" no group"值,则应设置为0),否则我们将失去参照完整性。如果数据库支持它,则应该能够在框架中设置"删除时"触发器或者级联规则以强制执行此操作。 CakePHP中的行为似乎是正确的。如果该值是从属的,则应在删除时将其删除。如果不依赖,则需要针对要采取的正确操作提供额外的行为逻辑(在这种情况下,我们要将所有值都设置为NULL。在其他情况下,我们可能希望将其设置为"默认"组, 等等)
如果我们不这样做,该人将尝试属于一个不存在的组。
还有一个更糟的情况:将来会出现一个新的B组,该B组将重用已删除的A组的ID。然后,所有以前A组的用户都会"神奇地"加入新B组。