2.1 数据模型
对所研究的实体进行必要的简化,用适当的表现形式或规则描述它的主要特征,所得到的简化系统就是模型。例如,模仿鸟类的飞行原理设计飞机模型,形成原理方案,再根据模型制造实物。数据模型也是一种模型,用来抽象、表示和处理现实世界中的信息,是构造数据结构时所遵循的规则及对数据所能进行的操作的总称。它是设计和实现数据库的基础。
图2.1 建立数据模型的过程
为现实世界中的信息建立数据模型的过程包括两个阶段(见图2.1)。首先按用户的观点对现实事物及其关联关系进行抽象描述,形成信息世界的概念模型;然后按机器(计算机)的观点将其映射转换为符合特定数据库管理系统要求的数据模型。
2.1.1 信息世界的概念模型
1.概念模型的含义
概念模型是按用户的观点将现实世界的信息进行模型化表示后形成的。现实世界中的事物千差万别,事物之间的关系错综复杂。概念模型需要简洁、恰当地刻画目标系统所关注的现实世界中的信息,主要包括两个方面:
① 筛选出有价值的事物并对其主要特性进行描述;
② 描述这些事物之间的联系。
概念模型是人们进行信息系统分析的有效交流工具,不仅可以有效地帮助开发人员描述现实世界中的信息,还能辅助开发人员与用户沟通数据需求,是后续数据模型设计的基础。它不依赖于具体的计算机系统和数据库管理系统,通常采用实体联系模型(Entity-Relationship Diagram,简称E-R图或E-R模型)来描述。
2.E-R图
(1)E-R图的基本结构
E-R图主要由实体、实体的属性和实体间的联系构成(见图2.2),结构简单、清晰易懂。
1)实体。实体是指在现实世界中客观存在的、具有共同特征并可以相互区别的事物对象的集合。例如,学生、课程、教师等都是实体,而具体的某个学生是学生实体这个集合中的一个成员。在E-R图中,实体用矩形表示,矩形内的文字是实体的名称。
2)属性。实体内各个成员所具有的共同特征就是属性。例如,学生实体具有学号、姓名、性别、出生日期等属性。在E-R图中,属性用椭圆形表示,并用直线与相关的实体进行连接,椭圆内的文字是属性的名称。
3)关键字。实体中能够唯一标识实体成员的一组最小的属性集合称为实体的关键字。一个实体可以有多个关键字,通常选择一个作为主关键字(主键)。例如,“学号”可作为学生实体的主键,它能唯一标识一个学生,因为每个学生的学号不同。在E-R图中,主键属性用下画线表示。
4)联系。联系是实体之间的一种关联。联系也可以具有属性。例如,学生实体与课程实体之间具有“选修”联系,成绩可作为“选修”联系的一个属性。在E-R图中,联系用菱形表示,菱形内的文字是联系的名称,并用直线将它与关联的实体进行连接。
联系可以分为三种类型,下面以本书所用的在线学习系统实例—“e学习”系统中涉及的实体联系为例进行说明。
① 一对一联系(1∶1)。实体A中的每个成员最多与实体B中的一个成员相关联,反之亦然。图2.2(a)中的学生实体与毕业证实体之间是一对一的联系,因为一个学生最多只能获得有一个毕业证,而一个毕业证只能颁发给一个学生。
② 一对多联系(1∶n)。实体A中的每个成员可以与实体B中的多个成员相关联,反之,实体B中的每个成员最多与实体A中的一个成员相关联。图2.2(b)中的课程实体与课件实体之间是一对多的联系,因为一门课程可包含多个课件,而一个课件只能属于一门课程。
③ 多对多联系(m∶n)。实体A中的每个成员可以与实体B中的多个成员相关联,反之,实体B中的每个成员也可以与实体A中的多个成员相关联。图2.2(c)中的学生实体与课程实体之间是多对多的联系,一个学生可选修多门课程,一门课程也可以被多个学生选修。
(2)E-R图的设计过程
根据对系统数据处理需求的分析,首先定义每个局部应用的E-R图,然后按照一定的规则把它们集成起来,从而设计出系统的全局概念结构。
图2.2 “e学习”系统的局部E-R图及联系类型举例
1)设计局部E-R图
局部E-R图设计的主要步骤如下:①确定实体,分析各实体间存在的联系,并定义联系的类型;②确定实体的属性、联系的属性;③定义各实体的主键。
区分实体与属性的一般原则:①实体一般需要描述信息,而属性则不需要;②多值的属性可考虑作为实体。例如,在一般系统中,“地址”作为属性即可;但在电商系统中一个用户通常有多个收货地址,最好将“收货地址”作为一个独立的实体,否则数据库中将会出现大量的空值。
根据“e学习”系统的数据处理需求,我们可以设计其他局部E-R图(见图2.3)。
图2.3 “e学习”系统的其他局部E-R图
2)设计全局E-R图
将局部E-R图进行集成就得到全局E-R图。图2.2和图2.3中的局部E-R图集成后得到的全局E-R图如图2.4所示。
图2.4 “e学习”系统的全局E-R图
将局部E-R图进行集成时需要消除它们之间的冲突,主要有以下三类冲突。
① 属性冲突包括以下两种情况:第一种是属性域冲突,即属性的类型、取值范围和取值集合不同,例如,“学号”是字符型还是整型,以及长度范围等需要统一;第二种是属性的取值单位冲突,例如,“成绩”用百分制还是5分制,各处要一致。
② 命名冲突包括以下两种情况:第一种是同名异义,指不同的实体或属性在两个局部E-R图中命名相同,但含义不同;第二种是异名同义,指同一个实体或属性在两个局部E-R图中命名不同,但含义相同。
③ 结构冲突包括以下两种情况:第一种是同一个对象有不同的抽象,例如,“成绩”在某个E-R图中是实体,而在另一处为属性;第二种是同一个实体在两个局部E-R图中包含的属性个数不同,解决这类冲突可以用各局部E-R图中属性的并集作为该实体的属性。
3)对全局E-R图进行优化
全局E-R图在能够全面反映用户数据需求的情况下,还应该进行优化,使实体个数尽可能少,实体所包含的属性尽可能少,以及实体间的联系无冗余。
2.1.2 机器世界的数据模型
1.数据模型的构成
概念模型需要转换为数据模型才能被计算机处理。数据模型由数据结构、数据操作和数据完整性约束三部分组成,是严格定义的一组概念的集合,这些概念精确地描述了数据模型的特性。
(1)数据结构:是数据模型中最重要的部分,说明了数据模型的静态特性。它对所关心的数据对象的类型、内容、性质,以及数据对象之间的相互关系进行描述,规定了如何把基本的数据项组织成较大的数据单位。
(2)数据操作:说明了数据模型的动态特性。它描述数据模型中数据对象的实例允许执行的操作的集合,包括操作及其有关的操作规则。数据库中的操作主要有检索和更新两大类。数据模型需要定义这些操作的确切含义、操作符号、操作规则及实现操作的语言。
(3)数据完整性约束:是对数据模型中数据取值及数据取值变化时的制约关系的描述。它是一组数据完整性约束规则的集合,用于保证数据库中数据的正确、有效和相容。
2.常用数据模型
数据模型通常根据它的数据结构类型来命名,先后出现了网状模型、层次模型、关系模型、面向对象模型等,以相应模型为基础实现的数据库即为网状数据库、层次数据库、关系数据库、面向对象数据库等。
(1)网状模型:将实体之间的联系描述为图,如图2.5(a)所示,实体间可任意连接,查询比较灵活,但操作复杂。美国通用电气(GE)公司开发的网状数据库Integrated Data Store(IDS)是数据库的先驱,它的发明人Charles Bachman于1973年获得图灵奖。
(2)层次模型:将实体之间的联系描述为树状,如图2.5(b)所示,数据查询只能沿着“父→子”路径进行,描述简洁但查询效率低。国际商业机器(IBM)公司开发的层次数据库Information Management System(IMS)是最早的商用数据库。
(3)关系模型:实体用“二维表”(这种表在数学上称为关系)来描述,如图2.5(c)所示,将实体间的联系通过表的公共属性来表达。它简单灵活、数据独立性高。IBM公司的System R、加州大学伯克利分校的Ingres,以及目前广泛应用的Oracle、SQL Server、MySQL等都是关系数据库。关系模型的理论奠基人Edgar Frank Codd于1981年获得图灵奖。
图2.5 几种数据模型结构示例
3.“e学习”系统数据库的关系模型
根据图2.4中的E-R图可以得到“e学习”系统数据库的关系模型(见图2.6),除了将7个实体转换为7个关系表,还将两个多对多联系分别转换为单独的表,即:将学生和课程的联系转换为选课表,将学生和测试题的联系转换为答题表。
图2.6 “e学习”系统数据库的关系模型示意图