本文章的素材与知识均来自于李国良老师的数据库管理系统课程。
-
数据库设计和数据模型
一.数据模型
1.概念
(1)数据库结构的基础就是数据模型。数据模型是用于描述数据间的联系、数据语义(即数据操作)、一致性(完整性)约束的概念和工具的集合。
2.分类
(1)E-R模型:下文讲述
(2)面向对象模型:以E-R模型为基础,以对象的形式来管理数据。
(3)关系模型:在DBMS-1.1一文中已讲述。
(4)网状模型:以“树形结构”来表示数据记录间的联系。
(5)层次模型:以“图形结构”来表示数据记录间的联系。
二.数据库设计
将上述数据模型抽象成概念数据模型、逻辑数据模型和物理数据模型三大类。而概念数据模型和逻辑数据模型其实就是对上述逻辑数据模型的再拆分。
1.概念设计阶段
(1)实现:确定概念数据模型。
(2)概念数据模型:概念数据模型就是对实际业务进行分析,提炼出关键概念。概念数据模型通常使用E-R模型表示。
(3)因此,概念设计阶段就是对实际业务进行分析,抽象提炼出E-R模型。
(4)作用:概念数据模型是面向用户的,是用户对实际数据进行抽象建模后的结果,主要用于数据库的概念设计。
2.逻辑设计阶段
(1)实现:将概念数据模型转换为逻辑数据模型。
(2)逻辑数据模型:常见的逻辑数据模型有关系模型、面向对象模型、层次模型和网状模型等。
(3)因此,逻辑设计阶段就是选定一种逻辑数据模型,并将E-R模型转换成该逻辑数据模型。
(4)作用:逻辑数据模型既是面向用户的,也是面向系统的,是数据从真实业务向计算机数据库转换的一个过渡,主要用于数据库管理系统的逻辑设计。
3.物理设计阶段
(1)实现:将逻辑数据模型转换为物理数据模型。
(2)物理数据模型:物理数据模型就是逻辑数据模型在数据库管理系统中的具体存在方式,描述了数据在存储介质上的组织结构。
(3)物理设计阶段涉及到:字段类型、长度的定义,字段的其他详细定义例如非空、默认值等,枚举字段的定义例如各枚举的具体含义等,约束的定义例如主键、外键等。
(4)作用:物理数据模型是面向系统的,主要用于数据库管理系统的物理实现。
4.区别理解
网上关于这三个数据模型的分析都各有各的理解,例如认为在概念数据模型中仅包含实体与联系,在逻辑数据模型中包含实体、联系和属性等。但无论如何,对三个数据模型的分析和三个设计阶段的推进,都是为了能逐步、规范地设计出好的数据库,不必在此过多纠结。
三.关系数据库设计的核心
1.在关系数据库中,概念数据模型用E-R模型表示,逻辑数据模型用关系模型表示。
2.因此,关系数据库设计的一个核心步骤,就是将E-R模型转化为关系模型。
-
概念设计——E-R模型
一.E-R模型概念理解
1.E-R模型是实体-联系模型(Entity-Relationship Model)的简称。
2.E-R模型是用于描述现实世界的概念数据模型,是目前大部分数据库在概念设计阶段所采用的数据模型。
二.E-R模型的基本元素
1.实体和实体集
(1)实体:实体是对现实世界中事物数据概念的某种抽象,可以指现实世界的人、事、物等。例如同学A是一个实体,同学B也是一个实体。
(2)实体集:实体集是多个具有相同性质的同类实体构成的集合。例如一个班级的所有同学构成一个实体集,其中每个同学都是一个实体。
2.属性
(1)属性:属性是用来描述实体集的一组特征。例如实体集Student,拥有的属性可以是:number、name、age、gender等。
(2)标识符:实体集的属性中,可以唯一标识不同实体的某个属性,称为标识符。
(3)复合标识符:当必须选取多个属性才可以唯一标识不同实体时,这多个属性的组合构成符合标识符。
(4)实体集的标识符或复合标识符只能有一个,若存在多个能唯一标识不同实体的标识符或符合标识符,则选择最合适的那一个。
3.联系
(1)联系:在E-R模型中,联系特指实体与实体间的联系。且这种联系一般是用动词来命名,例如学生实体与课程实体的联系为”选课“。
三.E-R图
1.实体集的表示方法
(1)在E-R图中,用实体集来抽象表示一类实体,不单独表示某个实体。
(2)实体集用矩形表示,在矩形框内标注实体集名字。
2.属性的表示方法
(1)属性用椭圆形表示,在椭圆形框内标注属性名字,并用无向边将其与相应的实体集连接起来。
(2)*** 实体集的标识符用下划线标识出来。
3.联系的表示方法
(1)联系用菱形表示,在菱形框内标注联系名字,并用无向边将其与有关实体集连接起来。
(2)*** 在无向边旁标上联系的类型:1:1 , 1:n , m:n。
(3)联系本身也可以具有属性,同样使用椭圆形表示联系的属性,并用无向边将联系和其属性连接。
(4)联系的属性不同于实体集的属性,无需关注标识符。
4.示例
(1)实体集Course,其属性有:Cno、Cname、Cpno、Ccredit,其中标识符为Cno。
(2)实体集Student,其属性有:Sno、Sname、Sgender、Sage、Sdept,其中标识符为Sno。
(3)实体集Course和实体集Student以n:m(即多对多)的关系,存在联系SC,且联系SC的属性有:Grade。
四.E-R联系模型
1.一元联系
(1)一元联系:同一实体集内部不同实体间的联系。例如实体集Student内部,不同的学生间存在组长、组员等角色,其中身为组长的学生对身为组员的学生,存在”管理“联系。
(2)示例
2.二元联系
(1)二元联系:两个实体集之间的联系称为二元联系。例如实体集Student和实体集Course,学生实体对课程实体,存在”选择“联系。
(2)一元联系可以看作是特殊的二元联系。
(3)示例
(3)
3.二元联系——一对一联系(1:1)
(1)一对一联系:实体集E中的每一个实体最多可以和另一实体集F中的一个实体有关系,反之亦然,则称实体集E和实体集F具有一对一联系,记作1:1。
(2)此处未强调实体集E和实体集F必须是不同类型的实体集,当实体集E和实体集F是同一类型实体集时,该二元联系实际上是一元联系。一般提到二元联系,都默认是指不同实体集,下文不再强调。
(3)示例
4.二元联系——一对多联系(1:n)
(1)一对多联系:实体集E中的每一个实体,在实体集F中有n个实体(n>=0)与之相关,则称实体集E与实体集F有一对多的联系,记作1:n。
(2)示例
5.二元联系——多对多联系(m:n)
(1)多对多联系:如果实体集E中的每个实体,在实体集F中有n个实体(n>=0)与之相关,反之,实体集F中的每个实体,在实体集E中有m个实体(m>=0)与之相关,则称实体集E和实体集F具有多对多联系,记作m:n。
(2)示例
6.三元联系
(1)三元联系:三个实体集之间的联系称为三元联系。;例如实体集Student、实体集Course和实体集School,学生实体对课程实体和学校实体,存在”学习“联系,学生A在学校B学习课程C。
(2)示例
7.三元联系转换成二元联系
(1)在实际应用中,二元联系是最常用的实体联系类型,因此更倾向于将其他联系转换成二元联系。一元联系就是一种特殊的二元联系,而多元联系转二元联系与三元联系转二元联系同理,因此主要关注三元联系转换成二元联系。
(2)转换过程
(3)示例
分析:
根据转换过程的(1),就是使用实体集【修读计划】来代替联系【学习】,并为【修读计划】建立属性【计划编号】作为标识符。
根据转换过程(2),就是新建三个联系:【选择】表示实体集【学生】和新实体集【修读计划】的联系,【包含】表示实体集【课程】和新实体集【修读计划】的联系,【制定】表示实体集【学校】和新实体集【修读计划】的联系。
根据转换过程(3),就是将原先三元联系下,不同实体集的实体间的联系,转换成二元联系的形式。
-
逻辑设计——从E-R模型到关系模型
一.E-R实体集的转换
1.讲E-R模型转换为关系模型的基本操作是将实体集转换为关系表。
2.实现:
(1)实体集的名称——>关系表的表名
(2)实体集的属性——>关系表的属性
(3)实体集的标识符——>关系表的主键
3.示例
二.E-R联系的转换
1.无论是几元联系,都是先将其转成二元联系,再进行转换。
2.对于二元联系——一对一联系
3.对于二元联系——一对多联系
4.对于二元联系——多对多联系
5.示例
上述例子中,针对所有的二元联系,都是采用针对联系去添加一个新的关系模式的形式。