2010-04-28 24 views
3

我想知道在沒有價值的領域裏是否應該有NULL,還是應該是空的?表中的空字段比空字段更好?

什麼是最好的?

感謝

+1

什麼區別你「空」和「空」之間畫? – 2010-04-28 11:06:36

+0

某些字段是可選的,例如。他們不必輸入他們的手機號碼。我想知道它在這些領域的NULL是否更好,還是應該是空白/空的? – 2010-04-28 11:30:36

+1

這個問題http:// stackoverflow。com/questions/2540981 /在不同的環境中討論相同的問題。他們背後的抽象概念是相同的,所以也許它提供了一些見解。 – 2010-04-28 11:59:06

回答

1

存在一定的爭論,你不應該讓你的數據NULL,如果你用它來表示你不知道的值應該是什麼,或者你只是沒有該數據然後在該字段中使用明確的值來指示這些狀態。類似的'空'字段。也就是說,我認爲每個人都會這樣做,或者已經做到了,可能會再做一次。 NULL具有奇怪的比較屬性,這就是爲什麼它總是最好的,如果可以的話,爲了避免它,並且具有缺失數據狀態的明確值。

+0

所以它比離開字段空白,如果他們沒有設置,因爲他們是可選的? – 2010-04-28 11:28:57

+0

最好在字段中使用「None」而不是空字符串或NULL,因爲將來有人在查看數據時可能會對它的含義有不同的解釋。 – Lazarus 2010-04-28 11:59:45

+0

但不是設置NULL的最佳做法。我認爲我已經讀過 – 2010-04-28 12:18:46

7

NULL表示沒有設置數據,而空字符串可能是一些有效的數據。

因此,使用NULL可以幫助您區分這兩種情況。

+0

導致一些字段是可選的,例如。他們不必輸入他們的手機號碼。那麼在這些領域中它的NULL更好呢,還是應該是空白的? – 2010-04-28 11:29:59

+0

如果輸入空白數字或根本沒有輸入數字(如果可以區分它),對您來說很重要,請使用NULL。否則,空白值將會執行。 – 2010-04-28 13:19:23

2

從編程的角度出發,我嘗試不允許空值出於幾個原因。其中之一是代碼通常對意外的NULL值有不良反應。如果查詢過濾器運行得更快,檢查空值,我可能會考慮使用它們,但沒有證據表明我已經經歷過。但是我已經經歷了很多功能,在做一些比較之前做了一些比較,而不是先測試NULL。

1

只要三個有價值的邏輯可能回來咬你,就避免基表中的NULL。這很容易說,但很長的解釋。有時可以成功地管理三個有價值的邏輯,但是你的直覺可能基於兩個有價值的邏輯,並且可能會產生誤導。

如果您在基表中避免使用NULLS,但使用外連接創建視圖或查詢,請準備好處理NULLS。 NULLS在where子句中從不使用的字段中,從未使用「錯誤地」使用聚合(如總和(FIELD))。

NULL字段總是空的,但空並不總是暗示NULL。特別是,表單中的空或不存在的字段可以轉換爲表中的非NULL值。自動編號字段就是一個例子。

Oracle在20世紀80年代通過對長度爲零的VARCHAR字符串(空字符串)和NULL使用相同的表示法而犯了一個錯誤。他們已經打算在25年內「很快實現」。別屏住呼吸。

不要使用NULL來傳遞有意義的消息。即使他們否認,這幾乎總是讓你的同事感到困惑。

0

空值是數據庫設計中必不可少的重要工具。如果您不知道記錄被查看時的價值,則無效是完全合適的,也是最佳實踐。把一個未知變成一個已知的值,比如空字符串是愚蠢的。當您將字符串數據轉換爲日期或數字數據時尤其如此。 0與null不同,過去或未來的某個任意日期與null不同。對於這個問題,空字符串意味着沒有價值,null表示我們不知道價值是什麼。這是一個重要的區別。

不難處理空值,任何有能力的程序員應該能夠做到這一點。