数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及应用系统,使其能够有效存储数据,满足用户的信息需求和处理需求。本任务将介绍学生成绩管理系统数据库的概念数据模型及关系模型的设计过程。
微课1-4
概念数据模型是在了解用户的需求、用户的业务领域及流程后,经过分析和总结,提炼出来的用以描述用户业务需求的一些概念性内容。现以学生成绩管理系统数据库为例,讲解概念数据模型的设计过程。
在进行概念数据模型设计前,需要充分了解与分析用户需求。
(1)绘制组织结构图。组织结构是用户业务流程与信息的载体,能为设计人员理解企业的业务、确定系统范围提供帮助。学生成绩管理系统数据库的组织结构图如图1-13所示。
(2)绘制业务用例图。收集资料,并对资料进行分析、整理,绘制出学生成绩管理系统数据库业务用例图,如图1-14所示。
图1-13 学生成绩管理系统数据库的组织结构图
图1-14 学生成绩管理系统数据库业务用例图
(3)了解功能需求。对学生成绩管理系统数据库中涉及的各部门进行调研,得到学生成绩管理系统数据库的功能需求如下。
① 学籍管理功能:用于添加、修改、删除学生信息。
② 教务管理功能:包含成绩管理和课程管理两个子功能,分别用于添加、修改、删除成绩和课程。
(4)生成数据字典。针对学生成绩管理系统数据库的功能需求,对学生成绩管理系统数据库中涉及的各部门业务流程和数据流程进行分析,得到的数据项简述如下。
① 学生信息:学号、姓名、专业、性别、出生日期、总学分、照片、备注。
② 课程信息:课程号、课程名称、开课学期、学时、学分。
③ 选课信息:学号、课程号、成绩。
根据学生成绩管理系统数据库的需求分析,进行概念设计。
(1)定义实体。实体集合的成员都有一个共同的特征和属性集,可以从收集的源材料——基本数据资料表中直接或间接标识出大部分实体。根据源材料名字表中表示物的术语及以“代码”结尾的术语,如客户代码、代理商代码、产品代码等,将其名词部分代表的实体标识出来,从而初步找出潜在的实体,形成实体表。
根据学生成绩管理系统数据库的需求分析,可知学生成绩管理系统数据库中存在学生、课程两个实体。
(2)定义联系。根据实际的业务需求、规则和实际情况确定实体联系、联系名和说明,确定联系类型,即一对一、一对多或者多对多。
根据需求分析可知,学生和课程之间存在选课的联系。一名学生可以选修多门课程,一门课程可以被多名学生选修,那么学生和课程之间的选课联系是多对多联系,并且派生出成绩作为联系的属性。
(3)定义主键。为已定义的实体标识候选键,以便唯一识别每个实体的实例,再从候选键中确定主键。为了确定主键和联系的有效性,需要利用非空规则和非多值规则,即一个实体实例的主键不能是空值,也不能在同一个时刻有一个以上的值。
根据需求分析,找出实体学生的主键为学号,实体课程的主键为课程号。
(4)定义属性。从源数据表中抽取说明性的名词生成属性表,确定属性的所有者,定义非主键属性,检查属性的非空及非多值规则。此外,还要检查完全依赖函数规则和非传递依赖规则,保证一个非主键属性必须依赖于整个主键且只依赖于主键。
根据需求分析的数据字典可以得到实体学生有学号、姓名、性别、出生日期、专业等属性,实体课程有课程号、课程名称、学时和学分等属性。
(5)定义其他对象和规则。定义属性的数据类型、长度、精度、非空、默认值和约束规则等。定义触发器、存储过程、视图、角色、同义词和序列等对象信息。
(6)E-R模型设计。根据以上分析,学生成绩管理系统数据库的概念设计E-R模型如图1-9所示。
微课1-5
平时大家接触得最多的应用程序实际上只是处理数据的程序,它们的数据信息是从某个数据源得到的,其中一个数据源就是数据库(DataBase,DB)。数据库像是一个数据仓库,存放着与应用程序相关的一些基础数据,且这些数据通常以二维表(也叫关系)的形式存放,表与表之间互相关联。这种存放数据的模型就是关系模型,以关系模型创建的数据库称为关系数据库。
对关系的描述一般为关系名(属性1,属性2,……,属性 n ),若某一属性或属性组为主键,则加下划线表示。
完成概念数据模型设计后的关系模型设计的过程,其本质就是 E-R 模型向关系模型的转换。要解决的问题包括如何将实体和实体间的联系转换为关系模型,以及如何确定这些关系模型的属性和键。下面介绍把E-R模型中实体、实体的属性和实体之间的联系转换为关系模型的方法。
实体转换为关系模型时,实体的属性就是关系的属性,实体的主键就是关系的主键,E-R模型中有几个实体就转换为几个关系模型。
例如,将学生实体转换为关系模型。
实体学生:学生(学号,姓名,专业,性别,出生日期,总学分,照片,备注)
主键:学号
关系模型:Student(S_ID,Name,Major,Sex,Birthday,Total_Credit,Photo,Note)
PK:S_ID
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
要设计出完善、健壮的数据库,在数据库的分析、设计阶段必须奠定好基础。只有遵循规范化设计要求,才能设计出结构合理的关系模型,为之后数据库的构建提供强有力的保障。
数据库的关系模型不是一次就能成型的,而是需要不断地进行优化才能得到最后的结果,优化通常以规范化理论作为指导。不以规矩,不能成方圆,所以必须不断加强规范化意识,提升专业技能,才能开发出用户所需的数据库。