一直以来做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褒扬,比如说存储过程、触发器、视图、自定义数据类型。。。都会有自己的优缺点。

转载于:https://www.cnblogs.com/progame/archive/2004/06/27/19062.html

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

  1. 两个server 两个数据库 微服务_微服务的数据库设计

    单独的数据库: 微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库.它是基于下面三个原因. 优化服务接口:微服务之间的接口越小越好,最好只有 ...

  2. mysql int 默认值 为ull_mysql的 约束 数据库设计 数据库 存储 触发器 mysql 权限问题...

    今天的目标: mysql的 约束 数据库设计 数据库 存储 触发器 mysql 权限问题 先讲约束: 要他唯一 不能重复 不能空值 : 什么是 mysql的约束: 对mysql 进行约束 2.2  默 ...

  3. mySQL教程 第1章 数据库设计

    E-R设计 很多同学在学SQL语句时,觉得非常困难,那是因为你在学一个你根本不了解的数据库,数据库中的表不是你设计的,表与表之间的关系你不明白.因此在学SQL语句之前,先介绍一下数据库设计. 下面举例 ...

  4. 性能优化(数据库设计原则)

    为什么80%的码农都做不了架构师?>>> 优化设计 数据库设计 数据库设计是一个软件项目成功的基石 .数据库设计也是门学问 . 在项目早期由开发者进行数据库设计(后期调优需要DBA ...

  5. 数据库设计方法、规范与技巧

    本文链接: http://www.openphp.cn/index.php/art.../100/index.html 一.数据库设计过程 数据库技术是信息资源管理最有效的手段.数据库设计是指对于一个 ...

  6. sql date类型_共享单车数据分析的SQL数据库设计

    SQL,发音为" sequel"(或SQL,如果愿意的话),是数据科学家的重要工具.实际上,它可以说是获取数据工作中最重要的语言.在共享单车数据分析的SQL设计中,我们将从入门者的 ...

  7. 《MySchool数据库设计优化》内部测试

    1) 在SQL Server 中,为数据库表建立索引能够( C ). A. 防止非法的删除操作 B. 防止非法的插入操作 C. 提高查询性能 D. 节约数据库的磁盘空间 解析:索引的作用是通过使用索引 ...

  8. PowerDesiGner数据库设计

    原文地址:http://hi.baidu.com/shunkunl/blog/item/871c75ef8596faeace1b3e00.html PowerDesign:PowerDesign是 S ...

  9. 数据库设计五要点 让数据库设计更加规范

    通常情况下,可以从两个方面来判断数据库是否设计的比较规范.一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少.若符合这两个条件,则可以说明这个数据库的规范化水平还是比较高的.当然这是两个泛泛而谈的 ...

最新文章

  1. Mac中使用brew安装指定版本软件包
  2. 应用 TransactionScope 报:此操作对该状态的事务无效 的错误
  3. Oracle 11g 预定义账户和PLSQL工具、企业管理器的初步使用
  4. 跟随我在oracle学习php(14)
  5. java httpclient 重定向_用Apache HttpClient实现URL重定向
  6. (转)mssql2005生成表字典
  7. Linux内核分析 - 网络[五]:vlan协议-802.1q
  8. python数据挖掘学习笔记】十九.鸢尾花数据集可视化、线性回归、决策树花样分析
  9. android 退出应用,如何停止服务,Android 完全退出当前应用程序的四种方法
  10. python逐行写入文件_python逐行读写txt文件的实例讲解
  11. win11如何禁用后台应用权限 Windows11禁用后台应用权限的设置方法
  12. MapServer使用笔记(二)
  13. Java项目案例-猜数小游戏和多级菜单系统.....
  14. Bazel入门:编译C++项目
  15. 在支付宝中开通信用卡快捷支付
  16. 蜘蛛会抓取html框架,百度蜘蛛抓取网站的基本规则
  17. 拉普拉斯算子的疑惑--拉普拉斯算子作用于矢量和定义Hessian矩阵时遇到的问题
  18. Cut through switching
  19. python数据分析实战之超市零售分析
  20. 将数组转换成集合Arrays.asList,不可进行add和remove操作的原因

热门文章

  1. 福建水院计算机一级清考,取消毕业“清考”大学生还敢混日子吗
  2. c语言程序功能实现不了,请高手帮忙看看我的程序,编译不报错,但是实现不了功能...
  3. 使用shell脚本将mysql数据导入HIve中
  4. 深度学习中拟合是什么意思?
  5. 实验吧_登陆一下好吗(骚注入)你真的会PHP吗?(代码审计)
  6. 什么是RUTP协议?RUDP协议在视频会议系统中的应用
  7. matplotlib制作多张图
  8. Spring Boot 之 RESRful API 权限控制
  9. 从Mysql数据库中导入导出表结构
  10. bash脚本编程之条件判断、条件测试