删除/更新外键约束中 SET NULL 的目的是什么?

Der*_*ney 15 null foreign-key

我可能心胸狭窄,但是如果我创建了一个外键约束并且一行被更新或删除,如果子表的列被设置为 NULL,我将失去该连接。

故意保留这些孤立行的目的是什么?

Jac*_*las 13

是否set null有用取决于您null在特定上下文中选择的含义 - 由于围绕nullIMO 的所有混淆和意见,明智的方法是 DBA

  1. 选择(并记录)每个可为空字段的含义
  2. 确保它只意味着件事

使用这些规则,请考虑以下用例:

  • 您有一张桌子“商店”(例如个人场所)
  • 您有一个桌子“零售商”(例如连锁店)
  • 'shop' 表有一个查找字段,指的是 'retailer' 的键
  • 您已定义null为代表一家独立商店(即不属于连锁店的商店)
  • “零售商”关闭分店,以至于您认为其商店是独立的

在这种情况下, anon delete set null是有道理的。还有其他方法可以对这些业务规则进行建模,但这是最简单的方法,如果它准确地符合您在现实世界中关心的事实,我建议它完全可以