层次数据库
- 层次模型的概念:层次模型是数据处理中发展较早、技木上也比较成熟的一种数据模型。
- 层次数据库系统采用层次模型作为数据的组织方式。
- 层次数据库系统的典型代表是IBM公司的IMSDBMS,这是1968年IBM公司推出的第一个大型的商用DBMS,曾经得到广泛的使用。
- 层次模型的数据结构:层次模型用树形结构来表示各类实体以及实体间的联系。现实世界中许多实体之间的联系本来就呈现出一种很自然的层次关系,如行政机构、家族关系等。其特点是将数据组织成有向有序的树结构层,由处于不同层次的各个结点组成。在数据库中定义满足下面两个条件的基本层次联系的集合为层次模型:
- 有且只有一个结点没有双亲结点,这个结点称为根结点。
- 除根结点外,其余各结点有且仅有一个上一层结点作为其“双亲”,而位于其下的较低一层的若干个结点作为其“子女”。
- 层次模型的特点
在层次模型中,每个结点表示一个记录类型,用来描述实体集,记录(类型)之间的联系用结点之间的连线(有向边)表示,这种联系是父子之间的一对多联系。- 实体型:用记录类型描述。每个结点表示一个记录类型。
- 属性:用字段描述。每个记录类型可包含若干个字段。
- 联系:用结点之间的连线表示记录(类)型之间的 一对多的联系
- 这使得层次数据库只能处理一对多的实体联系,而不能直接处理多对多的实体联系。
- 层次模型的数据表示方法
层次模型中实体集之间多对多的联系的处理,解决的方法是引入冗余结点。
例如,学生和课程之间的多对多的联系,引入学生和课程的冗余结点(如图3-23中虚线所画),转换为两棵树:一棵树的根是学生,子结点是课程,它表现了一个学生可以选多门课程;另一棵树的根是课程,子结点是学生,它反映了一门课程可以被多个学生选。
-
层次模型的数据操作
层次模型的数据操作最大特点是必须从根结点入手,按层次顺序访问。- 记录类型码:对层次模型中的记录型树,按照从上到下,从左到右的顺序给每个记录类一个编号,称为记录类型码,以表示记录类在树中的位置。
- 顺序域:为了确定同一记录类下的各个记录值的位置,指定记录中某字段的值作为记录值的排序的依据,该字段称为顺序域。
- 层次顺序和路径:有了记录类型码和顺序域,就可以对所有的记录值进行排序,首先按类型码排序,同一类型码下的各个记录值再按顺序域排序。这种从上到下、从左到右的排列顺序就是层次顺序。从根结点开始到目标结点之间所有直系祖先的类型码和顺序域组成该结点的层次路径。
-
层次模型的完整性约束条件
- 在进行插入记录值操作时,如果没有指明相应的双亲记录值,则不能插入子女记录值。
- 进行删除记录操作时,如果删除双亲记录值,则相应的子女结点值也同时被删除。
- 进行修改记录操作时,应修改所有相应记录,以保证数据的一致性。
-
层次模型反映了现实世界中实体间的层次关系,层次结构是众多空间对象的自然表达形式,并在一定程度上支持数据的重构。但其应用时存在以下问题:
- 由于层次结构的严格限制,对任何对象的查询必须始于其所在层次结构的根,使得低层次对象的处理效率较低,并难以进行反向查询。数据的更新涉及许多指针,插入和删除操作也比较复杂。父结点的删除意味着其所有子结点均被删除,必须慎用删除操作。
- 层次命令具有过程式性质,它要求用户了解数据的物理结构,并在数据操纵命令中显式地给出存取路径。
- 不能直接表示多对多的联系,而模拟多对多联系时导致物理存贮上的冗余。
- 数据独立性较差。
网状模型的概念
-
现实世界中,许多事物之间的联系是非层次结构的,它们需要使用网状模型来表示。网状数据库系统是采用网状模型作为数据组织方式的数据库系统。
-
网状数据库系统的典型代表是DBTG系统,也称CODASYL系统。它是20世纪70年代数据系统语言研究会CODASYL下属的数据库任务组DBTG提出的一个系统方案。DBTG虽然不是实际的数据库软件系统,但是它提出的基本概念、方法和技术,对于网状数据库系统的研制和发展起了重大的影响,后来不少的数据库系统都采用了DBTG模型。例如,HP公司的IMAGE、Univac公司的DBS1100、Honeywell公司的IDS/2、Cullinet Software公司的IDMS等。
-
网状模型的数据结构
一般将满足以下两个条件的基本层次联系的集合称为网状模型:
- 有一个以上的结点没有双亲。
- 结点可以有多于一个的双亲。
-
网状模型的特点
网状模型的特点主要包括以下方面:
- 网状模型只能处理一对多的实体联系。
- 每个记录类型定义一个排序自动,也称为码字段。
- 任何记录值只有按其路径查看时,才能显示它的全部意义。
-
网状模型的数据表示方法
同层次模型一样,网状模型也使用记录和记录值表示实体集和实体。
- 每个结点也表示一个记录,每个记录可包含若干个字段。
- 网状模型中的联系用结点间的有向线段表示。
- 每个有向线段表示一个记录间的一对多联系。
- 网状模型中的联系简称为系。 由于网状模型中的系比较复杂,两个记录之间可以存在多种系,一个记录允许有多个双亲记录,所以网状模型中的系必须命名,用系名标识不同的系。
-
网状模型的数据操作
网状模型的数据操作主要包括查询、插入、删除和更新。
- 进行插入操作时,允许插入尚未确定双亲结点值的子结点值。
- 进行删除操作时,只允许删除双亲结点值。
- 进行更新操作时只需更新指定记录即可。
-
网状模型的完整性约束条件
网状数据模型记录间的联系比较复杂,一般来说,它没有层次模型那样严格的完整性约束条件,但具体的网状数据库系统对数据操纵都加了一些限制,提供了一定的完整性约束。
-
如DBTG在数据定义语言中,提供了定义DBTG数据库完整性的若干个概念和语句,它们是:
- 支持记录码的概念,码即唯一标识记录之间的一对多联系。
- 保证一个联系中双亲记录和子女记录之间的一对多的联系。
- 可以支持双亲记录和子女记录之间的某些约束条件。