数据模型是数据库系统的核心,了解数据模型的基本概念是学习数据库的基础。
数据模型是对现实世界数据特征的模拟和抽象。它分为两个阶段:由现实世界到信息世界再到计算机世界。人们将客观世界称为现实世界;现实世界经过人们头脑中的抽象转换为信息世界,信息世界中的信息可以用文字或符号记载下来;在信息世界基础上人们对信息进行整理并以数据的形式存储在计算机中形成计算机世界,如图6-3所示。
图6-3 三个世界的联系
数据模型是数据库系统的核心和基础,而一个好的数据模型要满足三个方面的要求:一是比较真实地表示现实世界;二是容易被人们理解;三是便于在计算机上实现。要找到一种完全满足这三方面要求的数据模型是比较困难的,因此实际的做法是针对不同的抽象层次和使用目的,选用不同的数据模型。
根据不同的抽象层次,数据模型分为以下三类。
(1)概念数据模型:又称概念模型,它是整个数据模型的基础。它是按用户的观点将数据模型化,是信息世界中数据特征的描述,可以看作是从用户角度所见到的数据库。这种模型不依赖于具体的计算机系统,主要用于数据库的设计,是用户和设计人员之间交流的工具。最常用的一种概念模型是实体-联系(E-R)模型。
(2)逻辑数据模型:又称数据模型。它是按计算机观点将数据模型化,是机器世界中数据之间关系及操作的描述。数据模型一般由概念模型转换得到。常用的数据模型有层次模型、网状模型、关系模型、面向对象模型等。
(3)物理数据模型:又称物理模型。它是物理层次的数据模型,此模型描述了数据在存储介质上的组织结构。大部分物理模型的实现由DBMS自动完成。
图6-4表示了以上三种数据模型在数据库设计过程中的顺序。
数据模型所描述的内容包含三个部分:数据结构、数据操作与数据约束,通常称为数据模型的三要素。
图6-4 三类数据模型
数据库中的数据是有结构的,数据结构主要描述数据对象及数据之间的联系等,它反映了系统的静态特征。在数据库中,数据结构是数据模型的基础,数据操作和数据约束都建立在数据结构上。
数据操作主要描述在相应数据结构上的操作类型和操作方式,它反映了系统的动态特征,比如数据库中的插入、删除、修改、检索等操作。
数据约束是指对数据的一组完整性规则的集合,主要描述数据及其联系应具有的制约和依存规则,以保证数据的正确性、有效性与相容性。
概念模型是数据库设计过程中对现实世界特征的第一层次的数据抽象,它真实、充分地反映了现实世界中事物和事物之间的联系,独立于机器,很容易理解,设计人员可以用它和不熟悉计算机的用户交换意见,并且它很容易向层次、网状、关系等数据模型转换。因此设计人员在进行数据库设计时,把概念模型设计作为非常重要的一步。长期以来使用最为广泛的概念模型是Peter Chen(1976年)提出的实体-联系模型(Entity-Relationship model),简称E-R模型。
(1)实体(entity):现实世界中客观存在并可相互区别的事物称为实体,它是概念世界中的基本单位。实体可以是具体的人、事、物,也可以是抽象的概念或联系,例如张三、信息学院、张三选修高等数学、信息学院购买打印机等都是实体。
(2)属性(attribute):实体所具有的某一特性称为属性。一个实体可以有若干个属性,例如每个学生都具有学号、姓名、性别、出生年月、专业名称、入学时间、籍贯等属性。每个属性可以有值,比如(06063109,“穆木”,“男”,1989-10-28,计算机软件,2006-09-02,江苏省)就是一个确定的学生实体。而属性的取值范围称为该属性的值域(value domain)或值集(value set),例如性别属性的域为{男,女}。
(3)实体集(entity set):具有相同属性的实体组成的集合称为实体集。比如学生就是一个实体集。
(4)关键字(key):能唯一地标识实体集中每个实体的属性集合称为关键字。比如学号可以作为学生实体集的关键字。
(5)联系(relationship):现实世界中事物间的关联称为联系,这些联系在E-R模型中反映为实体之间的联系。联系分为实体集内部的联系和实体集之间的联系两种。实体集内部的联系指内部实体之间的联系(例如公司职工间上下级的管理关系),实体之间的联系指不同实体集实体之间的联系。实体集之间的联系可以分为三类:
一对一(one to one)的联系,简记为1∶1。对于实体集A中的每一个实体,实体集B中至多有一个(可以没有)实体与之联系,反之亦然。例如一个班级里有一个班长,每个班长只能负责一个班级的工作,班级与班长之间的联系就是一对一联系。
一对多(one to many)的联系,简记为1∶n。对于实体集A中的每一个实体,实体集B中有n个(n≥0)实体与之联系,反之,对于实体集B中的每一个实体,实体集A中至多有一个实体与之联系。例如一个班级里有若干个学生,而每个学生只能属于一个班级,班级与学生之间的联系就是一对多联系。
多对多(many to many)的联系,简记为m∶n。对于实体集A中的每一个实体,实体集B中有n个(n≥0)实体与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个(m≥0)实体与之联系。例如一门课程同时有若干个学生选修,而一个学生可以同时选修若干门课程,课程与学生之间的联系就是多对多联系。
E-R模型由实体、联系、属性三者组成。
实体(集):用矩形表示,在矩形内写上该实体集的名字。
联系:用菱形表示,在菱形内写上联系名。并用无项边分别与有关实体连接起来,并在无项边旁标上联系的类型(1∶1、1∶n或m∶n)。
属性:用椭圆形表示,并用无项边将其与相应的实体连接起来。
例如有教师、学生、班级、课程4个实体集,它们之间的联系有学生选课、教师讲课等,图6-5给出了这些实体及其联系的E-R模型。
图6-5 E-R模型示例图
在数据库设计时,总是先设计一个E-R模型,再将之转换为计算机能实现的某一种数据模型。目前最常用的数据模型有4种:层次模型、网状模型、关系模型、面向对象模型。
层次模型(Hierarchical Model)的结构是树形结构,如图6-6所示。
图6-6 层次模型示意图
在层次模型中,每个结点表示一个实体集,也称为记录型,结点之间的连线表示实体之间的联系。层次模型的特点是:有且仅有一个结点无双亲,这个结点就是根结点;其他结点有且仅有一个双亲。因此层次模型的基本联系是一对一、一对多的联系,对于实体之间的多对多联系,只有通过联系的分解与合成来实现。
层次模型结构简单,操作简单;对于实体间联系固定且预先定义好的应用系统,层次模型有较高的性能;提供了良好的完整性支持,例如进行插入操作时,如果没有相应的双亲结点就不能插入子女结点,进行删除操作时,如果删除双亲结点,相应的子女结点也被删除。
层次模型的缺点主要表现在两方面:一是只能表示一对多联系,虽然有其他辅助方法来实现多对多联系,但很麻烦;二是由于树形结构的层次顺序,对于数据的操作很复杂,限制很多,导致程序编写困难。
网状模型的结构采用网状无向图,如图6-7所示。
在网状模型中,每个结点代表一个实体集,它的特点是:可以有任意个结点无双亲;一个结点可以有一个以上的双亲;两个结点之间可以有多种联系。
图6-7 网状模型示意图
网状模型能更为直接地描述现实世界,如一个结点可以有多个双亲;具有良好的性能,存取效率高。而缺点是数据结构复杂;数据定义语言极其复杂,用户不容易使用;数据独立性较差。
关系模型的数据结构是一个二维表,在关系模型中,每一个实体集就是一张二维表,由n行m列组成,每一列代表实体的一个属性,第一行是各属性名构成的关系框架,其他行是各个记录值,一行称为一个元组,相当于一个实体。关系框架与关系元组构成一个关系,一个语义相关的关系集合构成一个关系数据库。表6-1、表6-2、表6-3分别表示学生表、课程表、学生选课情况表。
表6-1 学生表
学 号 |
姓 名 |
性 别 |
出生日期 |
所在系 |
入学日期 |
籍贯 |
20060609 |
孙英 |
女 |
1987.10.28 |
计算机 |
2006.9 |
扬州 |
20060426 |
周忡 |
男 |
1987.1.28 |
电子 |
2006.9 |
南京 |
…… |
…… |
…… |
…… |
…… |
…… |
…… |
表6-2 课程表
课程编号 |
课程名称 |
学 分 |
110601 |
计算机文化基础 |
2 |
110602 |
数据库原理 |
3 |
…… |
…… |
…… |
表6-3 学生选课情况表
学 号 |
课程编号 |
成 绩 |
20060609 |
110601 |
92 |
20060426 |
120603 |
86 |
…… |
…… |
…… |
在二维表中,用来唯一标识一个元组的某个属性或属性组合称为该表的键(Key)或码,也称关键字。如果一个表中存在多个键或码,就称它们为该表的候选键(Candidata Key)或候选码。在候选键中指定一个键作为用户使用的键称为主键(Primary Key)或主码,例如学生表中的学号、课程表中的课程编号、学生选课情况表中的(学号,课程编号)。如果表A中某个属性或属性组合虽然不是A表的主键,但却是B表的主键时,称该属性或属性组合为A表的外键(Foreign Key)或外码,例如学生选课情况表中的学号和课程编号。
二维表有以下性质:
(1)二维表中元组的个数是有限的。
(2)二维表中元组均不相同。
(3)二维表中元组的顺序可以任意交换。
(4)二维表中元组的分量是不可再分的数据项。
(5)二维表中属性名各不相同
(6)二维表中属性的顺序可以任意交换。
(7)二维表中属性的分量具有与该属性相同的值域。
满足以上7个性质的二维表称为关系,以二维表为基本结构所建立的模型称为关系模型。关系模型是现在最重要的一种数据模型,具有许多优点:结构简单、概念单一,无论是实体还是实体间的联系都用二维表表示,对数据进行检索的结果也是二维表;有数学理论作为依据,理论基础是关系代数;数据的存取路径对用户透明,数据独立性强。关系模型的缺点是查询效率不如非关系模型,因此为了提高性能,必须对查询进行优化。
面向对象模型是用面向对象的观点来描述现实世界中事物的逻辑结构和对象间联系的数据模型。
一系列面向对象的核心概念构成了面向对象模型的基础:对象、对象标识、类、封装、继承、多态等。面向对象模型能完整地描述现实世界的数据结构,但模型相对比较复杂,用面向对象模型组织的数据库称为面向对象数据库,具有检索效率高、与人类思维最接近等特点,是数据库技术发展的热点。