1.2 数据模型及应用
对于现实世界中的具体事物,计算机是无法直接存储和处理的。要实现对事物的计算机处理,需要按照一定的方式来组织和管理数据,也就是要有一个数据模型来描述数据、组织数据和对数据进行操作。数据模型是对现实世界数据特征的抽象,也可以理解为数据模型是对现实世界的模拟。数据库系统要实现对数据的组织和管理,必须基于某种数据模型。数据模型是数据库的核心和基础。所以,学习数据模型的基本概念和理论是十分必要的。
1.2.1 数据模型的概念和类型
1.数据模型的基本概念
数据模型是对现实世界的模拟,用来描述数据是如何组织、存储和操作的。要将现实世界中具体事物及其之间的联系转换为计算机能够管理的数据,需要基于某种数据模型对这些信息进行抽象、描述和表示。现实世界中的数据要转换成为抽象的数据库数据,需要经过以下几个阶段:现实世界、信息世界和机器世界。其转换过程如图1-5所示。
图1-5 数据抽象的转换过程
1)现实世界。指客观存在的现实世界中的事物(实体)及其联系。
2)信息世界。基于某种数据模型完成对现实世界事物的抽象描述,也就是按用户的观点对数据和信息进行建模(概念模型—实体与联系)。
3)机器世界。是对数据最低层的抽象,主要描述数据在系统内部的表示方式和存储方法,在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。
数据模型(Data Model)是数据结构和特征的抽象描述(表示),是数据处理的关键和基础。用于对现实世界中的数据特征的抽象、表示和处理,DBMS的实现都是建立在某种数据模型基础上的。
2.数据模型的组成要素
数据模型是严格定义的一组结构、操作规则和约束的集合,描述了系统的静态特性、动态特性和完整性约束条件。数据模型由三要素组成:数据结构、数据操作和完整性约束。
1)数据结构。数据结构用于描述数据库的组成对象及对象之间的联系,是所研究的对象类型的集合,是对系统的静态特性的说明。其描述内容包括两类:一是与数据类型、内容及性质有关的对象,如关系模型(表状结构)中的域、属性和关系等;二是与数据之间的联系有关的对象。
数据结构是描述一个数据模型性质最重要的方面。在数据库系统中,通常按照其数据结构的类型命名数据模型。如将层次结构、网状结构和关系结构的数据模型分别命名为层次模型、网状模型和关系模型。
2)数据操作。用于描述系统的动态特性,是对数据库中的各种对象(型)的实例(值)允许执行的操作的集合,包括操作及其有关规则。对数据库的操作主要有数据维护和数据检索两大类,这是任何数据模型都必须规定的操作,包括操作符、含义和规则等。
3)数据的约束条件。是一组完整性规则的集合。完整性规则是给定的数据模型中的数据及其联系所具有的制约和依存规则(条件和要求),用于限定符合数据模型的数据库状态及状态的变化,以保证数据的正确、相容和有效。
3.数据模型的类型
数据模型按应用层次可分为概念数据模型、逻辑数据模型和物理数据模型。
1)概念模型(Conceptual Data Model)。也称信息模型,是面向数据库用户的实现世界的模型。主要用于描述事物的概念化结构,使数据库的设计人员在设计初期避开计算机系统及DBMS具体技术问题,以图形化方式分析表示事物(实体)的数据特征(属性)及其之间的联系等,最常用的是实体联系模型(E-R图),具体见1.2.2节中的介绍。
2)逻辑模型(Logical Data Model)。是逻辑数据模型的简称,是以计算机系统的观点对数据进行建模,是直接面向数据库的逻辑结构,是对客观现实世界的第二层抽象,是具体的DBMS所支持的数据模型,如网状模型、层次模型和关系模型等。逻辑模型既要面向用户又要面向系统,主要用于DBMS实现。具体将在1.2.3节中进行介绍。
3)物理模型(Physical Data Model)。是面向计算机物理表示的模型,描述数据在储存介质的组织结构,既与具体DBMS有关,也与操作系统和硬件有关。各种逻辑模型在实现时都有对应的物理模型,DBMS为了保证其独立性与可移植性,大部分物理模型的实现工作由系统自动完成,而设计者只负责索引、聚集等特殊结构。
1.2.2 概念模型的相关概念及表示方法
1.概念模型的基本概念
概念模型是现实世界到信息世界的第一层抽象,是数据库设计人员与用户之间的交流语言,只需考虑领域实体的属性和关系,要求语义表达能力强且简单清晰、易于理解。
(1)实体的有关概念
1)实体(Entity)是现实世界中可以相互区别的事物或活动。如一个学生、一门课程、一本书或一个订单等。
2)实体集(Entity set)是同一类实体的集合。如一个班级的全体学生、一个企业的全部员工或一年中的所有会议等。
3)实体型(Entity type)是对同类实体共同特征和性质的抽象刻画。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)就是一个实体型。对于同一类实体,根据人们的不同认识和需要,可能抽取出不同的特征,从而定义出不同的实体型。
4)实体值(Entity value)是符合实体型定义的、某个实体的具体描述(值)。
【案例1-3】教师的实体型可用(工号,系部编号,姓名,性别,年龄,职称,所在院系)表示,则(A312,B3215,周明,男,43,教授,信息学院网络工程)就是一个实体值,实体是指现实世界中的具体对象,如教师周明。在表1-1教师信息表中,第1行规定了客户的实体型,从第2行开始的以下各行为该实体型的取值。
表1-1 教师信息表
(2)联系的有关概念
1)联系(Relationship)是指现实世界中事物内部及事物之间的联系,如学生与课程之间的选课关系、学生与图书之间的借阅关系和学生之间的同学关系。
2)联系集(Relationship Set)是同类联系的集合。如一次展销会上的全部订单、一次会议安排的全部活动、一项比赛的所有场次或一个班级学生的所有选课等。
3)联系型(Relationship Type)是对同类联系共有特征的抽象定义。
4)联系值(Relationship Value)是对同类联系型定义的、某个联系的具体描述(值)。
【案例1-4】对于学生“借阅”联系,联系型可以包括(卡号,ISBN,是否续借,借书日期,还书日期)等属性,其中卡号和ISBN分别对应“图书卡”实体和“图书”实体。在表1-2学生借阅表中,第1行为借阅联系的型,其后各行为借阅记录,即借阅联系型的值。
表1-2 学生借阅表
(3)属性、键和域
属性(Attribute)用于描述实体或联系中的一种特征(性)。一个实体或联系通常具有多个(项)特征,需要用多个相应的属性来描述。实体选择的属性由实际应用需要决定,并非一成不变。如对于人事和财务部门都使用职工实体,但每个部门所涉及的属性不同,人事部门关心的是职工号、姓名、性别、出生日期、职务、职称和工龄等属性,财务部门关心的是职工号、姓名、基本工资、岗位津贴、内部津贴和交通补助等属性。
键(key)或称码、关键字、关键码等,是区别实体的唯一标识,如学号、身份证号、工号或电话号码等。一个实体可以存在多个键。如在职工实体中,若包含职工编号、身份证号、姓名、性别和年龄等属性,则职工编号和身份证号均可作为是键。
实体(关系表)中用作键的属性称为主属性(Main Attribute),否则称为非主属性(nonmain attribute)。如在职工实体中,职工编号为主属性,其余为非主属性。
域(domain)是一组具有相同数据类型的值的集合。实体中属性的取值范围往往来自某个域。如姓名的属性域为字符串,性别属性域为(男,女)。
(4)实体型之间联系的分类
实体型之间的联系按照联系中实体的个数可分为以下3种情况:两个实体型之间的联系、两个以上实体之间的联系和单个实体型内的联系。上述3种情况中,按照一个实体型中的实体个数与另一个实体型中的实体个数的对应关系,均可分类为一对一联系、一对多联系和多对多联系这3种类型。
1)一对一联系。若实体集A中的每一个实体,实体集B中至多有一个(可没有)实体与之联系,反之亦然,则这两个实体集之间的联系被定义为一对一联系,简记为1:1。一对一联系可以在两个实体之间,如班长与班级之间具有一对一联系;也可以同一实体之间,如职员之间的“配偶”联系,可表示为配偶(丈夫职工号,妻子职工号)。
2)一对多联系。若实体集A的任一实体,实体集B中有n个实体(n≥0)与之联系,反之,对实体集B中的任一实体,实体集A中至多有一个实体与之联系,则这两个实体集之间存在一对多联系,简记为1:n。一对多联系可在两个及两个以上实体型之间,也可以在同一实体型之间,如企业和客户之间的联系为两个实体之间的一对多联系;如在一个职工表中领导与被领导之间的关系为同一实体内的一对多联系。
3)多对多联系。若实体集A的任一实体,实体集B中有n个实体(n≥0)与之联系,反之,对实体集B中的任一实体,实体集A中也有m个实体(m≥0)与之联系,则这两个实体集之间存在多对多联系,简记为m:n。
【案例1-5】学生与所选课程之间为多对多联系,每个学生允许选修多门课程,每门课程允许由任何学生选修。表1-3为学生实体,表1-4为课程实体,图1-6所示为选课联系。
表1-3 学生表
表1-4 课程表
图1-6 选课联系图
由图1-6可知每个学生所选修的课程,每门课程由哪些学生所选修。
2.概念模型及其表示方法
1976年,由美籍华人Peter Pin-Shan Chen提出的实体联系模型(Entity relationship model)也称E-R模型或E-R图(实体-联系方法),是描述现实世界中事物及其联系的概念模型,该模型提供了表示实体类型、属性和联系的方法,是数据库设计者与普通用户进行数据建模和交流沟通的有效工具,其特点为简单易用、直观易懂。
(1)E-R模型的构成要素
E-R模型是一种用E-R图表示实体及其联系的方法。E-R图包含4种基本元素:矩形、菱形、椭圆形和连接线。矩形表示实体,矩形框内写上实体名;菱形表示联系,菱形框内写上联系名;椭圆形表示属性,椭圆形框内写上属性名;连接线表示实体、联系与属性之间的所属关系或实体与联系之间的相连关系。
(2)实体联系的E-R图表示
两个实体之间的3种联系包括:一对一、一对多和多对多,对应的E-R图如图1-7所示。为了表示的简洁性,每个实体并没有画出其属性及属性实体间的连接线。
图1-7 3种联系的E-R图
若联系的两个实体均来自于同一个实体型,则对应的E-R图如图1-8所示。
图1-8 3种联系的单实体的E-R图
实际项目中,多个实体相互联系的情况经常发生。如供应商为多个项目供应零件的联系中,涉及供应商、零件和项目三者的关系,供应商可以同时为多个项目提供多个零件。同理,一个项目中可能需要多个供应商协作才能完成,一个零件可能有多个供应商,供应商、项目和零件三者中两两之间存在多对多的联系,其E-R图如图1-9所示。
图1-9 供应商联系的E-R图
(3)E-R模型应用案例
实际的数据库设计过程中,首先要进行需求分析,确定存储哪些数据、建立哪些应用和哪些操作;然后是根据需求分析所得到的数据进行更高层抽象,这时需要引入E-R图来描述实体之间的联系。下面以库存系统为例,详细说明E-R图的用法。
【案例1-6】库存系统E-R图示例。通过需求分析,库存系统涉及以下实体:车间、产品、仓位、客户和销售员等;设计车间产品入库、产品出库、产品存储和客户通过销售进行订货等联系。库存系统对应的E-R图如图1-10所示。
下面对库存系统中实体涉及的属性进行简要描述:车间(车间号,车间名,车间主任姓名),产品(产品号,产品名,价格),仓位(仓位号,地址,联系人,联系电话),客户(客户编号,客户名,联系人,电话,地址,税号,账号),销售员(销售员编号,姓名,性别,学历,业绩,联系电话)。
图1-10 库存系统E-R图
库存系统中比较复杂的是入库、出库等联系的描述和定义,下面对上述联系进行逐一说明:入库(入库单号,入库量,入库日期,经手人,车间号,仓位号,产品号),出库(出库单号,出库量,出库日期,经手人,客户编号,产品号,仓位号),订单(订单号,数据,折扣,总价,订单日期,产品号,客户号,销售员编号),存储(仓位号,产品号,核对日期,核对员,存储量)。
说明:“订单”联系对应的实体的两个销售员和客户之间的关系是多对多的联系,每个客户可以通过不同的销售员订货,同样一个销售员可以为多个客户提供销售服务。“存储”联系也是多对多的关系,同一类产品可以存储在多个仓位,一个仓位可以存储多种产品。同理,“入库”和“出库”联系也是多对多的关系,在此不再赘述。
1.2.3 逻辑模型概述
目前,数据库领域中最常用的逻辑数据模型有层次、网状、关系和面向对象这4种类型。其中,层次模型是数据库系统中最早出现的数据模型,产生于20世纪60年代。层次模型的典型代表为IBM公司的IMS数据管理系统。
1.层次模型
(1)层次模型的结构
层次模型(Hierarchical Model)用树形结构来表示现实世界中的实体和实体之间的联系。有且只有一个没有双亲的根结点,其余结点为其子孙结点。除根结点外,每个结点有且仅有一个父结点(也称双亲结点),可有零个、一个或多个子结点,有零个子结点的结点称为叶;同一双亲的子女结点称为兄弟结点。每个结点表示一个记录类型,即概念模型中的一个实体型,每对结点的父子联系为一对多联系,只有一个子女时表示一对一联系。
图1-11所示为一个描述某学院信息工程系组织结构的层次模型。信息工程系为根结点,下设4个专业,软件技术专业有两个子结点(班级),其中软件技术、计算机应用、网络技术和信息安全互为兄弟结点,软件131和软件132为叶子结点。
(2)层次模型的优缺点
层次模型的优点主要有:首先,由于现实世界中的实体之间的联系自然呈现为层次关系(一对多的联系),表示一对多时结构简单清晰;其次,层次结构查询效率高,主要原因是DBMS指针效率高。其主要缺点表现在:表示多对多的联系时比较笨拙;查询子女结点时必须通过双亲结点,对效率有一定的影响。由于现实世界中事物之间的联系更多地表现为非层次关系,用层次模型表示非树形结构很不方便,网状模型可以克服这一问题,于是产生了网状模型。
2.网状模型
(1)网状模型的结构
网状模型(Network Model)是对层次模型的扩展,允许一个以上的结点无双亲,同时也允许一个结点可以有多于一个的双亲。层次模型为网状模型中的一种最简单的情况。图1-12所示为几个企业和生产零件的网状模型。
在网状模型中,父子结点联系同样隐含为一对多的联系,每个结点代表一种记录型,对应概念模型中的一种实体型。
图1-11 系部专业班级结构的层次模型
图1-12 网状模型示例
(2)网状模型的优缺点
网状模型优点主要有:能比较直接地表示现实世界,如一个结点有多个双亲的情况;性能良好,有较高的存取效率。其主要缺点体现在:结构复杂,用户掌握困难;数据定义和数据操作需嵌入高级语言,用户掌握难度大。
3.关系模型
1970年,美国IBM公司的研究员E.F.Codd首次提出了数据库系统的关系模型,开创了数据库关系方法和关系数据库理论的研究,为数据库技术的发展奠定了理论基础。因其杰出的工作,于1981年获得ACM图灵奖。
关系模型是目前最重要的一种数据模型,关系型数据库管理系统采用关系模型作为数据组织方式。关系模型建立在严格的数学概念基础之上,结构简单、清晰,用户容易理解和使用。
(1)关系模型的概念
关系模型(Relational model)是一张规范化的二维表,其模型中每个实体和实体之间的联系都可直接转换为对应的二维表形式。每个二维表称为一个关系,其中关系的型由二维表的表头进行规定,除表头外,表中的每一行为关系的值。二维表中的每一行称为一个元组,二维表中的每一列数据称为属性,为每一列起一个名称,即属性名。
【案例1-7】表1-5所示为一个商品关系。该关系的型为(商品ID,商品名称,价格,品牌,型号,颜色,生产商,产地),关系的元组数为5,关系的属性数为8,其中第一列的属性名为“商品ID”。属性的取值范围称为属性的域,如价格属性的域为实型数,商品名称的域为字符型。
表1-5 一个商品关系示例
(2)关系模型应用案例
关系模型可简便地表示概念模型中的实体和类型的联系,对应某个关系,包括相联系的各实体的键。如表1-3、表1-4和图1-6所表示的学生、课程及选课联系,对应的关系模型包含3个关系,包括学生关系、课程关系和选课联系,选课联系所对应的关系如表1-6所示,在此对选课联系增加了成绩属性,其语义是学生选修课程的成绩。
表1-6 选课联系的关系表
(3)关系模型的优缺点
关系数据模型的优点如下。
1)有比较坚实的数学理论基础。关系模型与非关系模型不同,它建立在严格的数学概念基础之上。自从E.F.Codd首次提出了数据库系统的关系模型后,大量学者对该课题进行了研究,有完整的关系代数和集合论理论基础。
2)数据结构简单,易用易懂。关系模型中的实体及其之间的联系均由关系表示,数据检索和更新结果也是关系,有很好的概念一致性,为用户理解和使用该模型带来了很大便利。
3)数据存取路径对用户透明,有较好的数据独立性和数据安全性,这种机制也简化了数据库建库和程序员的开发工作。
4)查询与处理方便。在关系模型中,数据的操作较非关系模型方便,它的一次操作不只是一个元组,还可以是一个元组集合。特别在高级语言的条件语句配合下,一次可操作所有满足条件的记录。
5)数据独立性高。在关系模型中,用户对数据的操作可以不涉及数据的物理存储位置,而只需给出数据所在的表、属性等有关数据自身的特性即可,具有较高的数据独立性。
关系模型存在的缺点:一是查询效率较格式化数据模型低。关系模型的数据库管理系统提供了较高的数据独立性和非过程化的查询功能,因此系统的负担很重,直接影响查询速度和查询效率。二是关系数据管理系统实现较难。由于关系数据库管理系统的效率比较低,必须对关系模型的查询进行优化,这一工作相当复杂,实现难度比较大。不过,对用户来说,这些优化细节无须考虑。
【案例1-8】关系模型在空间数据表示的局限性。空间数据是指面向地理学及其相关对象的信息,主要包括地球表面、地质和大气等信息,这些数据具有数据量庞大、数据对象复杂和空间数据模型复杂等特点,关系模型仅针对简单对象,在表示上述数据时显得力不从心。
因此,关系模型的二维表结构很难实现对空间复杂对象的描述,无法有效地管理复杂的地理对象,为了解决空间数的存储与管理问题,产生了空间数据库(空间数据库是以描述、存储、查询和处理空间数据为特色的专用数据库)。
*4. 面向对象模型
面向对象模型(Object-Oriented Model,OOM)是以面向对象的观点描述实体的逻辑组织、对象间限制和联系的模型。将客观事物(实体)都模型化为一个对象,每个对象有一个唯一标识。共享同样属性和方法集的所有对象构成一个对象类(简称类),而一个具体对象就是某一类的一个实例。请见第11章中的相关介绍。将面向对象的建模能力和关系数据库的功能结合进行研究,使面向对象的关系数据库技术成为一个研究方向。
(1)面向对象的基本思想
面向对象的基本概念萌芽于20世纪70年代,它的基本方法是将系统工程中的模块和构件视为问题空间的一个(类)对象。20世纪80年代其方法得到快速发展,广泛应用于系统工程、计算机和人工智能等领域,20世纪90年代在更高层次和更广领域进行研究。
面向对象的基本思想为:主要通过对问题域的自然分割,以更接近人的思维方式建立问题域的模型,并进行结构模拟和行为模拟,从而使设计的软件能尽可能地直接表现出问题的求解过程。面向对象方法以接近人类思维方式的思想,将客观世界的实体模型化为对象。每一种对象都有各自的内部状态和运动规律,不同对象之间相互作用和联系构成各种不同的系统。一切皆对象,万物皆对象。
(2)面向对象的基本特性
面向对象方法的特性包括抽象性、封装性、继承性和多态性等。
1)抽象性。抽象是忽略对象中与主旨无关或是暂时不关注的部分,只关注其核心属性和行为,如研究天体运动时将太阳、地球和月亮抽象为质点。抽象是具体到一般化的过程。抽象使对象具有一般的属性和行为,可做到数据与逻辑的有机结合。抽象最终的目的是实现事物的分类,将一类事件抽象为对象类。如将黑白电视机、彩色电视机和液晶电视机抽象为电视机。
2)封装性。封装是利用抽象数据类型将数据和操作封装在一起,使数据被保护在抽象数据类型的内部,系统其他部分只能通过被授权的操作与抽象数据类型交互。这里的抽象数据类型一般指“类”。封装的目的在于将对象的使用者和对象的设计者分开,用户只能见到对象封装界面上的信息,其内部对用户是隐蔽的。封装特性把类内的数据保护起来,模块与模块间仅通过严格控制的界面进行交互,这种机制类之间的耦合和交叉大大减少,从而降低了开发过程的复杂性,提高了效率和质量,减少了可能的错误。
3)继承性。继承是现实世界中遗传关系的直接模拟。继承是指一类对象可继承另一类对象的特性和能力。子类继承父类的共性,继承不仅可以把父类的特征传给中间子类,还可以向下传给中间子类的子类。继承服务于概括,继承机制减少了代码冗余,减少了相互间的接口和界面。继承一般分为单类继承和多类继承。
4)多态性。多态是指同一消息被不同对象接收时,可解释为不同的含义。因此,可以发送更一般的消息,将实现的细节都留给接收消息的对象。即相同的操作可作用于多种类型的对象,并能获得不同的结果。
(3)面向对象数据模型的核心技术
1)分类。类是具有相同属性和行为的对象的集合,属于同一类的对象具有相同的属性和行为。分类是将一组具有相同属性和行为的对象归纳或映射为一个公共类的过程。对象和类的关系是“实例”(instance-of)的关系。同一类中的多个对象,同一类中所有对象的操作都相同。属性结构即属性的表现形式相同,但具有不同的属性值。在面向对象的数据库中,只需对每个类定义一组操作,供该类中的每个对象使用,由于每个对象的属性值不完全相同,对类中每个对象的属性值要分别存储。
2)概括。是将几个类中某些具有部分公共特征的属性和操作方法的抽象,形成一个更高层次、更具一般性的超类的过程。子类和超类用来表示概括的特征,表明其之间的关系是“即是”(is-a)关系,子类是超类的一个特例。
3)聚集。是将几个不同类的对象组合成一个更高级的复合对象的过程。“复合对象”用于描述更高层次的对象,“部分”或“成分”是复合对象的组成部分,“成分”与“复合对象”的关系是“部分”(parts-of)的关系,反之“复合对象”与“成分”的关系是“组成”的关系。例如,学校由学生、教师、管理人员和校区等对象聚集而成。
4)联合。是将同一类对象中几个具有部分相同属性值的对象组合起来,形成一个更高水平的集合对象的过程。以术语“集合对象”描述由联合而构成的更高水平的对象,具有联合关系的对象称为成员,成员与集合对象的关系是“成员”(member-of)的关系。
5)消息。消息是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。消息通常由3部分组成:接收消息的对象名称、消息名和参数(零个或多个)。消息使对象具有交互能力。通常来说,消息是类的一个方法界面,其规定了消息传递的格式和范围,对象之间只能通过预先定义好的方法和参数进行消息传递,实现对象之间的交互。
5.4种模型的比较
为了更清晰地了解以上4种模型,从产生时间、数据结构和数据联系等方面进行比较,如表1-7所示。
表1-7 逻辑数据模型的比较
讨论思考:
1)什么是数据模型?数据模型的组成要素是什么?
2)E-R图的基本构件有哪些?E-R图在信息系统项目中起什么作用?
3)数据模型的种类有哪些?它们各自有什么特点?