一、表设计的合理化(遵循第三范式)

一、表设计的合理化(遵循第三范式)


引言

   数据表所遵循的范式是数据库设计所需要满足的规范,数据库的规范化是优化表的结构,把字段表现的数据清晰、明确、简洁。通常把一个数据表分成两个或者多个表之间的关系叫做数据隔离,表结构遵循第三范式可以帮助我们减少数据的冗余以及减轻更新数据信息的工作量。


正文

  目前,总共有六种范式(第一范式(1NF),第二范式(2NF),第三范式(3NF),BC范式(BCNF),第四范式(4NF),第五范式(5NF))在这些范式中,第一范式是基础范式,第二范式必须满足第一范式,第三范式也需要满足第二范式,依次类推。 

  事物往往是多面性的,在数据库设计时,遵循三范式也有不方便的地方,比如遵循范式之后,往往需要连接多张表才能够取出一条完整的数据。范式越高,性能越差,一般满足第三范式就能解决我们大部分需求的数据库设计。

  下面我们来举例子说第一范式,第二范式,第三范式表设计的合理化

 

  1、第一范式

   定义:第一范式每一个字段都是单一属性,不可再分。简单的来说,就是每个字段表示一个属性。1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库。只要是关系型数据库,就一定满足第一范式。

    下面我来举例子来说明什么是第一范式

    

我们先看一张不满足第一范式的student表:

 

id 名字 年龄 班级 性别
1 小明 16 三年级1班
2 小红 15 三年级2班


在上表中,班级字段就不是单一属性,可以分为:年纪:三年级  班级:1班


满足第一范式student表


id 名字 年龄 年级 班级 性别
1 小明 16 三年级 1
2 小红 16 三年级 2


  2、第二范式

    定义:第二范式每一个字段不存在其他字段的函数依赖[消除部分子函数依赖]。简单来说:就是一个字段不是由另外一个字段推到出来的。

   下面我们用例子来说明


我们先来看一张不满足第二范式的score表(注:字段水平  80-100为优秀,60-80为良)

 

id 名字 student_id 得分 水平
1 小明 1 81 优秀
2 小红 2 60


      在这张表中,student_id 与名字中的id 是对应关系,所以,可以用student_id来推导出名字,所以就不需要student_id与名字字段有函数依赖关系。在表中字段水平 可以由得分的区间来推出是否优秀,良。所以这个得分与水平字段是有函数依赖关系



下面遵循第二范式表

score表


id student_id 得分
1 1 81
2 2 60


student表

student_id 名字
1 小明
2 小红

 然后用student表与score表连表查询即可获得相同的数据


   3、第三范式

     定义:第三范式属性不依赖于其它非主属性[消除部分传递函数依赖]。简单的说,就是消除数据量大时候部分冗余


下面通过例子来解释第三范式


不遵循第三范式表

student表

 

id 名字 年龄 职务 职务编号
1 小红 16 班长 1
2 小明 15 团支书
2
3 小黑 14 团支书 2





在这里,职务编号是可以跟职务有一定的依赖关系的。所以我们可以变为下面两张


student表

id 名字 年龄 职务编号
1 小红 16 1
2 小明 15 2
3 小黑 14 2


job表

 

id 职务名字
1 班长
2 团支书


两表相互关联即可查询到你所要的数据,而且可以避免数据的冗余问题


  数据库的范式可以让我们更好的适应项目的不同变化,选择最优的数据库的设计模式,一般遵循第三范式就可以满足更多的数据表设计的优化。不需要在项目后期,重新构建项目的数据库设计。




posted @ 2017-02-25 12:24  余农场主  阅读(323)  评论(0)    收藏  举报