有许多关于数据库设计中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.查询