1.逻辑设计
数据库概念设计中的E-R模型接近人的思维习惯、易于理解并与计算机具体实现无关。但计算机无关性也决定了没有一个DBMS可以直接支持E-R模型的实现,所以必须将其转换成计算机能够实现的数据模型(层次、网状或关系数据模型),这个过程称为数据库逻辑设计。
2.关系数据模型
关系数据模型是目前使用最广泛的一种数据模型,关系数据模型将实体与实体问联系用二维表形式表示。例如,学生信息表如表1 3所示。
表1-3 学生信息表
(续)
3.相关术语
(1)关系
一个关系就是一张行列交叉的二维表,每个关系有一个关系名,它与E-R模型中的实体集对应。表1-3所示的学生信息表就是一个关系。
(2)元组
二维表中除表头外的非空行称为一个元组。如表1-3中有4行数据,也就有4个元组,它与E-R模型中的实体对应。
(3)属性
二维表中的列称为属性,每一列是一个属性,每列的名称即为属性名。如表1-3中有5列,对应5个属性(学号,姓名,性别,年龄,平均成绩)。它与E-R模型中实体的属性相同。
(4)域
域是属性的取值范围,即不同元组对同一属性的取值所限定的范围,例如性别的域为集合{男,女}。
(5)关键字(以下简称键或码)
在一个关系rf1可能有多个候选键,从中选择一个作为主键。例如课程管理系统中,“学号”可作为学生信息表的主键,如果用学生的“姓名”作为主键则同名学生无法区分。
4.关系运算
关系数据库系统至少应当支持3种关系运算,即选择、投影和连接。
(1)选择
选择是单目运算符,即对一个表进行的操作。从二维表中选出符合给定条件的元组组成一个新表,它是从行的角度对关系进行运算,是关系的横向抽取。
例如,在学生信息表(见表1-3)中找出性别为“女”且平均成绩在60分以上的元组,形成一个新表,如表1-4所示,则属于选择操作。
表1-4 学生信息表选择运算结果
(2)投影
投影也是单目运算符,从二维表中选出若干属性组成新的表,它是从列的角度对关系进行运算,是关系的垂直分解。
例如,对学生信息表(见表1-3)中的“学号”、“姓名”和“平均成绩”进行投影操作,得到结果如表1-5所示。
表1-5 学生信息表投影运算结果
(3)连接
表的选择和投影运算是分别从行和列两个方向上对一张表进行的操作,而连接运算是对两张表的操作。
例如,存在成绩信息表(见表1-6)和课程信息表(见表1-7)。
表1-6 成绩信息表
表1-7 课程信息表
对这两张表依据“课程编号”进行连接操作,得出的新表如表1-8所示。
表1-8 成绩信息表与课程信息表连接结果
5.E-R模型转换为关系数据模型
E-R模型可以向现有的各种数据库模型转换,不同的数据库模型有不同的转换规则。向关系模型转换的规则如下。
1)一个实体类型转换成一个关系模式,实体的属性就是关系的属性,实体的码就是关系的码。
课程管理系统E-R图(见图1-10)中有“学生”、“课程”和“教师”三个实体,根据上述原则可以转换为三个关系模型。
学生(学号,姓名,性别,出生日期,专业,联系方式)
课程(课程编号,课程名称,学分)
教师(教师编号,姓名,性别,职称,所在部门)
提示
下画线表示该属性为关系的码。
2)一个1:1联系可以转换为一个独立的关系模式,也可以与联系的任意一端实体所对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的码。如果与联系的任意一端实体所对应的关系模式合并,则需要在该关系模式的属性中加入另一个实体的码和联系本身的属性。
例如,厂长与工厂是1:1联系,其E-R图如图1-14所示。
图1-14 1:1联系
该“任职”关系有以下两种转换方案。
①“任职”联系转换成一个独立的关系模式
厂长(工号,姓名,工龄,职称)
工厂(工厂编号,工厂名称,工厂地址)
任职(工号,工厂编号)
②“任职”联系与“工厂”实体合并
厂长(工号,姓名,工龄,职称)
工厂(工厂编号,工厂名称,工厂地址,工号)
3)一个1:n联系可以转换为一个独立的关系模式,也可以与联系的n端实体所对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而联系的码为n端实体的码。如果与联系的n端实体所对应的关系模式合并,则需要在该关系模式的属性中加入一端实体的码和联系本身的属性。
例如,班级与学生是1:n联系,其E-R图如图1-15所示。
图1-15 1:n联系
该“组成”关系有以下两种转换方案。
①“组成”联系转换为一个独立的关系模式
班级(班级编号,班级名称,所在系别)
学生(学号,姓名,性别,出生日期,联系方式)
组成(学号,班级编号)
②“组成”联系与“学生”实体合并
班级(班级编号,班级名称,所在系别)
学生(学号,姓名,性别,出生日期,联系方式,班级编号)
4)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
例如,课程管理系统中存在两个m:n联系。(www.daowen.com)
①“选修”联系。学生与课程两实体间的“选修”联系是一个m:n联系,转换为如下关系模式,其中学号与课程编号为关系的组合码。
学生(学号,姓名,性别,出生日期,专业,联系方式)
课程(课程编号,课程名称,学分)
选修(学号,课程编号,成绩)
②“讲授”联系。教师与课程两实体间的“讲授”联系也是一个m:n联系,转换为如下关系模式,其中教师编号与课程编号为关系的组合码。
课程(课程编号,课程名称,学分)
教师(教师编号,姓名,性别,职称,所在部门)
讲授(教师编号,课程编号)
综上所述,课程管理系统E-R图中的实体和联系进行相应的关系数据模型转换,最终形成如下的关系模型。
学生(学号,姓名,性别,出生日期,专业,联系方式)
课程(课程编号,课程名称,学分)
教师(教师编号,姓名,性别,职称,所在部门)
选修(学号,课程编号,成绩)
讲授(教师编号,课程编号)
6.关系数据模型的优化
所谓规范化是指关系模型中的每一个关系模式都必须满足一定的要求。目前普遍用范式(Normal Form,NF)来表示关系模型的规范化程度,一般情况下数据模型至少规范到第三范式。
三级范式是一个由低到高对关系模型进行规范的过程,第一范式是对关系的最低要求,如图1-16所示。
图1-16 三级范式
(1)第一范式(1NF)
第一范式要求关系模式中的每列必须是不可分割的原子项,即第一范式要求列不能够再分为其他几列,严禁“表中表”。
课程管理数据库的关系模型中存在学生(学号、姓名、性别、出生日期、专业、联系方式),但该关系中“联系方式”属性并不是不可分割的原子项,它还可以划分为“联系电话”和“邮箱地址”两项,如表1-9所示。
表1-9 学生信息表
对表1-9进行1NF规范化处理,得到符合1NF的关系表,如表1-10所示。
表1-10 符合1NF的学生信息表
注意
任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
(2)第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)基础上建立起来的,满足第二范式(2NF)则必须先满足第一范式(1NF)。第二范式要求表中所有非主关键字属性完全依赖于主关键字。如果非关键字属性仅依赖主关键字的一部分,则可以将这个属性和其依赖的部分主键分解出来形成一个新的实体。总之第二范式(2NF)要求属性完全依赖主键。
例如,存在表1-11所示的考生成绩表。
表1-11 考生成绩表
考生成绩表的关键字是组合关键字(由“准考证号”和“课程代号”组成),第二范式要求所有的非主关键字完全依赖主关键字,但该表中的“学分”属性只依赖于“课程代码”,因此不符合2NF,需要对此进行第二范式的规范,即分解考生成绩表(见表1-11),形成符合2NF的考生成绩表(见表1-12)和课程信息表(见表1-13)。
表1-12 符合2NF的考生成绩表
表1-13 分解出的课程信息表
(3)第三范式(3NF)
第三范式则要消除非主关键字对主关键字的传递依赖,即满足第三范式的数据库表不应该存在这样的依赖关系:关键字段→非关键字段x→非关键字段y
例如,存在表1-14所示的考生信息表。
表1-14 考生信息表
考生信息表(见表1-14)中关键字为“准考证号”,存在如下决定关系:
准考证号→考场编号→(考场,考点)
即非关键字“考场”、“考点”对关键字“准考证号”的传递依赖,因此应该对表1-14继续进行分解,形成符合3NF的考生信息表(见表1-15)和考场信息表(见表1-16)。
表1-15 符合3NF的考生信息表
表1-16 分解出的考场信息表
综上所述,课程管理系统表结构经过关系数据模型范式的规范化,最终形成符合3NF的数据模型,如表1-17所示。
表1-17 课程管理系统的关系模型信息
7.课程管理数据库中的表结构
(1)学生信息表
学生信息表用于存储学生的基本信息,学生信息表结构如表1-18所示。
表1-18 学生信息表
(2)课程信息表
课程信息表用于存储课程的相关信息,课程信息表结构如表1-19所示。
表1-19 课程信息表
(3)选修信息表
选修信息表用于存储学生选修课程的联系信息,选修信息表结构如表1-20所示。
表1-20 选修信息表
(4)教师信息表
教师信息表用于存储教师的相关信息,教师信息表结构如表1-21所示。
表1-21 教师信息表
(5)讲授信息表
讲授信息表用于存储教师讲授课程的联系信息,讲授信息表结构如表1-22所示。
表1-22 讲授信息表
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。