日期:2014-05-16  浏览次数:20377 次

浅谈数据库设计三范式

???? 设计过数据库的童鞋,一定对数据库设计三范式有一定的了解,这是数据库设计的基本原则,但是设计数据库是不是非得要按这三个范式进行呢?未必,在某些情况下(1:n,1:1的情况),适当的违反三范式,增加一点数据冗余,可以给我们带来便利。

?

???? 谈起数据库设计三范式,你一定会被它那抽象的定义给搞晕,什么部分关系依赖,传递关系依赖,关键字与非关键字等等等。下面就通俗的介绍下数据库三范式:

?

???? 1、一个属性用数据库的一个列表示。现在的关系型数据库都遵守这个范式,所以你想违反都难。

?

???? 2、比如有一个选课表含有如下几个字段:

?

????????? (学号, 姓名, 年龄, 课程名称, 成绩, 学分)

?

????????? 我们知道通过学号和课程名称可以确定其他字段即:(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

????????? 但是我们又发现:

 ????????????????? (课程名称) → (学分)
  ?????????????? (学号) → (姓名, 年龄)

??????? 这就违反了第二范式:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,在上例中非关键字段学分存在对关键字段课程名称的部分函数依赖。

?

????? 3、如果有如下关系 (学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
  ???? 这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
  ???? (学号) → (所在学院) → (学院地点, 学院电话)

?????????? 即非关键字段学院地点存在对关键字段学号的传递函数依赖。

?

????? 如果还不理解,可以查看附件里的相关资料,个人觉得讲的不错。

?