数据库设计的范式:
第一范式(1NF):指的是在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不可能是集合,数组,记录等非原子性数据项。特点:原子性,同一列的类型相同,一个列名只能对应到一列,行的上下关系不影响。数据表中的每一个字段不可再分。


第二范式(2NF):数据表中不存在非关键字段对任意一候选字段的部分函数依赖。在1NF基础上,消除非主属性对主码的部分函数依赖。这个概念分两个层次理解:函数、函数依赖。
1.函数问题
所谓函数关系指的就是数据表中的列之间不应该存在的关系。如订单表(订单编号,商品名称,商品单价,商品数量,总价),这是这个表中存在函数关系了,总价=单价*数量。所以这样的就不符合第二范式(2NF)。
2函数依赖

(身份证号,性别)→(学号,姓名,年龄,班级,班主任,爱好1,爱好2)
其中,班级和班主任部分函数依赖于主码
第二范式要使非主属性必须完全依赖于候选码

表1 由身份证号主属性来锁定表2由主属性性别来锁定班级和班主任。
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其他非主属性。

满足第三范式要在2NF的基础上消除传递依赖:

巴斯-科德范式(BCNF):在3NF的基础上,任何非主属性不能对主键子集依赖。
不满足BCNF例子

拆分后满足BCNF

第四范式(4NF):消除多值依赖
不满足4NF的例子如下:

满足4NF例子如下:

第5范式(5NF)::是最终范式。消除了4NF中的连接依赖。
第五范式有以下要求:
(1)必须满足第四范式
(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。
有一个销售信息表SALES(SALEPERSON,VENDOR,PRODUCT)。SALEPERSON代表销售人员,VENDOR代表供和商,PRODUCT则代表产品。
在某些情况下,这个表中会产生一些冗余。可以将表分解为PERSON_VENDOR表(SALEPERSON,VENDOR);PERSON_PRODUCT表(SALEPERSON,PRODUCT);VENDOR_PRODICT表(VENDOR,PRODUCT)
本篇内容来自网络,本人只是做了结合来学习。
网友评论