Foreign-Key
刪除/更新外鍵約束中 SET NULL 的目的是什麼?
我可能心胸狹隘,但如果我創建了外鍵約束並且一行被更新或刪除,如果子表的列設置為 NULL,我將失去該連接。
故意保留這些孤立行的目的是什麼?
是否
set null
有用取決於您在特定上下文中選擇的含義 - 圍繞IMO 的null
所有混淆和意見,明智的方法是讓 DBAnull
- 選擇(並記錄)每個可空欄位的含義
- 確保它只意味著一件事
使用這些規則,請考慮以下案例:
- 您有一個表“商店”(例如個別場所)
- 您有一個表“零售商”(例如連鎖店)
- ‘shop’ 表有一個查找欄位,引用 ‘retailer’ 的鍵
- 您已定義
null
代表一家獨立商店(即不屬於連鎖店的商店)- 一個“零售商”關閉分店,以至於你認為它的商店是獨立的
在這種情況下,an
on delete set null
是有道理的。還有其他建模這些業務規則的方法,但這是最簡單的,如果它準確地符合您在現實世界中關心的事實,我建議它完全可以