数据库范式

来源:互联网 发布:centos安装配置ftp 编辑:程序博客网 时间:2024/05/26 17:43

1,第一范式的限定条件如下:

1)每个列必须有一个唯一的名称:即表中的列名唯一。

2)行和列的次序无关紧要:行与列都是无序的。

3)每一列都必须有单个数据类型:指表中列所存储的值的类型要唯一,即一个列不能存储两种不同类型的数据。

4)不允许包含相同值的两行:即等价于声明一个有一个主键的表(主键是用来唯一标识行的一组列)。

5)每一列都必须包含一个单值:即为常说的列的”原子性“,每个列中的值要单一化,不能包含多个值。因为多个值存储到单个字段中限制了该字段的效用。

6)列不能包含重复的组:该条件主要是对条件5的补充,即若是拆分单列中多值,不能使得拆分后的每个列无法区分。如若是列总包含我喜欢吃的动物(鸡,鸭,兔等等),不能简单的拆分为animal1,animal2...而是将值分离到一个新的表中并使用exterminators表的主键连接回主记录。

总结来看,第一范式主要是原子性要求。包括五个对列的约束,一个对行的约束。

2,第二范式的限定条件如下:

1)它满足第一范式;

2)所有的非键值字段均依赖于所有的键值字段:若非键值字段不依赖于所有的键值字段,那么将可能产生更新异常,删除异常以及插入异常的情况。如书中提到一个鳄鱼摔跤表演时间表,该表包含时间,选手,等级以及排名四个字段,其中时间与选手组成构成该表的主键。非键值字段等级与排名都依赖于选手,因为等级与排名与选手具有依赖关系,而与时间没有依赖关系,选手可以在任何时间进行比赛。如删除的3:30 Mike选手的比赛,由于在表中Mike只有一次记录,那么随之其等级与排名信息也将删除,使得表中不村阿紫Mike这名选手;更新过程中若添加新的一名选手,就必须为其安排一场比赛,这是不合理的,而且还要指定比赛时间,而这些信息是没有的。等等以上问题是因为不遵从范式二导致的。范式二可以归纳为:非键值字段对键值字段的依赖关系,必须是对键值字段中的所有列都有依赖关系。

3,第三范式限定条件如下:

1)符合第二范式;

2)它不包含传递相关性:传递相关性指一个非键值字段的值依赖于一个非键值字段的值。如读者俱乐部的表,包含person,书名,作者,章节页数,出版年月,该表以person作为主键,存在这样的依赖关系---书名依赖于person,而作者,章节页数以及出版年月三个非键值字段依赖于非键值字段书名。即出现传递相关性,不符合第三范式。

大多数情况下数据库设计止步于将数据库规范化为3NF。

4,BCNF范式限定条件如下:

1)符合第三范式;

2)每个决定因子都是一个候选键;

5,第四范式限定条件如下:

1)符合BCNF范式;

2)不包含无关的多值依赖性;

6,第五范式限定条件如下:

1)符合第四范式;

2)它不包含相关的多值依赖性;

7,域/键范式(DKNF)限定条件如下:

1)除了(值)域约束和键约束之外,该表不存在其他约束;

摘自《beginning database design solutions》

0 0
原创粉丝点击