2.7.4 层次数据模型

层次数据模型表现为倒立的树,用户把层次数据库理解为段的层次。一个段(segment)等价于一个文件系统的记录型。在层次数据模型中,文件或记录之间的联系形成层次。换句话说,层次数据库把记录集合表示成倒立的树结构。层次数据模型如图2.12所示。树可以被定义成一组结点,即有一个特别指定的结点称为根(结点),它是段的双亲,其他段都直接在它之下(就像一棵家族树有双亲-子女联系或一棵组织树在记录型之间有主-属联系)。其余结点被分成不相交的系(set)并作为上面段的子女。每个不相交的系依次构成树和根的子树。树的根是唯一的。双亲可以没有、有一个或者有多个子女。层次模型可以表示两个实体之间的一对多联系,此时这两个实体被表示为双亲和子女关系。树的结点表示记录型。如果把根记录型定义成0级,那么依赖它的记录型定义成1级,依赖1级的记录型称为2级,等等。

 

从双亲段移动到子女段的层次路径总是从左边开始,所定义的树如图2.12所示。例如,段"e"的层次路径为abde。从根开始遍历最左边的所有段。这种从左边路径开始遍历的方法称为前序遍历(preorder traversal)或层次序列(hierarchical sequence)。如图2.12所示,每个双亲可以有多个子女,但每个子女只能有一个双亲。

图2.13a显示了一棵university树型的层次数据模型,它由三级和三个记录型(department、faculty和course)组成。这棵树包含有关院校里的系的信息以及每个系的所有教师和每个教师所讲授的所有课程的数据。图2.13b显示了系、教师和课程记录型的字段或数据类型。根上的单一系记录表示系记录型的一个实例。在更低级别给出记录型的多个实例,表示一个系可以雇用多个教师(或没有)以及一个教师可以讲授多门课程(或没有)。例如,根上有一个computer系以及computer系里的faculty记录型有多个教师实例。同样,每个faculty记录有多个他所讲授的course记录实例。因此,从树的根向最低层次移动时,记录实例之间是一对多(1∶m)联系。由于在大学里有多个系,所以department记录型有多个实例,每个实例有它自己的faculty和course记录实例,通过树的适当分支与它相连。这个数据库由这些树实例组成森林。在任何给定时间,大学里的系相当于树型的多个实例。总的来说,每次这些单个层次数据库和多个数据库都是同时在线的。

假设想在层次数据库里增加我们感兴趣的关于系的信息。例如,由于系有多种需要讲授的科目,所以我们希望保存大学里每个系关于科目的记录。在这种情况下,我们把图2.13扩展成图2.14。department仍然与faculty相关联,faculty与course相关联。department也与subject相关联,而subject与topic相关联。从这个图可以看到,department位于层次的顶部,从这个层次可以获取大量信息。

 

1.层次数据模型的优点

下面是层次数据模型的优点:

简单:由于数据库基于层次结构,所以各层之间的联系逻辑上(或概念上)简单并且层次数据库的设计也简单。

数据共享:因为所有数据都保存在公共数据库里,所以数据共享成为现实。

数据安全:层次模型是第一个由dbms提供和强制数据安全的数据库模型。

数据独立性:dbms提供了保持数据独立性的环境,这充分地降低了编程的难度,减少了对程序的维护工作量。

数据完整性:给定双亲/子女联系,在双亲段和它的子女段之间存在链接。由于子女段是自动地引用它的双亲,所以这种模式保证了数据完整性。

高效率:当数据库包含大量一对多(1∶m)联系的数据并且用户在大量事务中所使用的数据的联系固定时,层次数据模型是非常高效率的。

可用的技术:由于已有许多大型计算机技术基础,因此经验丰富的编程人员可以加以有效利用。

可靠的商业应用程序:在主机环境内部存在大量可靠的商业应用程序。

2.层次数据模型的缺点

实现复杂:虽然层次数据库概念简单、容易设计而且没有数据依赖性问题,但实现起来特别复杂。dbms要求数据存储的物理级知识,数据库设计者必须要具备一定的物理数据存储特性的知识。数据库结构的任何变化(例如段位置的改变),都要求所有访问数据库的应用程序随之改变。因此,数据库设计的实现变得非常复杂。

不灵活:层次数据库缺乏灵活性。新的联系或段的改变通常会带来非常复杂的系统管理任务。一个段的删除可能会造成对其下面的所有段的无意识删除。这样一个错误会造成较大的损失。

数据库管理问题:如果改变了层次数据库的数据库结构,那么必须修改所有访问数据库的应用程序。这样,维护数据库和应用程序变得非常困难。

缺乏结构独立性:结构独立性是指数据库的结构发生改变而不会影响dbms访问数据的能力。层次数据库被称为导航式系统,这是因为数据访问要求使用前序遍历(一种物理存储路径)导航到适合的段。因此,应用程序员应该掌握从数据库访问数据的相关访问路径。物理结构的修改或变化会导致应用程序出现问题,这就要求必须修改应用程序。因此,在层次数据库系统中由于结构依赖使得数据独立性的好处是有限的。

应用程序编写复杂:编写应用程序非常费时和复杂。由于结构依赖和导航式的结构,应用程序编程人员和终端用户必须准确地知道数据库中数据的物理描述以及如何编写访问数据的线性控制代码。这要求具有复杂指针系统的知识,而只有很少或没有编程技术的普通用户通常是很难掌握这一知识的。

实现的限制:许多普通的联系并不适合于层次数据模型所要求的一对多联系。例如,在大学注册的学生可以选修多门课程,并且每门课程可由多个学生选修。在现实世界中这样普通的多对多(n∶m)联系在层次数据模型中都很难实现。

没有标准:在层次数据模型里,没有精确的标准概念集,也没有明确指定模型执行的特定标准。

额外的编程要求:层次模型的使用需要额外的编程活动,因此这被称为由程序的编程人员创建的系统(system created by programmers for programmers)。现代数据处理环境没有这些概念。

posted on 2009-12-31 00:24  康的瑞  阅读(366)  评论(0编辑  收藏  举报