在数据库中,数据不仅包含数据本身的内容,还包括数据之间的关系。这是因为计算机无法直接处理现实世界中的具体事物,因此必须将这些事物抽象成数据模型,以便计算机处理。
数据处理的三个领域
数据从现实世界到数据库里的具体表示要经历三个领域,即现实世界、信息世界、计算机世界。这三个领域的关系如图所示。
1.现实世界
- 定义:现实世界指的是客观存在的事物及其相互联系。
- 数据转化:在这个阶段,现实世界中的数据如报表、图表等被抽象和分类,以建立数据库所需的数据模型。
2.信息世界
-
定义:信息世界是对现实世界事物的抽象描述,主要存在于人们的思维中。
-
关键概念:
- 实体(Entity):现实世界中可以区分的具体或抽象事物,如一本书、一个学生。
- 属性(Attribute):实体的特征,例如一个学生的姓名、性别。
- 码(Key):唯一标识实体的属性,例如图书编号。
- 域(Domain):属性的取值范围,比如性别的域是男或女。
- 实体集(Entity Set):具有相同属性的实体集合。
- 实体型(Entity Type):对实体集的抽象描述。
- 联系(Relationship):实体之间的相互关系。
-
实体-联系模型(E-R Model):
- 通过实体-联系图(E-R图)来表示数据结构。
- 使用矩形表示实体型,椭圆形表示属性,菱形表示联系。
1.两个实体之间的联系
一对一联系(1:1)
如果对于实体集 A 中的每一个实体,实体集 B 中至多有一个实体与之联系,反之亦然则称实体集 A 与实体集 B 具有一对一联系,记为 1:1。
例如,公司里面,一个部门只有一个经理,而一个经理只在一个部门中任职,则部门集与经理集之间的联系为 1:1。
一对多联系(1:n)
如果对于实体集 A 中的每一个实体,实体集 B 中有(m>0)个实体与之联系;对于实体集 B 中的每一个实体,实体集 A 中至多有一个实体与之联系,则称实体集 A 与实体集 B具有一对多联系,记为 1:n。
例如,一个部门有多个职工,而一个职工只在一个部门工作,则部门集与职工集之间的联系为 1:n。
多对多联系(m:n)
如果对于实体集 A 中的每一个实体,实体集 B 中有n(m>0)个实体与之联系; 对于实体集 B 中的每一个实体,实体集 A 中有m(m>0)个实体与之联系,则称实体集 A 与实体集B 具有多对多联系,记为 m:n。
例如,一个产品可以由多个零件组成,而一个零件又可以用于多种产品,则产品集与零件集之间的联系为 m:n。
对信息世界建模,必须方便、准确地表示出上述信息世界中的常用概念,最常用的工具是实体-联系图(E-R 图)。E-R 图提供以下描述实体型、属性和联系的方法。
实体型: 用矩形表示,矩形框内写明实体名。
属性:用椭圆形表示,并用无向边将其与相应的实体连接起来
联系: 用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型。注意:联系本身也是一种实体型,也可以有属性,联系的属性也要用无向边与该联系连接起来。
两个实体间的三种联系,可以用下图表示。
当实体及联系较多时,可以将 E-R 图分成两部分:实体及属性图和实体及联系图。
2.一个实体内的联系
一个实体内的联系也包括1:1、1:n、m:n 三种。例如,学生实体型内部具有领导和被领导的联系,即班长领导班里的学生,而每个学生只被一个班长领导,如图所示。
3.多个实体间的联系
多个实体间的联系也包括 1:1、1:n、m:n三种。例如,教师课程和学生三个实体集之间存在以下关系:
每个教师可以讲授多门课程给不同的学生,每门课程可能会有多个教师讲授,每个学生可以上多门课程,每门课程都有很多学生选修,所以他们之间是多对多的联系。
又如,每个保管员工作在一个仓库中,保管着多种商品,每种商品只能存放在一个仓库中,每个仓库由多名保管员看管。
以上两个例子中多个实体间的联系如图所示。
3.计算机世界(数据世界或机器世界)
- 定义:计算机世界是在信息世界的基础上进一步抽象的阶段,由数据库管理系统(DBMS)支持的数据模型表示。
- 作用:此阶段将信息世界中的数据模型转换成计算机可以理解和处理的形式。
数据模型的要素
数据模型是数据库设计的核心,它用于描述客观事物及其相互关系的数据。有效的数据模型应该能够全面描述系统的静态特性、动态特性和约束条件。以下是数据模型的三个主要要素:
-
数据结构(描述系统的静态特性)
- 作用:描述数据库中的对象类型和这些对象的集合。
- 内容:涵盖与数据类型、内容、性质相关的对象,以及数据之间的联系。
- 重要性:数据结构是定义数据模型特性的关键部分,通常根据数据结构的类型来命名数据模型,例如关系模型、层次模型等。
-
数据操作(描述系统的动态特性)
- 定义:指对数据库对象实例允许执行的操作集合。
- 操作类型:主要包括数据检索和更新操作(如插入、删除、修改)。
- 明确性:数据模型必须明确定义操作的含义、操作符号、操作规则(例如优先级)以及执行这些操作的语言。
-
数据的约束条件(保证数据的正确性、有效性和一致性)
- 作用:定义数据库状态和状态变化的限制,以确保数据的准确性和一致性。
- 内容:包括一组完整性规则,这些规则制约数据及其联系的存储和变化。
- 灵活性:数据模型应包含基本的通用完整性约束条件,并提供定义特定应用完整性约束的机制。
总的来说,一个有效的数据模型应该能够准确地描述数据的结构、如何操作这些数据,以及如何通过约束条件来维持数据的完整性和一致性。这些要素共同确保了数据库系统能够有效地表示和管理现实世界的复杂数据。
数据模型的分类
按照数据模型描述角度的不同,数据模型可以分为以下几类
1. 概念模型(信息模型)
- 定义:也称为信息模型,是根据用户的视角对数据和信息进行的建模。
- 目的:作为现实世界到信息世界的第一层抽象,强调语义表达,易于用户理解。
- 应用:主要用于数据库设计阶段,促进用户和数据库设计人员之间的交流。
- 工具:实体-联系模型(E-R 模型)是其中最著名的工具,用于描述实体间的关系。
2. 数据库支持的数据模型
- 目的:基于计算机系统视角对数据进行建模。
- 类型:包括层次模型、网状模型、关系模型,以及逐渐受关注的面向对象模型。
- 特点:这些模型具有不同的数据结构形式,用于实现数据库管理系统(DBMS)。
层次模型和网状模型统称为非关系模型。在非关系模型中,实体用记录表示,实体之间的联系转换成记录之间的两两联系。非关系模型数据结构的基本单位是基本层次联系。所谓基本层次联系是指两个记录以及它们之间的一对多(包括一对一)的联系,如图 所示。
图中, R i R_i Ri位于联系 L i j L_{ij} Lij的始点,称为双亲结点; R j R_j Rj位于联系 L i j L_{ij} Lij的终点,称为子女结点。这三种模型的根本区别在于数据之间联系的方式(即记录型之间的联系方式)不同。关系模型是用“二维表”来表示数据之间的关系;层次模型是用“树结构”来表示数据之间的关系; 网状模型是用“图结构”来表示数据之间的关系。由于它们的数据表示方式不同,当用户使用数据库时,关系模型只用了数据记录的内容,使得用户在关系 DBMS 中操作时,不必去了解数据记录的联系及顺序,自然就觉得使用起来简单方便;而层次模型和网状模型要用记录与记录之间的联系,以及它们在存储结构中的具体安排,这就要求用户有较多的计算机知识,对一般用户来说,使用起来就不太简单方便了。下面对这三种模型做一个简单的介绍。
1.层次模型
- 结构:使用树状结构表示数据与数据之间的联系。每个节点代表一个实体型,节点间的有向边表示记录间的联系。
- 特征:具有一个根节点(无父节点),其他节点恰有一个父节点。
- 存取路径:要访问某记录,需从根节点开始沿有向树逐层向下查找。
- 限制:不能直接表示多对多联系,解决方法包括冗余结点法和虚拟结点分解法。
在层次模型中,每个结点表示一个实体型,称为记录型。一个记录型可有许多记录值,简称为记录。结点之间的有向边表示记录之间的联系。如果要存取某一记录型的记录,可以从根结点开始,按照有向树层次逐层向下查找,查找路径就是存取路径。
下面给出了某学校的系、教研室、教师、班级的层次模型及实例。
下图中的“系”是根结点,该树状结构反映的是实体型之间的结构。该模型实际存储的数据通过链接指针体现它们之间的这种联系。
下图的实例给出了学校里一个系的数据,其他系的情况用虚线框表示,并予以省略。
层次模型不能直接表示多对多的联系。若要表示多对多的联系,可采用如下两种方法:
方法 1: 冗余结点法。将两个实体的多对多的联系转换为两个一对多的联系。
方法 2: 虚拟结点分解法。将冗余结点转换为虚拟结点。虚拟结点是一个指引元,指向所代替的结点。该方法的优点是减少对储存空间的浪费,避免数据的不一致性; 该方法的缺点是改变储存位置有可能引起虚拟结点中指针的修改。
层次模型的特点是记录之间的联系通过指针实现,比较简单,查询效率高。
层次模型的缺点是只能表示 1: n 的联系,尽管有许多辅助手段可以实现 m:n 的联系,但较复杂,不易掌握,由于层次顺序严格、复杂,插入删除操作的限制比较多,导致应用程序编制起来比较复杂。
2.网状模型
- 结构:使用网状结构表示实体及其联系。每个结点代表一个记录类型,联系通过链接指针实现。
- 特征:可以有多个无父结点的结点,允许复合链,即两个结点之间可以有多种联系。
- 优点:直接描述现实世界,性能良好,存取效率高。
- 缺点:结构复杂,难以掌握,编程难度高。
广义地讲,任何一个连通的基本层次联系的集合都是网状模型图。
上图给出了一个简单的网状模型。由于每一个基本层次联系都代表一对多的联系,因此,若将图形倒置也不可能变成层次模型。图(a)中的每一个结点为一个记录类型,图 (b)是图 (a)的一个具体示例。其中用单向环形链接指针实现联系。可以看出如果零件和配件数量较多,链接将非常复杂。
网状模型中的每个结点表示一个记录类型(实体),每个记录类型可以包含若干个字段(实体的属性),结点间的连线表示记录类型之间一对多的联系,层次模型和网状模型的主要区别如下:
(1) 网状模型中,子女结点与双亲结点的联系不唯一,因此需要为每个联系命名;
(2) 网状模型允许复合链,即两个结点之间有两种以上的联系;
(3) 网状模型不能表示记录之间的多对多联系,需要引进连接记录来表示多对多的联系。
通常,网状数据模型没有层次模型那样严格的完整性约束条件,但 DBTG 在模型 DDL中提供了定义 DBTG 数据库完整性的若干概念和语句:
(1)支持记录码的概念,码能唯一标识记录的数据项集合;
(2) 保证一个联系中双亲记录和子女记录之间是一对多的联系;
(3) 支持双亲记录和子女记录之间的某些约束条件。
网状模型的主要优点是能更为直接地描述现实世界,具有良好的性能,存取效率高。
网状模型的主要缺点是结构复杂。例如,当应用环境不断扩大时,数据库结构就变得很复杂,不利于最终用户掌握,编制应用程序的难度比较大,DBTG 模型的 DDL、DML 语言复杂,记录之间的联系是通过存取路径来实现的,因此程序员必须了解系统结构的细节,增大了编写应用程序的难度。
3.关系模型
- 结构:使用“二维表”结构表示实体及其联系。
- 特征:每个二维表称为一个关系,关系模型实际是关系框架的集合。描述的一致性强,可用于直接表示多对多联系,关系必须规范化。
- 理论基础:建立在数学概念基础上,具有强大的理论支持。
下图给出了一个简单的关系模型,其中图 (a)给出了关系模式:
部门(部门编号,名称,经理,人数)
员工(员工编号,姓名,性别,部门编号)
图(b)给出了这两个关系模式的关系,关系名分别为部门关系和员工关系,均包含两个元组,部门关系的关键字为部门编号,员工关系的关键字为员工编号。
在关系模型中基本数据结构就是二维表,不用像层次模型或网状模型那样的链接指针。记录之间的联系是通过不同关系中的同名属性来体现的。例如,要查找员工“张三”所属的部门,首先要在员工关系中根据姓名找到所属部门 01,然后在部门关系中找到 01 部门编号对应的名称即可。在上述查询过程中,同名属性的“部门编号”起到了联系两个关系的纽带作用。由此可见,关系模型中的各个关系模式不应当孤立起来看待。
4.面向对象数据模型
- 目的:结合面向对象编程方法与数据库技术,支持非传统应用领域的新需求。
- 结构:基本结构是对象,而非记录。每个对象包含数据描述和操作方法。
- 特点:更接近人类思维方式描述客观世界,可扩充性强,具有丰富的语义。
- 比较:与关系模型相比,面向对象模型的类包含数据和方法,而关系模型中只有实体属性。