数据库设计是否应该允许空值的存在

一直以来做MIS系统的开发,数据库也设计了无数,本来看到灵感之源的blog,还不想说什么,不过后来又出来了http://www.cnblogs.com/William_Fire/archive/2004/06/27/19046.aspx,所以感觉必须要说些我自己的观点了。

先总结一下他们对于在数据库设计中需要完全消除NULL的理由:
1、不利于前台程序的编写,需要判断是否为NULL
2、NULL在实际业务模型中不可能存在,不利于OO映射
3、影响编程效率

反驳如下:
1、txtName.Text = Employee.Name & “”
2、NULL并不表示这个属性没有,而是说这个属性暂时“未知”,比如说员工表的出生日期字段,用default?1900-01-01?还是1990-01-01? 难道这种默认值就不需要前台程序判断?
3、如第1条所述,我不会因为NULL的存在而影响效率

那么是否应该使用NULL呢?是全盘肯定还是全盘否定?都不是,该用的时候就用,不该用的时候就不能用,因为在进行NULL的查询时是无法利用到索引的,所以在经常要查询的字段上要尽量避免出现NULL,很多时候可以使用default来处理,但如果“未知”无法使用任何默认值来替代时,就只能通过NULL来标识了,比如说一个字段的取值,可能会是负无穷到正无穷,那么你将使用什么default来标识“未知”?

那么我是否喜欢用NULL呢?实际上我用得不能算多,但不能算少,比如说一个员工表,有学历、电话、住址。。这些我都会让它们允许为空,NULL和''的default对我来说没有任何区别,而单据上的单据日期这种,肯定不能为空的,那么NOT NULL为true,这是为了数据完整性的,而一些数值字段,我都会用0做为default,一是为了方便统计,不必去写ISNULL(..,...),二是为了查询速度。

数据库的设计中我们应该知道每种特性的优点和缺点,而不要冒然地去否定或是大shi褒扬,比如说存储过程、触发器、视图、自定义数据类型。。。都会有自己的优缺点。

posted @ 2004-06-27 22:56  progame  阅读(3526)  评论(2编辑  收藏  举报