1NF. 原子性---列不可再分
表中的数据列应当具有原子性,通俗的将就是说列应当是不可再分的
那么具体是什么意思呢?
我们通过观察Orecle数据库自带的EMP表来说明
在emp表的设计中共有8个数据字段,分别为
emp ---雇员编号
ename ---雇员姓名
job ---工作岗位
MGR ---领导编号
hiredate ---入职日期
sal ---工资
comm ---奖金
deptno ---部门编号
其中每个字段都已经是最小的原子, 不可再分
那么什么是可再分呢?
例如我们再向表中添加一列, 列名为Info, 类型为varchar2, 用于存放雇员的爱好和地址
那么该info列就是可再分, 不满足第一范式
2NF. 表中非主键字段要完全依赖主键
什么是依赖?
依赖指的是如果字段A和字段B相关,那么A和B就是相互依赖,一般称主键字段是被依赖方 非主键字段是依赖方
什么是完全依赖?
假设当前表中有主键字段A和字段B,还有非主键字段C和D
非主键字段C依赖于主键字段A和B ===>字段C完全依赖于主键
非主键字段D依赖于主键字段A但不依赖于主键字段B ===>字段D不完全依赖于主键
具有不完全依赖的非主键字段是不符合第二范式的
例如:
在上表中有四个字段
学号 和 课程 为联合主键
成绩 和 课程学分为非主键字段
成绩字段依靠学号和课程号才能唯一确定, 所以成绩完全依赖主键 符合第二范式
但是课程学分仅仅只依赖于课程, 因为课程的学分是固定的 不会因修课的人改变而改变, 所以课程学分仅依赖于部分主键 不符合第二范式
为符合第二范式要将上表进行拆分
3NF. 表内非主键字段不能存在传递依赖
什么是传递依赖?
传递依赖就是在一张数据表中各分量必须都依赖于主键,分量之间不能产生依赖。
此处禁止的依赖传递是同表中字段间禁止依赖传递, 而不是异表中字段间的依赖
例如在该表中学号为主键,院校是完全依赖于主键的,但院校的地址和院校电话两个字段是依赖于院校的,而院校又是依赖于主键,这就产生了所谓的依赖传递
其中 院校地址和院校电话===>院校===>学号; 产生了依赖传统,并且地址和电话也只是间接依赖于主键, 既不符合第二范式也不符合第三范式
要对该表进行拆分,拆分后符合三范式