Null

數據庫表和 NULL

  • October 4, 2012

我知道關於NULL數據庫中的值有很多意見/方面。

我不明白什麼是最好的做法。

即,如果我有一個帶有可選屬性的關係表,即它可以NULL取值 - 所以我們最終可以得到一個NULLs在該列上有很多的表 - 最好使屬性成為一個新的關係表?

對此最好的方法是什麼?

從純關係的角度來看(在第六範式之前),我認為沒有必要將一組列移到單獨的表中,因為它們經常為空。

作為一個簡單的例子,考慮一個以結束日期作為列之一的客戶帳戶表 - 在客戶關閉其帳戶之前,結束日期將為 NULL。因此,您可能在結束日期列中有大量 NULL 值,但將其移到單獨的表中將是一個糟糕的選擇。

但是,作為一個實現問題,可能有充分的理由將某些欄位拆分到單獨的表中。例如,考慮一個客戶地址表;某些地址可能需要復雜的送貨說明,但絕大多數可能不需要。在這種情況下,有一個單獨的地址傳遞指令表是有意義的,即使它與主客戶地址表具有相同的鍵(客戶地址 ID)。

(附帶說明一下,一些關係理論專家——例如 Chris Date 和 Fabian Pascal——根本反對在關係數據庫中允許 NULL。)

如果您的觀點是“來自關係理論”,正如您在該評論中聲稱的那樣,那麼答案很簡單:null 不是一個值,包含 null 的事物不是關係,而可以包含 null 的數據庫是不是關係數據庫。從關係理論的角度來看,沒有“最佳”選擇,因為根本沒有選擇。

(請注意,這並不意味著在物理(實現)級別上,不能有諸如 null 之類的結構。但是這些結構不應該暴露給數據庫使用者,因為 DBMS 正是應該將其使用者與實現的東西隔離開來,讓他只在邏輯級別與 DBMS 互動,這不能涉及空值。)

引用自:https://dba.stackexchange.com/questions/10125