2009-06-08 58 views

回答

0

是,一致性
保持每個人都在同一頁上是重要的,這將確保您的開發者不會在生產得到意想不到的價值。

我認爲這是一個好主意。

3

如果您需要所有NULL列的DEFAULT值,則可以將它們全部設置爲NOT NULL!

+0

對於某些商業案例來說,儘管列有默認值,但空值仍然是合法值嗎? – 2010-04-09 04:01:17

+1

可以將NULL置於具有缺省值的可空列中。我會想象,在大多數情況下,這將被視爲一個錯誤(忘記使列不爲空)。開發人員會說「哎呀,我以爲我在列上有一個默認值,爲什麼我有那麼多的空值?」只有在不指定插入中的列時,或者如果指定它並傳入DEFAULT關鍵字,纔會使用默認值。然而,生意是一件有趣的事情,所以我猜想任何瘋狂的要求都是可能的。用戶說我希望該字段默認爲零,但也有時可能是未知的。 – 2010-04-09 11:13:57

1

歸因於它們涉及的三個值邏輯,空值通常是混淆的來源。例如,查詢...

select * from employee where job != 'MANAGER' 

...可能會返回所有不是經理的員工。然而,當然,如果JOB可以爲空,那麼這個查詢將不會返回JOB爲空的僱員。

這可能是這是默認值策略背後的基本原理。

1

指定默認值只會改變問題,因爲基本上這些默認值與空值具有相同的「含義」,因此您將面臨要求在代碼中包含特殊外殼來處理「特殊含義」那些「特殊價值」。

0

@TonyAndrews:

......可以預料到返回誰不是經理的所有員工。然而,當然,如果JOB可以爲空,那麼這個查詢將不會返回JOB爲空的僱員。這可能是這是默認值策略背後的基本原理....

NULL是爲了處理缺失值而發明的, 您正在要求DBMS返回哪些作業不是'經理'的行;這確實意味着不會將我的工作回報給我。如果你想要失業,那就是另外一個問題。

想象一下,可能有些經理在那裏他們的工作領域是NULL(缺少,沒有輸入),所以如果數據庫返回它們,查詢的結果將是絕對錯誤的!

回到主要問題,我認爲如果一個字段是NULL允許它應該在NULL的情況下,如果缺少值,否則如果該字段永遠不會缺少值(或始終需要默認值)只是使它不爲NULL默認值。這是基於特定條件下的業務邏輯。