这里的问题主要是针对数据库逻辑设计中如何设计一个好的关系数据库模式出发。
一般来说,一个关系模式只要满足第一范式(每个分量是不可分的数据项),它就是合法的。但实际上,它还会存在,插入、删除、修改异常及数据冗余大等问题,这个时候,就要通过关系数据规范化理论解决这些问题。下面,先介绍一些基础知识再介绍规范化理论的具体内容。
1.基础知识
1.1函数依赖
函数依赖: 若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。
部分函数依赖: 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
完全函数依赖: 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。、
传递函数依赖: 设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
1.2码
码: 设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。
主码: 若候选码多于一个,则选定其中一个为主码。
外码: 属性组X非该关系中码,但是是另一个关系模式中码。
主属性和非主属性:
包含在任何一个码中的属性成为主属性。除了主属性以外的就是非主属性。
规范化理论
第二范式2NF:非主属性完全函数依赖于码
第三范式3NF:非主属性完全依赖于码且不传递依赖于码
BCNF(修正的第三范式):任何属性完全依赖于码且不传递依赖于码,已经解决了插入,删除异常!
简单来说:
第一范式:列不能再分
第二范式:建立在第一范式基础上,非主属性消除部分依赖
第三范式:建立在第二范式基础上,非主属性消除传递依赖
BC范式:建立在第二范式基础上,主属性也消除传递依赖