数据库之范式

来源:互联网 发布:英文原著 知乎 编辑:程序博客网 时间:2024/06/01 15:14

数据库范式的应用主要用来降低数据冗余,更好的划分设计数据库的关系表结构,总共包含5个级别的范式。这些范式在较少不必要的重复,节省存储空间的同时却也带来了查询开销,因为复杂的关系表结构必然带来了更加多的连接操作。在应用中要根据应用场合来适当的平衡范式带来的得失。下面简单看看第1,2,3范式和BCNF。

Example:T(A, B, C, D, E)

第一范式:表的所有字段都是单一属性,不可再分。基本的关系表都满足这个范式。

第二范式:不存在非关键字段对候选关键字段的部分依赖。例如表T中,如果(A, B)是候选关键字,而A作为它的一个字段被C依赖,即A->C,那么就是C对(A, B)的部分依赖。这就表明了C和A应该组成一个新的表,新表中A作为候选关键字。

第三范式:不存在非关键字段对候选关键字的传递依赖。例如表T中,如果(A)是候选关键字,而A->B->C,那么C就是对A的传递依赖。这里由于是在第二范式的基础上定义,B必然不是候选关键字段。传递依赖的存在表明B和C应该组成一个新表,B作为候选关键字,这样在T中消除C。

BCNF:不存在任意字段对候选关键字段的传递依赖。例如表T中,如果(A, B),(B, C)都是候选关键字。而且A->C,C->A,那么就会出现(A, B)->C->A,A对(A, B)传递依赖。造成这样的原因是由于A,C互相依赖,应该把它们作为一个表单独出来,然后用任意一个代表出现在T中就可。

上面的定义都是没进一层的范式都是定义在上一层的基础上。