2011-07-04 53 views
0

Wikipedia saysNULL用於表示「缺少的信息和不適用的信息」。對於記錄中適用的已知非值,NULL是否爲適當的值? (即該值已知爲「無值」)

我始終沒有做好準備NULL以適合於表示「未知」信息,因爲在該字段適用於該記錄,它只是一個未知值。

考慮到的問題,NULL介紹到查詢(3點邏輯和噸是必須要考慮的例外)應NULL仍然在記錄那些適用於記錄字段使用?還是應該只將它用於某個記錄的值未知的適用字段?

回答

2

我也接受null意味着節約了CEO的員工記錄時,「未知」,但「不適用」適合例如,我們設置employee_manager_id = null因爲CEO 沒有經理。

避免空值麻煩的一種技術是使用一個特殊的值,例如爲person.age節省-1,但是然後在檢查這個值時有更復雜的一點。當爲外鍵使用特殊值時(例如在管理員id中),實際上你必須創建一個id = 0的虛擬記錄,這可能會在處理「所有員工」時引入問題 - 你必須跳過虛擬記錄。我個人認爲,只要使用null並且忍受更復雜的SQL的麻煩,事情就會保持清潔 - 至少每個人都知道發生了什麼。

+0

+1當你使用魔法值來表示「沒有價值」,即引進國外關鍵問題。這足以讓我使用NULL來表示沒有價值並意味着未知值。謝謝! – richard

1

事實上,Null並不意味着'未知',而只是'沒有數據'。它用於SQL(以及其他環境),對於給定的字段,數據根本不存在。

關於您對三點邏輯和異常的關注,您的應用程序可能使用的語言不僅僅是sql。與SQL接口的系統代碼應該處理如何處理Null字段的問題。

如果Null是簡單的不可接受的(即,你不能讓你的數據結構沒有非空值),那麼你最好避免'未知''沒有數據'的概念。通過將SQL列的Null值設置爲false來設置所需的字段;這使得Null不能作爲有效值輸入。例如。

CREATE TABLE foo (bar INT NOT NULL); 
+0

我認爲'不知道'與'無數據'是一回事。 – richard

相關問題