数据库三范式
2014-09-13 10:34
183 查看
在设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求,称为不同范式,越高的范式意味着数据库设计的越好,冗余越小。
![](https://img-blog.csdn.net/20140913095029484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHpsOTk2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20140913095047031?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHpsOTk2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
大家仔细看这两张图,就可以发现 图1.1包含重复组,所以不符合第一范式的关系,而图1.2则满足第一范式的关系。
由定义可以看出..所有主键只有一个列组成的1NF都满足2NF的关系。
复合主键则不都满足2NF的关系。
下面也以例子来说明。
![](https://img-blog.csdn.net/20140913100740631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHpsOTk2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2.1就是不符合2NF的关系,因为并不是每个非主属性都完全函数依赖于主键。比如 供应商名称部分依赖于主键,因为组件ID和供应商名称没有关系,供应商只和供应商ID有关,所以存在部分依赖,不满足第二范式的关系。再比如,供应商地址也是部分依赖于主键,因为组件ID和供应商地址没有关系,供应商地址只和供应商ID有关,也存在部分依赖,不满足2NF。
要想让这张表满足2NF的关系,则应该将上面这张表拆分成下面两张表。
![](https://img-blog.csdn.net/20140913102235511?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHpsOTk2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2.2就是满足第二范式的关系。
范式越高,意味着数据库设计的越好,就可以有更小的数据冗余,可以更好的进行数据有效性检查,还可以提供存储效率。
第一范式:不包含重复组的关系式第一范式的关系。
我们一般设计的数据库大都满足第一范式的关系,我举例子来说明。大家仔细看这两张图,就可以发现 图1.1包含重复组,所以不符合第一范式的关系,而图1.2则满足第一范式的关系。
第二范式:如果关系模式R∈1NF,并且R中的每个非主属性都完全函数依赖于主键,则R∈2NF。
要想理解第二范式就要先了解主键可以有一个字段组成,也可以有两个字段组成,有两个字段组成的主键叫复合主键。由定义可以看出..所有主键只有一个列组成的1NF都满足2NF的关系。
复合主键则不都满足2NF的关系。
下面也以例子来说明。
图2.1就是不符合2NF的关系,因为并不是每个非主属性都完全函数依赖于主键。比如 供应商名称部分依赖于主键,因为组件ID和供应商名称没有关系,供应商只和供应商ID有关,所以存在部分依赖,不满足第二范式的关系。再比如,供应商地址也是部分依赖于主键,因为组件ID和供应商地址没有关系,供应商地址只和供应商ID有关,也存在部分依赖,不满足2NF。
要想让这张表满足2NF的关系,则应该将上面这张表拆分成下面两张表。
图2.2就是满足第二范式的关系。
第三范式:如果R∈2NF,并且在数据库表中不存在传递依赖关系,则关系模式属于第三范式的关系。
意思是如果在表中存在 A→B,B→C,这就存在了传递依赖关系A→C,所以不满足第三范式的关系。范式越高,意味着数据库设计的越好,就可以有更小的数据冗余,可以更好的进行数据有效性检查,还可以提供存储效率。
相关文章推荐