1.2 数据模型
数据(Data)是描述事物的符号记录;模型(Model)是现实世界的抽象;数据模型(Data Model)是数据特征的抽象,是数据库管理的数学形式框架。
数据模型由以下3个要素组成。
█ 数据结构:数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。
█ 数据操作:数据操作主要描述在相应的数据结构上的操作类型和操作方式。
█ 数据约束:数据约束主要描述数据结构内数据间的语法、词义联系,它们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
数据模型按不同的应用层次分成以下3种类型。
█ 概念数据模型(Conceptual Data Model):简称概念模型,即用简单、清晰、用户易于理解的概念来描述现实世界中具体事物及事物之间的关系,它是现实世界到信息世界的抽象,是数据库设计人员进行数据库设计的工具,与具体的数据库管理系统无关。此外,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。
█ 逻辑数据模型(Logical Data Model):简称逻辑模型,这是用户从数据库所看到的模型,是具体的DBMS所支持的数据模型,如网状数据模型(Network Data Model)、层次数据模型(Hierarchical Data Model)等。此模型既要面向用户,又要面向系统,主要用于数据库管理系统的实现。
█ 物理数据模型(Physical Data Model):简称物理模型,是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有其对应的物理数据模型。DBMS为了保证其独立性与可移植性,大部分物理数据模型的实现工作由系统自动完成,而设计者只设计索引、聚集等特殊结构。
在概念数据模型中最常用的是E-R模型、扩充的E-R模型、面向对象模型及谓词模型。在逻辑数据类型中最常用的是层次模型、网状模型、关系模型。数据库领域采用的数据模型有层次模型、网状模型和关系模型,其中应用最广泛的是关系模型。
1.2.1 概念模型
概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一DBMS支持的特定数据模型。
概念模型具有如下特点。
█ 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识;
█ 应用简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。
为了用信息来描述现实世界,需要了解一些信息世界中的基本概念,如下。
█ 实体(Entity):客观存在并可相互区别的事物称为“实体”。实体可以是具体的人、事、物,也可以是抽象的概念或联系。例如,一个雇员、一个学生、学生的一次选课、老师与系的工作关系等都是实体。
█ 属性(Attribute):实体所具有的某一特性称为“属性”。一个实体可以由若干个属性来刻画。例如,雇员实体可以由雇员编号、姓名、工作、部门负责人、薪资、部门等属性组成。(7369,SMITH,CLERK,7902,17-12月-80,800,20)这些属性组合起来表示了一个雇员。
█ 码(Key):唯一标识实体的属性或属性的集合称为“码”。
█ 域(Domain):属性的取值范围称为该属性的“域”。例如,雇员编号的域为4位整数,姓名的域为字符串集合,性别的域为(男, 女)。
█ 实体型(Entity Type):用实体名及其属性集合来抽象和刻画同类实体,称为“实体型”。例如,雇员(编号、姓名、工作、部门负责人、薪资、部门)就是一个实体类型。
█ 实体集(Entity Set):同型实体的集合称为“实体集”。
█ 联系(Relationship):现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。
常见的两个实体之间的关系分为“一对一”、“一对多”和“多对多”,具体介绍如下。
█ 一对一关联(1∶1)
如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之关联,反之亦然,则称实体集A与实体集B具有一对一关联,记为1:1。例如,假设一个部门只有一个部门经理,且一个部门经理只能任职于一个部门,则部门与部门经理之间只有一对一关联。
█ 一对多关联(1∶n)
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之关联,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之关联,则称实体集A与实体 B 有一对多关联,记为1:n。例如,一个部门中有若干雇员,且一个雇员只能就职于一个部门,则部门与雇员之间具有一对多关联。
█ 多对多关联(m∶n)
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之关联,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之关联,则称实体集A与实体B具有多对多关联,记为m:n。例如,一门课程同时有若干个学生选修,而一个学生可以同时选修多门课程,则课程与学生之间具有多对多关联。
实体之间关系如图1-2所示。
图1-2 两个实体型之间的3种关联关系
实体型之间的一对一、一对多、多对多联系不仅存在于两个实体型之间,也存在于两个以上的实体型之间。同一个实体集内的各实体之间也可以存在一对一、一对多、多对多的联系。
概念模型是对信息世界建模,所以概念模型应该能够方便、准确地表示出上述信息世界中的常用概念。概念模型的表示方法很多,其中最为著名、最为常用的是P.P.S.Chen于1976年提出的实体—联系方法(Entity-Relationship Approach)。该方法用E-R图来描述现实世界的概念模型,E-R方法也称为“E-R模型”。
E-R图提供了表示实体、属性和联系的方法,如图1-3所示。
图1-3 E-R方法的图形元素
在图1-3中,各个图形元素所表示的含义是:
█ 实体:用矩形表示,矩形框内写明实体名;
█ 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;
█ 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n、m:n)。
以班级、课程与学生为例,E-R图如图1-4所示。
图1-4 班级、课程与学生E-R图示例
由矩形、椭圆形、菱形以及按一定要求相互连接无向线构成了一个完整的E-R图。用E-R图表示的概念模型独立于具体的DBMS所支持的数据模型,它是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。
在概念上,概念模型中的实体、属性与联系是3个有明显区别的不同概念。但是在分析客观世界的具体事物时,对某个具体数据对象,究竟它是实体还是属性或联系,则是相对的,所做的分析设计与实际应用的背景以及设计人员的理解有关。这是工程实践中构造E-R图的难点之一。
1.2.2 逻辑数据模型
当前流行的逻辑数据模型有4种,即层次模型(Hierarchical Model)、网状模型(Network Model)、关系模型(Relational Model)和面向对象模型(Object Oriented Model)。它们的区别在于记录之间联系的表示方式不同。其中,关系模型是目前应用最为广泛的数据模型,目前绝大多数数据库管理系统的数据模型都是关系模型。
1. 层次模型
层次模型是数据库系统中最早使用的模型,它的数据结构类似一棵倒置的树,每个节点表示一个记录类型,记录之间的联系是一对多的联系,基本特征是:
█ 一定有且只有一个位于树根的节点,称为根节点;
█ 一个节点下面可以没有节点,即向下没有分支,那么该节点称为“叶节点”;
█ 一个节点可以有一个或多个节点,前者称为“父节点”,后者称为“子节点”;
█ 同一父节点的子节点称为“兄弟节点”;
█ 除根节点外,其他任何节点有且只有一个父节点。
层次模型示例如图1-5所示。
图1-5 层次模型示例
层次模型中,每个记录类型可以包含多个字段,不同记录类型之间、同一记录类型的不同字段之间不能同名,如果要存取某一类型的记录,就要从根节点开始,按照树的层次逐层向下查找,查找路径就是存取路径,如图1-6所示。
图1-6 层次模型
层次模型结构简单,容易实现,对于某些特定的应用系统效率很高,但如果需要动态访问数据(如增加或修改记录类型),效率并不高。另外,对于一些非层次性结构(如多对多联系),层次模型表达起来比较烦琐而且不直观。
2. 网状模型
网状模型可以看作是层次模型的一种扩展。它采用网状结构表示实体及其之间的联系。网状结构的每一个节点代表一个记录类型,记录类型可包含若干字段,联系用链接指针表示,去掉了层次模型的限制。网状模型的特征是:
█ 允许一个以上的节点没有父节点;
█ 一个节点可以有多于一个的父节点。
例如,图1-7(a)和图1-7(b)都是网状模型的例子。图1-7(a)中节点3有两个父节点,即节点1和节点2;图1-7(b)中节点4有两个父节点,即节点1和节点2。
图1-7 网状模型的几个例子
由于网状模型比较复杂,一般实际的网状数据库管理系统对网状都有一些具体的限制。在使用网状数据库时有时候需要一些转换。例如如图1-8所示的网状模型。
图1-8 转换后的学生、课程和选课的网状模型
网状模型与层次模型相比,提供了更大的灵活性,能更直接地描述现实世界,性能和效率也比较好。网状模型的缺点是结构复杂,用户不易掌握,记录类型联系变动后涉及链接指针的调整,扩充和维护都比较复杂。
3. 关系模型
关系模型是目前应用最多、也最为重要的一种数据模型。关系模型建立在严格的数学概念基础上,采用二维表格结构来表示实体和实体之间的联系,二维表由行和列组成。下面以教师信息表和课程表为例,说明关系模型中的一些常用术语,如表1-2和表1-3所示。
表1-2 教师信息表(表名为:tea_info)
表1-3 课程表(表名为:cur_info)
█ 关系(或表):一个关系就是一个表,如上面的教师信息表和课程表;
█ 元组:表中的一行为一个元组(不包括表头);
█ 属性:表中的一列为一个属性;
█ 主码(或关键字):可以唯一确定一个元组和其他元组不同的属性组;
█ 域:属性的取值范围;
█ 分量:元组中的一个属性值;
█ 关系模式:对关系的描述,一般表示为:关系名(属性1, 属性2, ……, 属性n);
关系模型的基本特征是:
█ 建立在关系数据理论之上,有可靠的数据基础;
█ 可以描述一对一、一对多和多对多的联系;
█ 表示的一致性,实体本身和实体间联系都使用关系描述;
█ 关系的每个分量的不可分性,也就是不允许表中表。
关系模型概念清晰、结构简单,实体、实体联系和查询结果都采用关系表示,用户比较容易理解。另外,关系模型的存取路径对用户是透明的,程序员不用关心具体的存取过程,减轻了程序员的工作负担,具有较好的数据独立性和安全保密性。
关系模型也有一些缺点,在某些实际应用中,关系模型的查询效率有时不如层次和网状模型。为了提高查询的效率,有时需要对查询进行一些特别的优化。
4. 面向对象模型
面向对象模型是采用面向对象的观点来描述现实世界中实体及其联系的模型,现实世界中的实体都被抽象为对象,同类对象的共同属性和方法被抽象为类。面向对象模型有如下的常用术语。
█ 对象
对象是现实世界中某个实体的模型化。每个对象都有一个唯一标识符,称为“对象标识”(Object Identity)。图1-9中,学生对象的对象标识为学号“120021”。对象还包括属性集合(描述对象的状态、组成和特征)、方法集合(描述对象的行为特征和实现)和消息集合(对象操作请求的传递)。
图1-9 一个学生对象
█ 类
类是具有相同结构对象的集合。类是一个抽象的概念,对象是类的实例,如图1-10所示,李勇和小梅是学生类的具体实例。
图1-10 类和对象的关系
█ 封装
封装是一种面向对象的技术,通过封装可以把对象的某些实现与外界隔离,这样一方面可以使外部的应用简化,不用关心具体的实现;另一方面提高数据的独立性,内部的修改不会影响到外部的应用,提高了数据的独立性,如图1-11所示。
图1-11 对象封装示意图
█ 继承
面向对象模型的一个特色是可以实现继承。在现实世界中,有许多事物具有密切相关的层次关系。面向对象模型提供了建立类结构层次的功能,可以定义一个类的子类,形成树形结构,如图1-12所示。
图1-12 类的继承
面向对象模型是一种接近现实世界、很自然的模型,可以定义复杂数据关系。由于具有继承特性,面向对象模型提供了快速创建各种变种记录类型的能力。面向对象模型的缺点是查询功能相对比较弱。