Ims Db 简明教程

IMS DB - Logical Database

IMS数据库有一条规则,即每个段类型只能有一个父段。这就限制了物理数据库的复杂性。许多DL/I应用程序需要一个复杂结构,它允许一个段具有两个父段类型。为了克服这一限制,DL/I允许DBA实现逻辑关系,其中一个段可以具有物理父段和逻辑父段。我们可以在一个物理数据库中创建其他关系。实现逻辑关系之后的新数据结构称为逻辑数据库。

Logical Relationship

逻辑关系具有以下属性 −

  1. 逻辑关系是两个在逻辑上(而非物理上)相关的段之间的路径。

  2. 通常,在单独的数据库之间建立逻辑关系。但一个特定数据库的段之间也是有可能建立关系的。

下图显示了两个不同的数据库。一个是学生数据库,另一个是图书数据库。我们在学生数据库中的“已借阅书籍”段和图书数据库中的“书籍”段之间创建逻辑关系。

std lib database

创建逻辑关系后,逻辑数据库如下所示 −

logical database

Logical Child Segment

逻辑子段是逻辑关系的基础。它是一个物理数据段,但对于DL/I来说,它看起来好像有两个父段。上面示例中的“书籍”段有两个父段。“已借阅书籍”段是逻辑父段,而“图书”段是物理父段。一个逻辑子段实例只有一个逻辑父段实例,并且一个逻辑父段实例可以具有许多逻辑子段实例。

Logical Twins

逻辑双胞胎是逻辑子段类型的所有实例,它们都从属于逻辑父段类型的一个实例。DL/I使逻辑子段看起来类似于一个实际的物理子段。这也称为虚拟逻辑子段。

Types of Logical Relationships

DBA在段之间创建逻辑关系。为了实现逻辑关系,DBA必须在所涉及的物理数据库的DBDGEN中指定它。有三种类型的逻辑关系 −

  1. Unidirectional

  2. Bidirectional Virtual

  3. Bidirectional Physical

Unidirectional

逻辑连接从逻辑子段到逻辑父段,它不能反过来。

Bidirectional Virtual

它允许双向访问。在物理结构中的逻辑子段和对应的虚拟逻辑子段可以看作成对的段。

Bidirectional Physical

逻辑子段是物理存储的,并且从属于其物理父段和逻辑父段。对于应用程序,它的显示方式与双向虚拟逻辑子段相同。

Programming Considerations

使用逻辑数据库的编程注意事项如下 −

  1. 访问数据库的DL/I调用在逻辑数据库中仍然相同。

  2. 程序规范块指示我们在调用中使用的结构。在某些情况下,我们无法识别我们正在使用一个逻辑数据库。

  3. 逻辑关系为数据库编程增加了新维度。

  4. 使用逻辑数据库时必须谨慎,因为两个数据库被集成在一起了。如果修改一个数据库,同样的修改必须反应在另一个数据库中。

  5. 程序规范应该指明什么处理被允许用在一个数据库上。如果违反了处理规则,你就会得到一个非空白状态码。

Concatenated Segment

一个逻辑子段总是以目标父级的完整串联键开头。这被称为目标父级串联键 (DPCK)。对于逻辑子级的段 I/O 区域,你始终需要在开头编码 DPCK。在一个逻辑数据库中,串联段使得在不同物理数据库中定义的段之间形成连接。一个串联段包括以下两部分:

  1. Logical child segment

  2. Destination parent segment

一个逻辑子级段包括以下两部分:

  1. 目标父级串联键 (DPCK)

  2. Logical child user data

logical child

在更新期间处理串联段时,有可能通过一个调用添加或修改逻辑子级和目标父级中的数据。这还取决于 DBA 为数据库指定的规则。对于一个插入,将 DPCK 放置在正确的位置。对于一个替换或删除,不要更改串联段的任何部分中的 DPCK 或序列字段数据。