数据库原理及应用(MySQL版·在线实训版)
上QQ阅读APP看书,第一时间看更新

1.3 数据模型

数据模型(Data Model)是对现实世界的数据和信息的模拟和抽象,用来描述数据、组织数据和对数据进行操作。现有的数据库系统均是基于某种数据模型的,数据模型是数据库系统的核心和基础。

1.3.1 数据模型的组成要素

数据模型通常由数据结构、数据操作和数据的完整性约束3个要素组成。

1.数据结构

数据结构用于描述系统的静态特征,是对数据库的组成对象以及对象之间关系的描述。数据结构规定了如何描述数据的类型、内容、性质和数据之间的关系等。数据结构是刻画数据模型性质最重要的方面,是数据模型的基础。因此,在数据库系统中,人们通常按照数据结构的类型来命名数据模型。例如,将层次结构、网状结构和关系结构的数据模型分别命名为层次模型、网状模型和关系模型。

2.数据操作

数据操作用于描述数据库系统的动态特征,是指数据库中各种对象所允许执行的操作及其规则的集合。数据库主要有检索和更新(包括插入、删除、修改)两大类操作。数据模型必须定义操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言。

3.数据的完整性约束

数据的完整性约束是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据正确、有效和相容。

数据模型应该反映和规定自身必须遵守的、基本的、通用的完整性约束。例如,关系模型中的关系必须满足实体完整性和参照完整性两个约束。此外,数据模型还应该提供定义完整性约束的机制,以反映具体应用所涉及的数据必须遵守的特定的语义约束条件。例如,某大学的数据库规定学生的姓名不能为空、学生成绩不能为负数等。

1.3.2 常用数据模型

目前,数据库领域主流的数据模型是关系模型,除此之外还有层次模型、网状模型、面向对象数据模型、半结构化数据模型等。

1.关系模型

关系模型(Relation Model)是目前最常用的一种数据模型,关系数据库系统采用关系模型作为数据的组织方式。

1970年美国IBM公司San Jose研究室的研究员科德(E.F.Codd)首次提出了数据库系统的关系模型,开创了数据库关系方法和关系理论的研究,为数据库技术奠定了理论基础。关系模型的建立是数据库发展历史中最重要的事件之一。由于E.F.Codd的杰出贡献,他于1981年获得图灵奖。此后许多人把研究方向转到关系方法上,提出了关系数据库系统。

20世纪80年代以后,计算机厂商新推出的数据库管理系统几乎都支持关系模型,非关系数据库管理系统的产品也都加上了关系接口。数据库领域当前的研究工作大都是以关系方法为基础的。关系数据库管理系统已成为目前应用最广泛的数据库管理系统之一,例如,现在国内外广泛使用的MySQL、Oracle、SQL Server、TiDB、openGauss和OceanBase等都是关系数据库管理系统。

关系模型不仅要描述对象本身的数据结构,还要描述对象之间的关系。

【例1.2】某关系数据库中存在student(学生)、course(课程)和score(成绩)3个关系,一个学生可以选修多门课程,一门课程也可以被多个学生选修,并通过考试获得成绩。用关系模型来描述三者之间的关系如图1.5所示,其中student表中的sno和score表中的sno、course表中的cno和score表中的cno存在关联关系。

图1.5 关系模型

(1)关系模型的数据结构

关系模型是用二维表结构表示实体及实体间联系的数据模型,在用户看来,关系模型的数据结构就是一张二维表,它由行和列组成,如图1.6所示。

图1.6 二维表

(2)关系模型的基本术语

关系(Relation):在关系模型中二维表称为关系,一个关系对应一张表,如student表。

元组(Tuple):表中的一行即一个元组,表示一个实体或一条联系。

属性(Attribute):表中的一列即一个属性,每个属性有一个名字即属性名。例如,student表中的属性有sno(学号)、sname(姓名)、sex(性别)、birthday(出生日期)和dept(系别)等。

主键或主码(Primary Key):表中的某个属性或属性集,它可以唯一确定元组,如student表中的sno、course表中的cno。

域(Domain):属性的取值范围,例如,sex的域是{男,女},dept的域是一个学校所有系别的集合。

分量:元组中的一个属性值。

关系模式:对关系的描述,一般表示为关系名(属性1,属性2,…,属性n),如学生(学号,姓名,性别,…)。

键或码(Key):属性或属性的集合,其值能够唯一标识元组。例如,sno就是关系student的键,可以用于确定一个学生。在实际使用中,键又分为候选键、主键、外键等。

主属性和非主属性:关系中,候选键中的属性称为主属性,不包含在任何候选键中的属性称为非主属性。

(3)关系的性质

关系具有如下性质:

①列是同质的,即每一列中的分量是同类型的数据,来自同一个域;

②每一列为一个属性,要给予不同的名字;

③关系中没有重复的元组,任意一个元组在关系中都是唯一的;

④元组的顺序可以任意交换;

⑤属性在理论上是无序的,但在使用中按习惯考虑顺序;

⑥所有的属性值都是不可分解的。

2.层次模型

层次模型用树状结构来表示各类实体及实体间的联系,因此层次模型也称为树状结构图。由于树状结构的特性,层次模型对具有1:n的层次关系的事物描述得非常自然、直观,容易理解,现实世界中的学校组织结构关系等适合用层次模型表示,如图1.7所示。

图1.7 层次模型

3.网状模型

网状模型是用有向图表示实体及实体间联系的数据模型。网状模型的使用比层次模型更普遍,反映的是实体间普遍存在的更为复杂的联系。层次模型实际上是网状模型的一个特例。现实生活中的人与人之间的关系可以用网状模型表示,如图1.8所示。

图1.8 网状模型

相比于层次模型,网状模型适合描述较为复杂的现实世界。它的缺点是由于数据结构太复杂,不利于用户掌握。同时,有向图中可以到达某一个节点的路径有多条,因此应用开发者必须选择相对较优的路径来进行搜索以提高查询效率,这对应用开发者的要求是较高的。

4.面向对象数据模型

面向对象编程已经成为主流的软件开发方法,这导致了面向对象数据模型(Object-Oriented Data Model)的产生。该模型是面向对象程序设计方法与数据库技术相结合的产物,它的基本目标是以更接近人类思维的方式描述客观世界的事物及其联系。

面向对象数据模型具有封装性、信息隐匿性、持久性、继承性、代码共享性和软件重用性等特性,除此之外,面向对象数据模型最大的特点是有丰富的语义,便于更自然地描述现实世界。

5.半结构化数据模型

半结构化数据模型(Semi-Structured Data Model)允许那些相同类型的数据有不同的属性集。这和我们前面提到的数据模型形成了对比,通常数据模型中某种特定类型的所有数据必须有相同的属性集。

举一个半结构化数据的例子,即员工的简历。员工的简历结构不像员工基本信息结构那样一致,每个员工的简历各不相同。有的员工的简历很简单,比如只包括教育情况;有的员工的简历却很复杂,比如包括工作情况、婚姻情况、出入境情况、户口迁移情况、党籍情况、技术技能等。