Derek Downey Asked: 2011-08-30 07:50:34 +0800 CST2011-08-30 07:50:34 +0800 CST 2011-08-30 07:50:34 +0800 CST 删除/更新外键约束中 SET NULL 的目的是什么? 772 我可能心胸狭隘,但如果我创建了外键约束并且一行被更新或删除,如果子表的列设置为 NULL,我将失去该连接。 故意保留这些孤立行的目的是什么? foreign-key null 2 个回答 Voted Best Answer Jack Douglas 2011-08-30T10:10:51+08:002011-08-30T10:10:51+08:00 是否set null有用取决于您在特定上下文中选择的含义 - 围绕IMO 的null所有混淆和意见,明智的方法是让 DBAnull 选择(并记录)每个可空字段的含义 确保它只意味着一件事 使用这些规则,请考虑以下用例: 您有一个表“商店”(例如个别场所) 您有一个表“零售商”(例如连锁店) 'shop' 表有一个查找字段,引用 'retailer' 的键 您已定义null代表一家独立商店(即不属于连锁店的商店) 一个“零售商”关闭分店,以至于你认为它的商店是独立的 在这种情况下,anon delete set null是有道理的。还有其他方法可以对这些业务规则进行建模,但这是最简单的,如果它准确地符合您在现实世界中关心的事实,我建议它完全可以 DerfK 2011-08-30T09:26:12+08:002011-08-30T09:26:12+08:00 我能想到的大多数用例通常都是“好吧,我们可以做一些不同的事情,但我们想这样做”。 考虑owner公司问题跟踪系统中的错误字段。如果约翰退出,当然他的所有问题不应该在他的帐户被删除时简单地删除。即使这样,一些数据库也允许SET DEFAULT作为一种操作(或让触发器执行相同的任务),并且让Nobody员工成为问题的默认所有者可能是一种选择。或者我们可以disabled为 John 设置一个字段,而不是删除他的记录。
是否
set null
有用取决于您在特定上下文中选择的含义 - 围绕IMO 的null
所有混淆和意见,明智的方法是让 DBAnull
使用这些规则,请考虑以下用例:
null
代表一家独立商店(即不属于连锁店的商店)在这种情况下,an
on delete set null
是有道理的。还有其他方法可以对这些业务规则进行建模,但这是最简单的,如果它准确地符合您在现实世界中关心的事实,我建议它完全可以我能想到的大多数用例通常都是“好吧,我们可以做一些不同的事情,但我们想这样做”。
考虑
owner
公司问题跟踪系统中的错误字段。如果约翰退出,当然他的所有问题不应该在他的帐户被删除时简单地删除。即使这样,一些数据库也允许SET DEFAULT
作为一种操作(或让触发器执行相同的任务),并且让Nobody
员工成为问题的默认所有者可能是一种选择。或者我们可以disabled
为 John 设置一个字段,而不是删除他的记录。