数据库系统工程师考试的考生几乎都背过这样一句话:数据模型由数据结构、数据操作和数据的完整性约束三个部分组成。但真正到了考场上,命题人很少直接让考生默写这三个名词,而是把考点拆散,藏进一道道看似普通的单选题里。有的考生能把"三要素"倒背如流,却在"数据模型三要素中不包括哪个"这类题上栽跟头;有的考生分不清数据模型的"数据结构"和计算机组成原理里的"数据结构"到底是不是一回事;还有的考生始终搞不明白,完整性约束究竟是数据模型的一部分,还是数据库管理系统的一个功能。本文不满足于把三个名词摆出来,而是从数据模型的本质出发,逐层拆解三要素各自的技术内涵、它们之间的内在联系,以及命题人最常用的挖坑方式,帮助数据库系统工程师考生把这一个基础考点彻底吃透。
要理解数据模型的三要素,必须先弄清楚数据模型本身是什么。教材的标准定义是,数据模型是对现实世界数据特征的抽象,是数据库系统的核心和基础。这一定义包含两个关键信息。第一,数据模型是一种抽象,它不是现实世界的照搬,而是把现实世界中纷繁复杂的事物及其联系提炼成计算机能够理解、存储和处理的形式。第二,数据模型处于数据库系统的核心地位,数据库管理系统的一切功能,从存储、检索到并发控制和故障恢复,都建立在某一个具体的数据模型之上。
把抽象的过程展开,数据模型通常要经过两个层次的转换。第一个层次是从现实世界到信息世界,即概念模型,它不依赖任何具体的数据库管理系统,用人们容易理解的方式描述客观事物及其联系,最典型的工具是实体联系模型,即常说的 E-R 图。第二个层次是从信息世界到机器世界,即具体的逻辑模型和物理模型,逻辑模型决定数据在数据库中的组织方式,物理模型决定数据在存储介质上的具体存放形式。考生复习时务必明确,通常所说数据模型的三个组成部分,指向的主要是逻辑数据模型。
那么,一个数据模型凭什么能够完整地描述一个数据库系统的方方面面?答案就落在三要素上。一个成熟的数据模型,必须能够回答三个基本问题:数据以什么样的结构组织、数据支持什么样的操作、数据必须满足什么样的约束。这三个问题的答案,恰好对应数据模型的三要素。数据结构回答的是长什么样,数据操作回答的是能做什么,完整性约束回答的是不能做什么。三者缺一不可,共同刻画了一个数据模型的完整面貌。
教材对三要素的正式表述值得逐字推敲。数据结构是所描述的对象类型的集合,是对系统静态特性的描述;数据操作是对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关操作规则,是对系统动态特性的描述;数据的完整性约束是一组完整性规则的集合,用以限定符合数据模型的数据库状态以及状态的变化,保证数据的正确、有效和相容。这三句话不仅是选择题的常考原文,更是理解后续所有数据库知识的钥匙,值得考生一字不落地掌握。
很多考生第一次接触三要素时会疑惑:数据模型三要素和概念模型、逻辑模型、物理模型的划分是什么关系?简单地说,两级抽象的划分回答的是"数据模型从现实世界到机器世界要经过哪些步骤",而三要素回答的是"一个具体的数据模型由哪些部分组成"。二者是横纵两个维度的关系。无论是概念模型、逻辑模型还是物理模型,只要它被称为一个"模型",就都可以从结构、操作、约束三个角度去刻画。只不过在考试中,三要素通常被放在逻辑数据模型的语境下考查,命题人一般不会要求考生对物理模型也逐一分析三要素。
考生不妨追问:为什么数据模型偏偏由这三个要素构成?这由数据模型的功能定位决定。数据库的终极目标,是把现实世界的数据妥善组织起来并供人使用。要组织数据,就必须规定数据的形式,这就是数据结构;要使用数据,就必须规定数据的操作,这就是数据操作;要保证数据不出错,就必须规定数据的规则,这就是完整性约束。形式、操作、规则恰好覆盖了存储、使用、保障三个层面,缺一不可。理解了这一点,三要素就不再是孤零零的名词,而是一个逻辑自洽的整体。
把三要素背下来只是第一步,真正让考生在考场上拉开差距的,是对三个要素内部原理的透彻理解。下面逐一深挖。
数据结构在三要素中排在首位,也被视为数据模型最基础的部分,因为它是数据操作和完整性约束赖以依附的骨架。教材给出的定义是,数据结构描述数据库的组成对象以及对象之间的联系。这里要特别强调"对象之间的联系",这是数据结构与普通意义上数据类型的本质区别。一个孤立的整数、字符串本身不是数据模型关心的重点,数据模型真正要刻画的是这些对象如何彼此关联,例如学生与课程之间的选课关系、部门与员工之间的隶属关系。
从内容上看,数据结构描述的对象包括两类。第一类是与数据类型、内容、性质有关的对象,例如关系模型中的域、属性、关系,层次模型中的记录型、字段型,网状模型中的系型。第二类是与数据之间联系有关的对象,例如关系模型中用关系来表示实体与实体之间的联系,层次模型中用双亲子女关系来表示联系。数据结构正是这两类对象的集合,它规定了数据库中数据的组织框架,因此被称为对系统静态特性的描述。
需要提醒的是,这里的数据结构是一个抽象层面的概念,与计算机科学基础课程中讲授的线性表、树、图等具体存储结构是两个层面的事情。数据模型中的数据结构规定的是数据在逻辑上的组织方式,例如关系模型规定数据组织成二维表,至于这张表在磁盘上究竟是连续存放还是分散存放,那是物理结构要解决的问题。命题人经常利用这两个概念的字面相同来做文章,考生务必分清逻辑结构与物理结构的边界。
如果说数据结构规定了数据的静态形态,那么数据操作则规定了数据可以如何被使用。教材定义,数据操作是对数据库中各种对象的实例允许执行的操作的集合,包括操作以及有关的操作规则,是对系统动态特性的描述。这句话的关键词是实例和规则。操作作用于对象的实例而非对象本身,例如关系模型中的插入操作,插入的是某一个具体的元组,而不是关系这个抽象的类型;操作还必须附带规则,例如关系模型中查询操作的结果依然是一个关系,这就是关系封闭性这一重要操作规则。
从操作类型上看,数据库的数据操作主要分为两大类:检索和更新。检索就是查询,把用户需要的数据从数据库中取出来;更新则包括插入、删除和修改三种。有的教材还会把操作进一步细分,但考试层面掌握检索和更新两大类的划分已经足够。更重要的是,一个数据模型不仅要列出有哪些操作,还必须精确地定义每一项操作的确切含义、操作符号、操作规则以及实现操作的语言。以关系模型为例,操作符号是关系代数中的选择、投影、连接等运算,操作规则体现为关系代数的各种定律,实现语言则是结构化查询语言 SQL。这三者共同构成了关系模型的数据操作体系。
完整性约束是三要素中最容易被低估、却最常出考题的部分。教材定义,数据的完整性约束是一组完整性规则的集合,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。这句话需拆成两层理解。第一层是限定数据库状态,即约束规定什么样的数据状态合法,例如学生年龄不能为负;第二层是限定状态的变化,即约束规定数据从一种状态变化到另一种状态时必须满足的条件,例如转账时账户余额不能因操作而变为负数。
完整性约束又分为两大类。一类是数据模型本身固有的、通用的约束,这种约束不依赖具体的应用,只要是使用这种数据模型,就必须遵守,关系模型的实体完整性和参照完整性就属于这一类。另一类是用户根据具体应用场景自行定义的约束,例如某个业务要求账户余额不得低于一百元,这类约束具有明显的应用相关性,属于用户定义的完整性。考生在理解时要注意,数据模型三要素中的完整性约束,指的是前者,也就是模型本身固有的规则,至于用户定义的具体约束,虽然也是完整性的范畴,但在三要素的语境下更应被理解为数据模型所支持和容纳的一类约束能力。
理解了单个要素的原理之后,还需要把三要素放到具体的数据模型中去观察,才能真正体会这三个抽象概念的落地方式。历史上出现过的主要数据模型有层次模型、网状模型和关系模型,它们对三要素的处理各有千秋。
层次模型用树形结构来表示数据及数据之间的联系,这是最早发展起来的数据模型之一,其典型代表是 IBM 公司研制的 IMS 数据库管理系统。层次模型的数据结构要求有且仅有一个根结点,除根结点外的其他结点有且仅有一个双亲结点,这种严格的树形约束使得层次模型只能自然地表达一对多的联系。层次模型的数据操作以记录为单位进行,完整性
本篇完!