《DBA 修炼之道》总结二之范式
来源:互联网 发布:ubuntu下的下载工具 编辑:程序博客网 时间:2024/05/18 20:46
范式
范式,其实就是一种数据的设计方式,通过规范化来达到优化数据结构的目的。目前范式有常见的三大范式,以及一些额外的范式,如BC范式、第四第五范式。
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。
三大范式
第一范式(1NF)
第一范式的目标是去除实体中重发分组和非原子数据。换句话说,当数据符合第一范式时,实体的每个属性都是离散的。
但且仅当数据表的所有列只包含原子值时,即满足第一范式。
要想使数据模型满足第一范式,需要将重复分组分裂成单个实体以消除分组。如下表,表中的studentName字段违反了1NF,学生的姓名可分解为名+姓。
第二范式(2NF)
第二范式确保每个实体的所有属性都依赖主码。简单来说,实体实例不应依赖除实体主码外的任何东西。
当且仅当满足第一范式,并且每一个非主属性都完全依赖主码时,即满足第二范式。
要想使其满足第二范式,应该把不依赖主码的属性,将它删除,并且把它连带它所依赖的码一起放到一个新的实体中。如下表,courseName字段就违反了2NF,courseName字段不仅依赖studentID+courseNum字段,还依赖于courseNum字段。这时,需要把courseName字段从原来的表中删除,再加上courseNum字段重新生成一个新的实体。
第三范式(3NF)
第三范式确保实体实体的属性间不存在关联,该实体的每一个属性只依赖主码。简单来说,就是不存在传递依赖,如A->B,B->C。
当且进当满足第二范式且每一个非主属性既不依赖码也不传递依赖码时,即满足第三范式。
这时,需要把存在不直接依赖主码的字段删除,加上其依赖的字段新建一个实体。如下表,MajorName字段存在依赖MajorID字段,故应把MajorName字段从原表删除,加上MajorID新建一个实体。
其他范式
一般来说,只会用到上面的三大范式。
BC范式(BCNF)
BC范式是修正的3NF。
当且仅当满足3NF且每一个决定元素都是候选码,即满足BC范式。
额,换个说法,就是说任何非主码不能决定主码的子集,即不存在部分主键依赖非主码。
第四范式(4NF)
第四范式指出如果“一对多”的属性彼此独立,就没有任何实体可以有超过一个“一对多”的关联。
当且仅当满足3NF且没有多个多值依赖时,即满足4NF。
也就是说,在一个关系(A、B、C)中,对于每一个A,有一组独立的(B、C),且B、C独立。
第五范式(5NF)
第五范式指出实体的每一个连接依赖必须是其候选码的结果。
总的来说,第一范式是消除字段的冗余,第二范式是消除非主属性对主属性的部分依赖,第三范式是消除属性的传递依赖,BC范式是消除部分主属性对非主属性的依赖,4NF是消除多值依赖。
- 《DBA 修炼之道》总结二之范式
- 《DBA 修炼之道》总结一之前言
- 《DBA 修炼之道》总结三之索引
- 《DBA 修炼之道》总结四之锁
- 程序员修炼之道<二>
- 《程序员修炼之道》读书笔记之二
- 程序员修炼之道--读后感之二
- 《程序员修炼之道》总结之提示
- 心境修炼之二
- 程序员修炼之道读后感(二)
- 《程序员修炼之道》学习(二)
- 敏捷开发修炼之道(二)
- 《程序员修炼之道》笔记(二)
- 范式篇之二第一范式
- 范式篇之二第一范式
- Web 前端开发修炼之道总结
- DBA修炼之道:数据库管理员的第一本书(原书第2版)pdf
- 程序员修炼之道:从小工到专家 之二
- tomcat如何配置环境变量
- ActiveMQ消息队列的使用及应用
- ubuntu安装shadowsocks客户端
- JAVA基础之数据类型
- 王爽 《汇编语言》 读书笔记 十四 端口
- 《DBA 修炼之道》总结二之范式
- 用js实现一个三层的bp神经网络
- 两个数相乘
- CC2530中常用的控制寄存器
- Spring结合Junit单元测试
- [2016.10.17日更新]各大互联网公司架构演进之路汇总
- C++重载和extern C理解
- Python数据挖掘学习04---matplotlib数据可视化分析
- 设计模式 建造者模式