Wikipedia saysNULL
用於表示「缺少的信息和不適用的信息」。對於記錄中適用的已知非值,NULL是否爲適當的值? (即該值已知爲「無值」)
我始終沒有做好準備NULL
以適合於表示「未知」信息,因爲在該字段適用於該記錄,它只是一個未知值。
考慮到的問題,NULL
介紹到查詢(3點邏輯和噸是必須要考慮的例外)應NULL仍然在記錄那些不適用於記錄字段使用?還是應該只將它用於某個記錄的值未知的適用字段?
Wikipedia saysNULL
用於表示「缺少的信息和不適用的信息」。對於記錄中適用的已知非值,NULL是否爲適當的值? (即該值已知爲「無值」)
我始終沒有做好準備NULL
以適合於表示「未知」信息,因爲在該字段適用於該記錄,它只是一個未知值。
考慮到的問題,NULL
介紹到查詢(3點邏輯和噸是必須要考慮的例外)應NULL仍然在記錄那些不適用於記錄字段使用?還是應該只將它用於某個記錄的值未知的適用字段?
我也接受null
意味着節約了CEO的員工記錄時,「未知」,但「不適用」適合例如,我們設置employee_manager_id = null
因爲CEO 有沒有經理。
避免空值麻煩的一種技術是使用一個特殊的值,例如爲person.age節省-1
,但是然後在檢查這個值時有更復雜的一點。當爲外鍵使用特殊值時(例如在管理員id中),實際上你必須創建一個id = 0的虛擬記錄,這可能會在處理「所有員工」時引入問題 - 你必須跳過虛擬記錄。我個人認爲,只要使用null並且忍受更復雜的SQL的麻煩,事情就會保持清潔 - 至少每個人都知道發生了什麼。
事實上,Null
並不意味着'未知',而只是'沒有數據'。它用於SQL(以及其他環境),對於給定的字段,數據根本不存在。
關於您對三點邏輯和異常的關注,您的應用程序可能使用的語言不僅僅是sql。與SQL接口的系統代碼應該處理如何處理Null
字段的問題。
如果Null
是簡單的不可接受的(即,你不能讓你的數據結構沒有非空值),那麼你最好避免'未知''沒有數據'的概念。通過將SQL列的Null
值設置爲false來設置所需的字段;這使得Null
不能作爲有效值輸入。例如。
CREATE TABLE foo (bar INT NOT NULL);
我認爲'不知道'與'無數據'是一回事。 – richard
+1當你使用魔法值來表示「沒有價值」,即引進國外關鍵問題。這足以讓我使用NULL來表示沒有價值並意味着未知值。謝謝! – richard