设为首页 收藏本站
查看: 605|回复: 0

[经验分享] SQL的范式理论

[复制链接]

尚未签到

发表于 2016-11-12 03:12:15 | 显示全部楼层 |阅读模式
  还说七期的师哥师姐给我们讲课。当时说到了数据库的三范式理论,听得时候听明白了,课下自己总结了一下。
  其实,数据库的范式理论无非是为了节省资源,就是在保证数据完整性的前提下最大程度上减小数据的冗余程度。而数据库三范式也是前人经过多次的经验总结出来的,觉得数据库在这样的设计规则下会在数据完整性和占用数据资源两者之间取得一个较好的平衡。
  下面通过例子来认识一下数据库三范式理论:
  第一范式:
  第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列的中不能哟多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。第一范式包括下面的指导性原则:
  1、 数组的每个属性只能包含一个值
  2、 关系中的每个数组必须包含相同数量的值
  3、 关系中的每个数组一定不能相同
  例如下面的这个关系就是不符合第一范式的
  学生姓名
  性别
  入学时间
  张三
  女
  2005年
  李四
  男
  2005年
  赵武
  王六
  男
  2006年
  江涛
  女
  2009年

  大家看上边的图是不是觉得很别扭呢,对,第三行里面有两个学生姓名。不必担心,因为我们在sql server中建表的时候绝对不会出现这种情况的,所以你大可不必担心自己设计出来的表不符合第一范式。那么正确的表的关系应该是下面这样的:
  学生姓名
  性别
  入学时间
  张三
  女
  2005年
  李四
  男
  2005年
  赵武
  男
  2006年
  王六
  男
  2006年
  江涛
  女
  2009年

  第二范式:
  如果一个数据表已经满足第一范式,而且该数据表中的任何一个非主键字段的数值都依赖于该数据表的主键字段,那么该数据表满足第二范式。
  例如下面的表:
  项目编号
  名称
  负责人
  负责人部门
  1
  项目1
  张涛
  项目部
  2
  项目2
  王明
  建材部
  3
  项目3
  张红
  业务部
  我们一个一个的来看,项目编号显然是主键字段,根据项目编号可以推出项目名称,可以推出项目负责人,但是根据项目编号不能推出项目负责人部门,所以上面的表是不符合第二范式的。接下来我们把上面的表拆成两个符合第二范式的表
  项目编号
  名称
  负责人
  1
  项目1
  张涛
  2
  项目2
  王明
  3
  项目3
  张红
  负责人
  负责人部门
  张涛
  项目部
  王明
  建材部
  张红
  业务部

  第三范式
  如果一个数据表已经满足第三范式,而且该数据表中的任何两个非主关键字段的数据值之间不存在函数信赖关系,那么该数据表满足第三范式,即3NF。
  大家可以看下面的表格
  编号
  姓名
  性别
  工资
  奖金
  1
  王鹏
  男
  8000
  800
  2
  张红
  女
  7700
  770
  假如公司有这样的规定:工资的百分之十作为奖金发放给员工,那么上面的表的设计就不符合第三范式了。
  从第三范式的定义我们可以看出,根据工资可以推出奖金的多少,所以工资和奖金之间是存在函数信赖关系的。但是可能就有这样的疑问了,我要是根据姓名还能推出性别呢,这怎么办呢?试想一下,如果没有员工的基本信息表你能根据姓名推出性别吗?也就是说我们数据的根源信息都不知道,你怎么推出其他的信息,也可以理解为上面的表格就是我们刚刚说到的“根源信息”。
  我是这么理解的,不知道大家对上面的理解有什么疑问,请多多指教!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298940-1-1.html 上篇帖子: sql 字符串常用函数 下篇帖子: 在SQL中调用COM对象
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表