关系数据库的规范化

关系数据理论数据库

1、设计中的问题

一、数据冗余大函数

数据冗余大指的是数据会常常重复出现,浪费了大量的存储空间。spa

二、更新异常设计

   在数据冗余度大的时候,会致使更新异常,系统须要付很大的代驾来维护数据库的完整性,例如:当冗余的那一项的数据更新的时候会致使数据表中出现该数据的元组也要更新,这回消耗系统的资源,对于大型应用来讲这是一种不可原谅的事。资源

三、删除异常im

会致使数据丢失。总结

四、插入异常数据

   某一条数据在设计的时候依赖于表的主键可是现实中该主键并不能决定该数据的时候,当想要插入该数据的时候会致使异常,没法插入。规范化

 

一个好的数据模式不该该发生以上4个问题。异常

 

 

 

2、规范化

一、函数依赖

在一个关系模式中,若是X函数肯定Y的时候,这个时候Y就函数依赖于X,记为X→YX是这个关系的决定因数。

 

1.1、彻底函数依赖

在一个关系中,若是X→Y,而且X的任何一个真子集X’ 都不能肯定Y,那么X→Y为彻底函数依赖。

如:

学生(学号、课程号)-->成绩

X=(学号、课程号),学号或者课程号都不能肯定成绩。

 

1.2、部分函数依赖

在一个关系中,若是X→Y,而且X的某一个真子集X’ 肯定Y,那么X→Y为部分函数依赖。

如:学生(学号、课程号)-->

可是只根据学号咱们也能肯定该学生属于哪个系。

 

2、码

2.1、候选码

在一个关系中,若是一个属性或者属性组可以肯定其余属性或属性组的时候,它就是候选码。

2.2、主码

任意一个候选码均可以被选为主码。

2.3、外码

某一个关系中的属性(非码)是其余关系中的码,那么他就是外码。

 

三、范式

3.11NF

每个属性都是不可分割的项就能属于1NF

2.22NF

对于一个关系,每个非主属性必须彻底依赖于码,这就是2NF。再设计的时候应该找出该关系的候选码和依赖关系,而后判断,消除部分依赖。

一个关系不属于2NF会致使插入异常,删除异常、修改麻烦。

2.33NF

在一个关系中,不存在这样的码X,属性组Y和主非属性Z使得X→Y,Y→Z成立。也就是所不能存在非主属性对主属性的传递依赖。

若是一个关系存在传递依赖,那么也会有插入异常、删除异常、修改麻烦的问题。

2.4BCNF

如果一个关系模式中的每个决定因数都含有码的时候,那么这个关系模式就知足BCNF

BCNF的关系模式中。

全部非主属性都彻底依赖于主属性。

全部的主属性对每个不包含他的码也是彻底依赖

没有任何属性彻底依赖于非码的任何一组属性。

3、总结

在数据库的设计过程当中,知足第一范式的数据库就是一个合法的数据库,可是这样的不是一个好的数据库,这样的数据库在插入数据和更新、删除数据的时候会有出现一些问题,这些问题可能会致使数据库异常或则操做麻烦。

数据库在设计过程当中须要规范化,规范化的过程是一步一步来的,首先咱们让咱们的数据库知足1NF,而后去检查是否存在部分依赖,而后消除部分依赖,最后检查是否还有传递依赖,若是有在消除传递依赖。这样咱们的数据库会知足3NF,这样的数据库已经算是一个不错的数据库了,固然若是对数据库的设计要求很高,那么咱们再去看一下是否每个决定因数都含有码,没有就继续分解,这样咱们的数据库就能在知足BCNF,若是还要继续提升的话就去检查是否知足4NF吧。