多表的设计

来源:互联网 发布:mac os 重装系统 u盘 编辑:程序博客网 时间:2024/05/22 15:56

一、多表设计:

1.范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系数据库中这种规则就称为“范式”,范式是符合某一种设计要求的总结。想要设计一个结构合理的关系型数据库,必须满足一定的范式。
2.范式理论:前面说到,为了建立冗余较小、结构合理的数据库,我们把设计数据库时必须遵循的规则称为范式。而范式理论把关系应满足的规范要求划分成几个级别:


这里要说明的是,范式的等级越高,应满足的约束条件也越严格。同时,规范的每一级别都依赖于它的前一级别,例如一个关系模式满足2NF,则一定满足1NF。接下来,我们就详细介绍一下1NF(第一范式)、2NF(第二范式)、3NF(第三范式)等三个最常用的范式。

(1.)范式理论 - 第一范式(1NF):

要求:每个属性(或列)确保原子性,不可再分,且无重复;确保表不能出现复杂表头
示例:如果有一张表:


这张表在设计时出现了复杂表头的情况,联系方式 列是可以再分的,同时出现了两个相同的 姓名 列,所以它不满足第一范式。应该改成这样:


(2.)范式理论 - 第二范式(2NF):

要求:每一个非主属性不能部分依赖于码,即必须完全依赖于码;确保一张表只描述同一件事情
示例:如果有一张表:


这张表的主码是有两列共同组成的, 学生编号 和 课程编号 两列共同来确定一个学生的一门课的信息。该表虽然满足第一范式,但在设计时出现了部分依赖的情况:
学生姓名 和 学生年龄 等列依赖于主码中一部分,即 学生编号 列
课程名称 和 课程学分 等列依赖于主码中一部分,即 课程编号 列
只有 成绩 列是完全依赖主码的,由 学生编号 和 课程编号 两列共同确定。所以它不满足第二范式。应该改成这样:

(3.)范式理论 - 第三范式(3NF)
要求:属性不能有传递依赖,即属性不能依赖于其它非主属性;确保表中的每一列和主码的关系是直接相关而非间接相关。
示例:如果有一张表:


这张表是满足第二范式的,每一个非主属性列都是完全依赖主码 学号 列的。但每个 班级编号 也唯一确定一个班级名称,即 班级名称 列出现了传递依赖。所以它不满足第三范式。应该改成这样:

总而言之:
一般情况下,数据库的设计满足第三范式即可。即便是第三范式,在一些追求查询性能的数据库中也会遭到“破坏“,加入了适当的冗余字段来提升查询效率(毕竟单表查询比多表联立查询效率要高不少),比如上面的例子中不去拆分学生和班级信息,让经常查询的数据字段存在一张表中便于查询。


原创粉丝点击