数据库设计关系规范化的标准—范式
预备知识:属性:实体所具有的某一特性称为属性
码:唯一标识实体的属性集称为码,如果一个实体有多于一个候选码,则选定其中一个为主码
包含在任何一个候选码中的属性称为主属性,不包含在任何码中的属性叫做非主属性。
多值依赖:设于关系模式R(U),U 是属性全集,X,Y和Z是U的子集,且Z=U-Z-Y,如果对于R的任一关系r,对于X的一个确定值,存在Y的一组值与之对应,且Y的这组值仅仅决定于X的至而与Z值无关,此时称Y多值依赖与X。在多值依赖中,若Z不是空集,则称非平凡的多值依赖,否则是平凡的多值依赖。
范式的目的就是为了尽量消除数据冗余数据操作如插入,删除,更新时产生的异常。但是我个人觉得首先要理解什么是无异常的数据操作呢?什么是数据的冗余度最低呢,能否达到0冗余度呢?根据我在几本书上总结的,只要消除了非主属性或主属性对码的部分依赖或传递依赖,在高级一些就是消除非平凡且非函数依赖的多只依赖,消除不由候选码所蕴含的连接依赖,就可以让数据库模式达到你所期望的规范标准。
当前范式一共有六个:
1NF:关系模式R中的所有属性都是不可再分割的,在这种情况下,关系模式R中会同时包含完全函数依赖,部分函数依赖和传递函数依赖,这些复杂的函数依赖关系往往导致数据操作出现种种弊端。所以要运用投影分解来将关系分解,去掉复杂的关系,向更高一级的范式转换。
分解的基本原则是“一事一地”即让一个关系只描述一个实体或一种实体间的联系,如果多余一个实体或联系就进行投影分解。
2NF:如果关系模式R属于第一范式,且每个非主属性都完全依赖于R中的任意候选码简称M码,则R是第二范式,第二范式可以由第一范式消除非主属性对码的部分函数依赖得到。
3NF:如果关系模式R属于第一范式,且每个非主属性都不传递依赖与R的码,则称R属于第三范式。第三范式可以一定程度上消除各种数据冗余和数据操作异常。但是它没有限制主属性对码的依赖关系,如果发生了这种依赖,仍然会出现冗余,插入删除和修改异常。
BC范式:如果R是第一范式,且所有的函数依赖X-->Y(Y不是X的子集),决定因素X都包含了R的一个候选码,则称R属于BC范式。BC范式消除了主属性对码的函数依赖关系。
4NF:如果对于R的每个非平凡多值依赖X->->Y(Y不是X的子集),X都有候选码,则称
R属于第四范式。
第五范式就是消除了第四范式中出现的连接依赖 ,这里就不深扒。