购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 数据模型概述

客观世界是数据的来源。我们在现实生活中遇到具体问题时,需要对客观事物及事物之间的联系进行抽象。比如,家里的存储空间不够,需要定制一个柜子。首先需要选择放柜子的位置,然后度量这个位置的空间大小并决定柜子的长、宽、高。柜子的尺寸最终以数字的形式呈现在设计方案中,并被转化为二进制存储到计算机中。由此可见,现实世界中的事物经过抽象形成了信息,而信息经过数据化变成了能被计算机处理的数据。工厂要制作柜子的时候,从计算机中调出柜子的尺寸数据去生产柜子。在安装柜子的时候,工人需要根据柜子的设计方案去实施。这就是说,数据存储于计算机以后,可被提取出来,经过信息化呈现,用于指导人们的工作和生活。因此,信息世界是现实世界在人们头脑中的反映,是对现实世界的模拟。信息世界的信息以记录、文件、字段、关键字等形式存储在机器世界中。在现实世界、信息世界和机器世界之间,存在如图2.1所示的关联。现实世界、信息世界和机器世界三者之间的交互需要使用不同的数据模型。

图2.1 现实世界、信息世界和机器世界之间的关联

2.1.1 数据模型的概念

模型是人们依据特定目的,在一定的假设条件下,对现实世界中某些对象若干特征的抽象和模拟。模型可以是具体的,也可以是虚拟的;可以是平面的,也可以是立体的。如图2.2所示,建筑行业使用的沙盘、军事领域使用的地图、航模比赛所用的飞机模型等,都是具体的模型。数据模型也是模型的一种,是对现实世界的抽象和模拟。在应用数据库技术解决实际问题的时候,数据模型这个工具可以抽象、表示和处理现实世界中的事物以及事物与事物之间的联系。也就是说,数据模型是用来描述数据、组织数据和操作数据的。

2.1.2 数据模型的作用

在数据库应用系统开发过程中存在三种不同的人员角色:普通用户、系统设计师和程序员。普通用户是提出系统需求的人,也是系统开发任务完成以后系统的使用者。与普通用户不同的是,系统设计师和程序员都是具备计算机专业知识的人。系统设计师需要了解普通用户对系统的需求,并负责系统整体框架和数据库结构的设计。程序员则负责将系统设计师设计出来的系统框架和数据库结构落地实现。这就类似于在家装行业,普通用户提出装修房屋的需求,家装设计师负责理解用户的需求和喜好,设计出家装方案,并通过效果图的方式呈现给用户看。在装修方案得到用户的确认以后,装修工人负责将方案落地。

图2.2 现实生活中的模型

由于知识储备、行业背景的不同,普通用户、系统设计师和程序员看待数据的方式是不一样的。在数据库应用系统开发过程中,存在数据该用什么形式表现(是文字、数值、声音还是图像)、数据之间的联系方式应该使用哪种结构方式去表示、数据在计算机中如何高效存储等问题需要解决。在解决问题的过程中,数据模型是普通用户、系统设计师和程序员这三种角色沟通的工具和桥梁。

普通用户通常不具备计算机专业知识,因此,可使用概念数据模型来描述他们所关心的信息结构,而不涉及信息在计算机系统中的表示。系统设计师在理解了用户需求以后,使用直接面向数据库逻辑结构的数据模型来描述信息世界中的信息结构。这种数据模型称为逻辑数据模型,它使用严格的数据库语言来定义和操纵数据。程序员则直接面向计算机系统,站在计算机物理存储的层面,思考数据在存储设备上的存储方式和存取方法。这种描述数据在物理存储设备上的存储方式和存取方法的模型称为物理数据模型。由此可见,概念数据模型是对现实世界中数据的抽象描述,逻辑数据模型是对信息世界中数据的抽象描述,物理数据模型则是对机器世界中数据的抽象描述。数据模型的作用如图2.3所示。

图2.3 数据模型的作用

2.1.3 数据模型的组成

数据模型形式化地描述数据与数据之间的联系、数据操作和有关语义约束规则的方法。数据模型通常由三个部分组成:数据结构、数据操作和完整性约束。

数据结构描述系统的静态特性,如数据类型、内容、性质、数据间联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。如何表示客观事物以及事物与事物之间的关联,是数据结构要表述的内容和主题,其中难点在于如何表示事物与事物之间的关联。

数据操作描述系统的动态特性,主要描述在相应的数据结构上的操作类型和操作方式,如允许执行的操作和实现操作的语言等。如何实现数据的增、删、改、查,是数据操作要表述的内容和主题。

完整性约束主要描述数据结构内数据间的语法、词义联系,它们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确性、有效性和相容性。例如,我们要处理月份数据时,可以定义其为数值型数据,还必须规定月份只能从1~12当中选择:现实生活中月份只能是{1,2,…,12}中的一个,除此之外的其他值是让人无法理解的。因此,必须根据实际语义情况,给某些数据加上一些约束条件,以防止与事实不符的数据在数据库里出现。

数据结构、数据操作和完整性约束构成了数据模型的三要素,数据模型必须要从这三个方面进行定义和描述。

2.1.4 相关术语

在2.1.2节中提到的概念数据模型、逻辑数据模型和物理数据模型分别是对现实世界、信息世界和机器世界中数据的抽象、模拟。

在信息世界中,我们将现实世界中客观存在的并且可以相互区别的事物称为 实体 (Entity)。实体可以指某个可触及的对象,如一个学生、一本书、一辆汽车,也可以指某个抽象的事件,如一堂课、一次比赛等。用实体名及属性名集合来抽象刻画的同类实体称为 实体型 (Entity Type)。同型实体的集合称为 实体集 (Entity Set)。例如,学生A是一个实体,学生B也是一个实体,同一个班的所有学生构成了一个实体集。

实体所具有的特征称为 属性 (Attribute)。例如,学生可由(身份证号、学号、姓名、性别、班级、电话)等属性来描述。不同的实体依靠不同的属性值来区分。属性有“型”和“值”之分,“型”即属性名,如(身份证号、学号、姓名、性别、班级、电话)是属性的型;“值”即属性的具体内容,如('440×××××××××××420','202101231234','张怡','女','21软件工程','135××××××××')这些属性值的结合表示了一个学生实体。

每个属性可取的值的范围称为 值域 。例如,性别这个属性的值域为{'男'、'女'}。在实体所有属性中,能唯一区分每一个实体的最小属性集合称为 实体标识符 。例如,每个学生的学号都不可能相同,因此学号可作为学生实体的实体标识符。

思考 :除了学号之外,还有没有其他属性可以作为学生实体的实体标识符?

在机器世界中,存储实体所对应数据项的有序集合称为 记录 (Record)。同一类记录的汇集称为 文件 (File)。对应于实体属性的数据称为 字段 (Field)。在众多字段中能唯一标识记录的最小属性集称为 关键字 (Key),对应信息世界的实体标识符。

三个世界中各术语的对应关系如图2.4所示。

图2.4 三个世界中各术语的对应关系

在现实世界中,事物内部以及事物之间是存在联系的,这些联系同样也要抽象和反映到信息世界中来,在信息世界中它们被抽象为实体型内部的联系和实体型之间的联系。实体型内部的联系通常是指组成实体的各属性之间的联系,反映在数据上是一个记录内各数据项间的联系。实体型之间的联系通常是指不同类型实体集之间的联系,反映在数据上是记录与记录之间的联系。

实体型之间的联系分为三种类型:一对一联系、一对多联系和多对多联系。

(1)一对一联系(One-to-One Relationship)

有两个类型不同的实体集E1和E2,如果E1中的每个实体最多和E2中的一个实体有联系,而且E2中的每个实体也最多和E1中的一个实体有联系,则称E1和E2的联系是一对一联系,简记为1:1联系(见图2.5)。例如一个班里只有一个正班长,一个正班长只能在一个班里任职,因此“班”和“正班长”之间的联系是1:1联系。

思考 :请举例说明日常生活中存在的1:1联系。

(2)一对多联系(One-to-Many Relationship)

有两个类型不同的实体集E1和E2,如果E1中的每个实体与E2中的任意多个(包括零个)实体有联系,但E2中的每个实体最多和E1中的一个实体有联系,则称E1和E2的联系是一对多联系,简记为1: N 联系(见图2.6)。例如,一位母亲可生多个孩子,而每个孩子只能有一位母亲,因此“母亲”和“孩子”之间的联系是1: N 联系。

思考 :请举例说明日常生活中存在的1: N 联系。

图2.5 1:1联系

图2.6 1: N 联系

(3)多对多联系(Many-to-Many Relationship)

有两个类型不同的实体集E1和E2,如果E1中的每个实体与E2中的任意多个(包括零个)实体有联系,而且E2中的每个实体也与E1中的任意多个实体(包括零个)有联系,则称E1和E2的联系是多对多联系,简记为 M : N 联系(见图2.7)。例如,学生选修课程,每位学生可以选多门课程,每门课程可被多名学生选修,因此“学生”和“课程”之间的联系是 M : N 联系。

图2.7 M : N 联系

思考 :请举例说明日常生活中存在的 M : N 联系。

值得注意的是,在分析实体型之间的联系时,应该结合具体的语义情况,不能一概而论。例如,在每人可以购买的商品数量不受限制的情况下,“买家”与“商品”之间是1: N 的联系。然而,若商品限量发售,每人最多只能买1件,“买家”与“商品”之间就是1:1的联系。因此,要结合实际情况分析实体型之间的联系。 ZgT5lCi+lcpXV0BxsWZCOA4uJgy5kUDZoxmDXvk+NcuqApwRwIfM1XXlv707AU1F

点击中间区域
呼出菜单
上一章
目录
下一章
×