数据库的NULL值讨论
2016-01-28 04:26
302 查看
有许多关于数据库设计中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比较"奇怪"逻辑.
3 > null, 返回false;
3 < null, 返回false;
3 = null, 返回false.
为了配合数据库的NULL值机制,C#引入了nullable机制,比如:int? v1 = field("age").value; 否则如果age的值是null,无法赋值给v1.
我所设计所有表都是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比较"奇怪"逻辑.
3 > null, 返回false;
3 < null, 返回false;
3 = null, 返回false.
为了配合数据库的NULL值机制,C#引入了nullable机制,比如:int? v1 = field("age").value; 否则如果age的值是null,无法赋值给v1.
相关文章推荐
- SQL Server ->> WITH RESULT SETS子句
- 运用Log和Trace文件排除Oracle Net问题
- 深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析
- SQL Server ->> PARSE函数
- MongoDB学习领悟: 文档的书写是基于K-V的map演算形式
- mongodb中最为简单的一种安装方法
- SQL Server ->> 时间函数: EOMONTH, DATEFROMPARTS, TIMEFROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS
- MongoDB 数据类型
- Nutch+MongoDB+ElasticSearch+Kibana 搭建搜索引擎
- SQL 视图
- mongodb 特殊作用的数据库
- SQL Server ->> CONCAT函数
- mysql 5.7.10安装配置
- MongoDb web 用户界面
- mysql5.7.10安装
- Memcached, Redis, MongoDB区别
- MyBatis参数传入集合之foreach动态sql
- MySQL恢复中的几个问题解决方法
- 数据库及连接池若干问题特集
- Windows 64位下安装Redis详细教程