关系型数据库三范式的理解

经常用到mysql,每次建表时都会思考怎么建为最优方式。说到这里就会想到数据库范式,那最常说的就是要满足三范式。查资料,也会出现一大堆专业性很强的术语。要理解一个概念,还得再理解其他相关的术语。比如下面的解释:

1NF的定义为:符合1NF的关系中的每个属性都不可再分。

2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖

3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖

还需要花时间去了解码,函数依赖等概念,然后再出来一堆数学函数,相信很多人这时候已经懵了。那么接下来我说一下我的理解。

工作这几年,一直在接触各种计算机语言,接受的面向对象的思想。有些时候会看到某种语言里会说“万物皆对象”这句话。其实在数据库里我们也可以用类似的思想理解。

我们可以把每张数据表理解为一个对象的集合。表里的每一行都是描述的一个对象。行里的每个字段都是该对象的一个属性。这些字段都是用来描述这个对象的。那么上面的三范式,我们就可以做如下解读:

1、字段不可分(每个对象的属性必须是分开的,不能把属性合在一起,参照我们计算机语言中创建对象)

2、有主键,非主键字段依赖主键; (数据库某一行的主键就代表了这个对象,其他字段属性必须和这个主键相关,因为他们都是描述这个对象的。其他无关对象的属性不能放进来。另外这个主键是用来唯一标识这个对象的)

3、非主键字段不能相互依赖;(对象的属性间不能有依赖。比如学生的表中可以有学号,性别,成绩。但是当有了班主任,班级时就不行了,因为他们是属于班级对象的一些属性,我们需要单独建表来描述,但是可以加个班级ID的字段来做为引用,我们可以通过班级ID来找到班主任等班级信息。这样也避免了重复数据的引入)


有了上面的总结,我们可以再继续抽象:

1NF 描述的是对象某个属性,对这个属性的要求是不可再分

2NF 描述的是某个对象和具体的某个属性的关系。某个属性必须是唯一依赖这个对象。因为主键代表了这个对象,所以可以理解为字段属性必须依赖于主键

3NF 描述的对象属性间的相互关系。他们之间不能有依赖关系。只能和主键有关系。

好了,上面是我对数据库三范式的理解。希望能对您有帮助!





开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部