任务1.3.2 设计学生成绩管理系统数据库关系模型
微课1-5
设计学生成绩管理系统数据库关系模型
平时大家接触得最多的应用程序实际上只是处理数据的程序,它们的数据信息是从某个数据源得到的,其中一个数据源就是数据库(DataBase,DB)。数据库像是一个数据仓库,存放着与应用程序相关的一些基础数据,且这些数据通常以二维表(也叫关系)的形式存放,表与表之间互相关联。这种存放数据的模型就是关系模型,以关系模型创建的数据库称为关系数据库。
对关系的描述一般为关系名(属性1,属性2,……,属性n),若某一属性或属性组为主键,则加下划线表示。
完成概念数据模型设计后的关系模型设计的过程,其本质就是 E-R 模型向关系模型的转换。要解决的问题包括如何将实体和实体间的联系转换为关系模型,以及如何确定这些关系模型的属性和键。下面介绍把E-R模型中实体、实体的属性和实体之间的联系转换为关系模型的方法。
1.实体(E)转换为关系模式的方法
实体转换为关系模型时,实体的属性就是关系的属性,实体的主键就是关系的主键,E-R模型中有几个实体就转换为几个关系模型。
例如,将学生实体转换为关系模型。
实体学生:学生(学号,姓名,专业,性别,出生日期,总学分,照片,备注)
主键:学号
关系模型:Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note)
PK:S_ID
2.联系(R)转换为关系模型的方法
E-R模型向关系模型转换时,除了要将实体转换为关系模型,还需要将实体之间的联系转换为关系模型。实体之间的联系类型不同,转换规则也不同。
(1)一对一联系
将联系与任意端实体对应的关系模型合并,并加入另一端实体的主键和联系本身的属性。
【例1-1】假设实体班级(班级号,班级名)与实体班主任(职工号,姓名,性别,职称)之间的任职联系是一对一联系。E-R模型如图1-15所示,试将其转换为关系模型。
图1-15 班主任任职E-R模型(一对一联系)
实体班级(班级号,班级名)与实体班主任(职工号,姓名,性别,职称)的联系转换后得到的关系模型如下。
Class(ClassID,ClassName) PK:ClassID Head_Teacher(HireID,Name,Sex,Title) PK:HireID
(2)一对多联系
将联系与多端实体对应的关系模型合并,并加入另一端实体的主键和联系本身的属性。
【例1-2】实体班级与实体学生的联系是一对多,E-R模型如图1-16所示,试将其转换为关系模型。
实体班级(班级号,班级名)和实体学生(学号,姓名,专业,性别,出生日期,总学分,照片,备注)的联系转换后得到的关系模型如下。
Class(ClassID,ClassName) PK:ClassID Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note) PK:S_ID
图1-16 学生与班级E-R模型(1:n联系)
由于班级与学生之间的联系是一对多,将联系的属性班干部职位和一端的主键放在多端,故此E-R模型转换后得到的关系模型如下。
Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note,ClassID,Class_Leader) PK:S_ID
班级实体转换后的关系模型不变。
(3)多对多联系
将联系转换为一个关系模型。将联系连接的各实体的主键和联系本身的属性转换为关系模型的属性。
【例1-3】实体教师和实体学生的联系是多对多,E-R模型如图1-17所示,试将其转换为关系模型。
图1-17 教师与学生E-R模型(多对多联系)
实体教师(职工号,姓名,性别,职称,教授科目)和实体学生(学号,姓名,专业,性别,出生日期,总学分,照片,备注)之间的联系是多对多,转换后新增一个关系“教授”(职 工号,学号,评价),转换后的关系模型如下。
Teacher(HireID,Name,Sex,Title,Subject) PK:HireID Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note) PK:S_ID Teach(HireID,S_ID,Evaluation) PK:HireID和S_ID
根据以上转换原则,将学生成绩管理系统数据库的E-R模型(图1-15)转换为关系模型时,应采取多对多联系对应的转换方式。也就是实体学生(学号,姓名,专业,性别,出生日期,总学分,照片,备注)和实体课程(课程号,课程名称,开课学期,学时,学分)之间的联系是多对多,转换后新增一个关系“选课”(学号,课程号,成绩),转换后的关系模型如下。
Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note,ClassID,Class_Leader) PK:S_ID Course(C_ID,C_Name,Semester,Credit_Hour,Credit) PK:C_ID Elective(S_ID,C_ID,Grade) PK:S_ID和C_ID
素养小贴士
要设计出完善、健壮的数据库,在数据库的分析、设计阶段必须奠定好基础。只有遵循规范化设计要求,才能设计出结构合理的关系模型,为之后数据库的构建提供强有力的保障。
数据库的关系模型不是一次就能成型的,而是需要不断地进行优化才能得到最后的结果,优化通常以规范化理论作为指导。不以规矩,不能成方圆,所以必须不断加强规范化意识,提升专业技能,才能开发出用户所需的数据库。