数据库范式区分

来源:互联网 发布:华为软件开发工资待遇 编辑:程序博客网 时间:2024/05/18 19:18

最近刷题总是遇到范式问题,之前本科时候学习过,但很概念已经很模糊。所以做题时候一会做对,一会又错了...再次区分一下吧。



1、第一范式

 (1)强调的是列的原子性。不解释了,就是对应了数据库表的一列,不可分。


2、第二范式

  (1)在1NF的基础上:任一非主键列  必须  完全依赖于   主键列(X1,X2....)

 (2)不允许出现有:非主键列  部分依赖于  主键列(或者说依赖于主键的一部分)。

 (3)比如一张表是(A, B, C, D),其中(A, B)是主键,如果存在B->C就违反了2NF,因为C只需要主键的一部分就可以被决定了。


3、第三范式

(1)在2NF的基础上:任一非主键列  必须  直接依赖于   主键列(X1,X2....)

(2)不允许出现:非主键列A     依赖于  非主键列 B,非主键列 B     依赖于    主键C  。

(3)比如一张表(A,B,C,D),其中(A)是主键,如果存在A->B和B->C关系,就违反了3NF,因为非主键C依赖于非主键B,而非主键B依赖于主键A,不满足非主键列直接依赖于主键列。


4、BCNF范式

(1)在3NF的基础上:任一主键列    必须不能   直接依赖or传递依赖于  其它主键列(X1,X2.....)

(2)不允许出现:主键列A   依赖于  其它主键列(X1,X2....),主键列C   依赖于  主键列A

(3)比如一张表:(A,B,C,D),其中(A,B,C)是主键,如果存在(A,B)->C和C->A的关系,违反了BCNF,因为:

        a、主键列A对主键列C的直接依赖关系。

        b、主键列A对主键列(A,B)的传递依赖关系。


5、总结:

1NF

| 消除非主属性对码的部分依赖

2NF

| 消除非主属性对码的传递依赖

3NF

| 消除主属性对码的部分和传递依赖

BCNF


       

     

参考:

http://blog.csdn.net/qingking520/article/details/52937728

http://blog.csdn.net/allenlsy/article/details/5356899

http://blog.csdn.net/g_beginner/article/details/6789308



参考:

原创粉丝点击