有許多關於數據庫設計中NULL的討論,我我的的設計習慣是,不使用NULL值。數據庫
我所設計全部表都是Not Null的字段的,尤爲是我主要作數據倉庫的表設計。剛開始使用數據庫時,就栽了一次。一個Group裏面,我要顯示成年人有多少個,另一個地方要顯示未成年人有多少個,第三個地方要顯示總人數。編程
N1(成年人數) = select count(*) from mygroup where age>=18; 結果是10數據庫設計
N2(未成年人) = select count(*) from mygorup where age< 18; 結果是12編程語言
到第三個地方,爲了減小查詢,我直接顯示了 10+12 = 22 人。後來客戶說不對呀,咱們有23我的,想了半天才明白怎麼回事,後來我常常拿這個考別人。設計
NULL使用起來很不方便。在各類編程語言中都支持這樣的表達式 if(x==null) {...}. 可是在數據庫理論中,null比較"奇怪"邏輯.select
3 > null, 返回false;
3 < null, 返回false;
3 = null, 返回false.數據
爲了配合數據庫的NULL值機制,C#引入了nullable機制,好比:int? v1 = field("age").value; 不然若是age的值是null,沒法賦值給v1.查詢