日期:2014-05-16 浏览次数:20418 次
???? 设计过数据库的童鞋,一定对数据库设计三范式有一定的了解,这是数据库设计的基本原则,但是设计数据库是不是非得要按这三个范式进行呢?未必,在某些情况下(1:n,1:1的情况),适当的违反三范式,增加一点数据冗余,可以给我们带来便利。
?
???? 谈起数据库设计三范式,你一定会被它那抽象的定义给搞晕,什么部分关系依赖,传递关系依赖,关键字与非关键字等等等。下面就通俗的介绍下数据库三范式:
?
???? 1、一个属性用数据库的一个列表示。现在的关系型数据库都遵守这个范式,所以你想违反都难。
?
???? 2、比如有一个选课表含有如下几个字段:
?
????????? (学号, 姓名, 年龄, 课程名称, 成绩, 学分)
?
????????? 我们知道通过学号和课程名称可以确定其他字段即:(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
????????? 但是我们又发现:
????????????????? (课程名称) → (学分)
?????????????? (学号) → (姓名, 年龄)
??????? 这就违反了第二范式:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,在上例中非关键字段学分存在对关键字段课程名称的部分函数依赖。
?
????? 3、如果有如下关系 (学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
???? 这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
???? (学号) → (所在学院) → (学院地点, 学院电话)
?????????? 即非关键字段学院地点存在对关键字段学号的传递函数依赖。
?
????? 如果还不理解,可以查看附件里的相关资料,个人觉得讲的不错。
?