首先搞清楚什么是E-R数据模型?它有什么用?
E-R模型在将现实世界中事实的含义和相互关联映射到概念模式方面非常有用,因此,许多数据库设计工具都利用了E-R模型的概念。E-R模型所采用的三个主要概念是:实体集、关系集和属性。
-
实体
:实体是世界中可以区别于其他对象的“事件”或者“物体”,例如,学校里的每个学生、学生选修的每门课程等都是一个实体。 -
属性
:属性是实体集中每个成员具有的描述性性质。例如,学生的姓名,学号等。 -
实体集
:实体集就是就有相同类型及属性的实体集合,比如,学校里的所有学生,学生选修的所有课程等。 -
关系
:关系是多个实体间的相互关联。例如,小明选修语文课程。 -
关系集
:关系集是同类关系的集合。例如,所用学生选修课程的集合。
既然知道了E-R数据模型的作用,下面就让我们来画出学生选修课程的E-R图吧。
其中,(学号,姓名,年龄,性别)为学生的属性,(成绩)为选修关系的属性,(课程号,课程名,学分)为课程的属性。学生和课程之间的关系是多对多,即一个学生可以选择多门课程,一门课程可以被多个学生选修。
关系表设计
从上面的E-R图,我们一眼就能看出他们之间的联系,那该如何设计关系模式呢?
我们要知道,关系数据库设计的目的是为了生成一组关系模式,使我们能够既不必存储不必要的冗余信息,又能方便地获取信息。为了是我们方便的达到这个目的,范式设计应运而生。
Boyce-Codd范式
我们所知道的令人满意的范式之一是Boyce-Codd范式(BCNF)。如果对F+中所有形如 α→β 的函数依赖,其中 α⊆R 且 β⊆R,下面的定义至少有一个成立:
-
α→β 是平凡函数依赖(即 β ⊂ α)。(一般来说,平凡函数依赖并没有讨论意义,讨论的都是非平凡函数依赖,即 β ∉⊂ α 的情况)
-
α 是模式R的超码。
考虑如下关系模式及其相应的函数依赖:
- 学生 = (学号,姓名,年龄,性别)
学号 → 姓名 年龄 性别
- 课程 = (课程号,课程名,学分)
课程号 → 课程名 学分
- 选修 = (学号,课程号,成绩)
学号 课程号 → 成绩