第2章 数据库系统的数据模型

发布时间 : 星期二 文章第2章 数据库系统的数据模型更新完毕开始阅读

图2-3 PCR型 图2-4 一个PCR实例 3)层次数据模式

利用PCR可以构成层次数据模式。图2-5是一个层次数据模式的例子。 系 图中,每个方框代表一个记录型,每条弧线代表一个PCR 型。层次数据模式是一棵树,其数据结构特点为: , 在每棵树中有且仅有一个结点无双亲(即根结点)。

班 教研室 , 除根结点外的任何结点有且有一个双亲结点,但可以有 任意个子女结点。

, 树中无子女的结点称为叶结点。 学生 教师 图3-5 层次数据模式例子

一个层次数据模式可以有多个实例,如图2-6是图2-5数据模式的一个实例。 计算机系

计科0201班 计科0202班 计教0201班 软件教研室 硬件教研室 ? ? ? ? ?

张三 李四 王五 李定 赵山 周英 胡恒 丁伟 孙立 钱敏 如图2-6 层次数据模式的一个实例 4)层次序列和层次路径 (1)层次序列

由于存储器是线性的,层次数据必须变换成线性形式才能存储。层次数据模型采用树的先序遍历的次序(即从上向下、自左到右)作为存储次序。这样所生成的序列称为层次序列。如图2-6中层次数据模式的实例的层次序列如图2-7所示。

硬软计 计计 计 件件教 算张李科 科 王孙胡周钱丁教教? ? ? ? ? 机0201 三四 0201 0202 五 英立敏恒伟研研 系 班 班 班 室室

图2-7 图2-6的层次序列

8

(2)层次路径

层次路径是用来指明从层次数据模式的根结点到目标结点的一条查询路径,通常用从根结点到目标结点路径上每个记录值的排序关键字表示。

2.3.2 数据操作

数据库中的数据操作主要包括数据查询与更新两大类。 1)数据查询

在层次数据模型中,若要查找一个记录,须从根结点开始,按给定条件沿一个层次路径查找所需要的记录。下面介绍3个查询操作命令。

(1)GU(Get Unique) 格式:GU,查询条件,

按给定查询条件,沿层次路径查询所需要的记录。该命令执行的结果是查找出满足条件的第一个条件。

例如,以图2-6为例,执行一个GU查询操作命令如下: GU 系(系名,’计算机系’),班(班名,’计科0202’),学生;

该命令表示查找计算机系计科0202班的第一个学生,即名叫“王五”的学生记录。执行该命令后,王五这个学生记录就变成当前记录。

(2)GNP(Get Next within Parent)

在当前记录的双亲下,按层次序列查找下一个满足条件的记录。例如,查找计科0202班所有学生的记录的查询操作命令如下:

GU 系(系名,’计算机系’),班(班名,’计科0202’),学生;/*找到王五的记录*/

While not fail do GNP 学生;/*找到当前记录王五的双亲计科0202班的所有学生记录*/

(3)GN(Get Next)

从当前记录位置开始,按照层次序列,不受同一双亲的限制,查找当前记录的下一个满足条件的记录。例如,查找计科0202班和计教0201班的所有学生记录的查询操作命令如下:

GU 系(系名,’计算机系’),班(班名,’计科0202’),学生; While not fail do GNP 学生;/*找到计科0202班的所有学生记录*/ GN 学生; /*找到计教0201班的第一个学生记录,即学生赵山*/ While not fail do GNP 学生;/*找到计教0201班的所有学生记录*/ 可以看出,GNP和GN命令通常跟在GU命令后面使用,先由GU命令定位到层次模型中的某个记录,再用GNP和GN命令查询所需记录。

2)更新操作

(1)数据插入(INSERT)

插入操作可先将插入数据写入系统I/O区,然后指定一个由根记录开始的插入层次路径,完成数据的插入操作。

(2)数据删除(DELETE)

删除操作是先用查询命令将待删除的记录定位为当前记录,再DELETE命令完成删除任务。当删除一个记录时,则其所从属的所有子女记录都被删除。

(3)数据修改(REPLACE)

先用查询语句将要修改的记录定位为当前记录,并将该记录读到I/O区,在I/O区对数据进行修改,然后用REPLACE命令可将修改后的记录值写回到数据库中。

2.3.3 数据约束

层次数据模型的数据约束主要是由层次结构的约束造成的。 9

(1)除了根结点外,任何其他结点不能离开其双亲结点而孤立存在。 这条约束表明了在插入一个子女记录时,必须与一个约束双亲记录相联系,否则不能插入;在删除一个记录时,其子女记录也将自动被删除。这一约束为数据操作造成了不便。

(2)层次数据模型所体现的记录之间的联系只限于二元1:n或1:1的联系,这一约束了用层次模型描述现实世界的能力。

对于现实世界中存在的二元m:n联系和多元m:n:p等复杂联系,就不能用层次模型直接进行表达了。通常采用下列的分解法或虚拟记录法来解决这一问题。

例如,学生记录型和课程记录型是一个m:n联系,将无法用层次模型直接表达学生与课程之间的多对多联系。可以采用分解的方法,把一个二元m:n联系分解成两个二元1:n联系,如图2-8所示。

李四 王五 学生 张三 网络安全 数据库 课程 型 实例

(a) m:n联系的型与实例 学生 李四 张三 王五

课程 网络安全 网络安全 数据库 网络安全 数据库 型 实例

(b) 按学生进行分解的型与实例 数据库 网络安全 课程

学生 王五 李四 张三 李四 王五 型 实例

(c) 按课程进行分解的型与实例 图2-8 m:n联系的分解法

联系合同范文客服:xxxxx#qq.com(#替换为@)