数据库层次结构示例
在 IMS DB 中,将在层次结构中存储和访问记录。 层次结构显示记录中的每个数据段如何与记录中的其他数据段相关。
IMS 通过定义与同一主题相关的信息片段之间的关系来连接数据库记录中的信息片段。 结果是数据库层次结构。
医疗层次结构示例
下图中显示的医疗数据库包含医疗诊所保留的有关其患者的信息。 医疗层次结构示例中使用的层次结构与全功能数据库和快速路径数据输入数据库 (DEDB) 配合使用。

以上图中表示的每个数据段在层次结构中都称为 段 。 每个分段都包含一个或多个 字段 信息。 例如, PATIENT 段包含与患者严格相关的所有信息: 患者的标识号,名称和地址。
定义: 段 是应用程序可以从数据库中检索的最小数据单元。 字段 是段的最小单位。
医学数据库中的 PATIENT 段是 根段。 根段下的段是根段的 从属项或子代。 例如,样病,计费和 HOUSHOLD 都是 PATIENT 的子代。 "疾病" , "计费" 和 "HOUSHOLD" 称为 "患者" 的直接从属项; "治疗" 和 "支付" 也是 "患者" 的从属项,但它们不是直接从属项,因为它们在层次结构中处于较低级别。
数据库记录 是单个根段 (根段 出现) 及其所有从属项。 在医疗示例中,数据库记录是有关一个患者的所有信息。
定义: 根段 是最高级别的段。 从属项是根段下的段。 根段出现是数据库记录及其所有从属项。
每个数据库记录只有一个根段出现,但在较低级别可能有多个出现。 例如,患者的数据库记录仅包含 PATIENT 段类型的一个实例,但该记录可能包含该患者的多个病和 TREATMNT 段实例。
下面的表显示了层次结构中每个分段的布局。
段的字段名称位于每个表的第一行中。 每个字段名下方的数字是已为该字段定义的长度 (以字节为单位)。
- PATIENT 段
下表显示了 PATIENT 段。
它有三个字段:
- 患者编号 (PATNO)
- 患者的姓名 (NAME)
- 患者地址 (ADDR)
PATIENT 具有唯一键字段 :PATNO。 PATIENT 段根据患者编号按升序存储。 数据库中患者人数最低的是 00001 ,最高的是 10500。
表 1. PATIENT 段 字段名称 字段长度 路径号 10 名称 5 ADDR 30 - 身患疾病的客户细分
下图显示了染病段。
它有两个字段:
- 患者随病来到诊所的日期 (ILLDATE)
- 疾病的名称 (ILLNAME)
键字段为 ILLDATE。 因为可以让患者在同一日期来一次有多个疾病的临床,所以这个关键字段是非唯一的,即可能有多个具有相同 (相等) 关键字段值的为什么会有多个疾病段。
通常在安装期间,数据库管理员 (DBA) 决定使用相同或无键放置数据库段的顺序。 DBA 可以使用 DBD 的 SEGM 语句的 RULES 关键字来指定段的顺序。
对于具有相同键或无键的段, RULES 确定段的插入位置。 其中,具有相同键的 RULES=LAST 分段在具有相同键的那些分段中以先进先出的方式存储。 具有唯一键的染病段将以升序顺序存储在日期字段上,而不考虑 RULES。 ILLDATE 以格式 YYYYMMDD 指定。
表 2. 疾病客户细分 字段名称 字段长度 日期 8 ILLNAME 10 - TREATMNT 段
下表显示 TREATMNT 段。
它包含四个字段:
- 治疗日期 (DATE)
- 给患者的药 (MEDICINE)
- 患者接受的药品数量 (QUANTITY)
- 规定治疗的医生的姓名 (DOCTOR)
TREATMNT 段的关键字段为 DATE。 因为患者可能在同一日期接受多个治疗, DATE 是一个非唯一的关键字段。 TREATMNT (与样) 已指定为具有 RULES=LAST。 TREATMNT 段也存储在先进先出的基础上。 DATE 以与 ILLDATE-YYYYMMDD 相同的格式指定。
表 3. TREATMNT 段 字段名称 字段长度 日期 8 医学 10 QUANTITY 4 博士 10 - 计费客户细分
下表显示了开票段。 它只有一个字段: 当前帐单的金额。 开票没有关键字段。
表 4. 计费客户细分 字段名称 字段长度 计费 6 - 支付客户细分
下表显示了 PAYMENT 段。 它只有一个字段: 月份的付款金额。 支付客户细分没有关键字段。
表 5. 支付客户细分 字段名称 字段长度 付款 6 - HOUSHOLD 段
下表显示了 HOUSHOLD 段。
它包含两个字段:
- 患者家庭成员的姓名 (RELNAME)
- 家庭中的每个成员如何与患者相关 (RELATN)
HOUSHOLD 段的关键字段是 RELNAME。
表 6. HOUSHOLD 段 字段名称 字段长度 RELNAME 10 RELATN 8
银行帐户层次结构示例
银行帐户层次结构是与主存储数据库 (MSDB) 配合使用的应用程序的示例。 在医疗层次结构示例中,特定患者的数据库记录包含 PATIENT 段以及在 PATIENT 段下的所有段。 在 MSDB 中,例如银行账户示例中的 MSDB ,段是整个数据库记录。 数据库记录仅包含段包含的字段。
这两种类型的 MSDB 是 相关 和 非相关。 在相关 MSDB 中,每个段由一个逻辑终端 拥有
。 "拥有的" 段只能由拥有它的终端更新。 在非相关 MSDB 中,这些段不是由逻辑终端拥有。 以下相关 MSDB 和非相关 MSDB 的示例说明了这两种类型的数据库之间的差异。
- TELLERID
- 用于标识柜员的双字符代码
- TRANCNT
- 柜员已处理的事务数
- TELLBAL
- 柜员的余额
下表显示了此类型应用程序的段的外观。
| TELLERID | TRANCNT | TELLBAL |
固定相关 MSDB 的一些特征包括:
- 您只能读取和替换段。 不能删除或插入段。 在银行柜员示例中,柜员可以更改已处理的交易数,但不能添加或删除任何分段。 您从不需要添加或删除段。
- 每个段都分配给一个逻辑终端。 只有拥有终端可以改变一个段,但其他终端可以读取该段。 在银行柜员示例中,您不希望销售人员更新有关其他销售人员的信息,但允许销售人员查看彼此的信息。 销售人员负责自己的交易。
- 拥有段的逻辑终端的名称是段的键。 与非 MSDB 段不同, MSDB 键不是段的字段。 它用作存储和访问段的方法。
- 逻辑终端只能拥有任何一个 MSDB 中的一个段。
- BRANCHNO
- 分支的标识号
- 总计
- 银行分行当期余额
- TRANCNT
- 当日分支的事务数
- DEPBAL
- 存款余额,给支行的存款总额元
- WTHBAL
- 取款余额,给支行取款的美元金额
下表显示了与动态相关的 MSDB 中的分支摘要段的外观。
| BRANCHNO | 总计 | TRANCNT | DEPBAL | WTHBAL |
动态相关 MSDB 与固定相关 MSDB 之间的差异:
- 拥有逻辑终端可以在动态相关 MSDB 中删除和插入段。
- MSDB 可以具有未分配的段池。 此类段在逻辑终端插入时分配给逻辑终端,并在逻辑终端删除时返回到池中。
- 账户号
- 帐号
- BRANCH
- 帐户所在的分支的名称
- TRANCNT
- 本月此帐户的交易数
- 余额
- 当前余量
下表显示了非相关 MSDB 应用程序中的帐户段的外观。
| 账户号 | BRANCH | TRANCNT | 余额 |
非相关 MSDB 的特征包括:
- 段并非由终端拥有,因为它们位于相关的 MSDB 中。 因此, IMS 程序和快速路径程序可以更新这些段。 更新段不限于拥有的逻辑终端。
- 您的程序无法删除或插入段。
- 段键可以是逻辑终端的名称。 存在具有终端相关密钥的非相关 MSDB。 这些段不归逻辑终端所有,逻辑终端名称用于标识该段。
- 如果键不是逻辑终端的名称,那么它可以是任何值,它在段的第一个字段中。 按键序列装入段。