深入探究Codasyl模型:概念、结构与应用
立即解锁
发布时间: 2025-08-13 02:22:22 阅读量: 22 订阅数: 36 


数据库系统原理与实践
### 深入探究Codasyl模型:概念、结构与应用
#### 1. Codasyl模型概述
Codasyl(Conference on Data Systems Languages)模型在数据库发展历程中占据重要地位。最初,由PLC的DBTG衍生出数据库语言任务组(DBLTG),致力于开发子模式数据定义语言(DDL)和数据操作语言(DML)。1973年5月,基于1971年DBTG报告,针对Cobol子模式和DML产生了草案,最终规范于1975年以Cobol数据库工具的形式发布,并在1978年和1981年进行了更新。Codasyl还成立了Fortran DML委员会,分别于1976年和1980年发布了相关规范,且这些规范大多基于早期的Cobol规范。
需要强调的是,Codasyl虽规定了通用用户语言,但并无标准化的章程,标准化的责任由美国的ANSI等国家组织承担。一般而言,标准组织不进行创新,而是基于现有工具制定标准,因此存在针对Codasyl模型的ANSI标准。
#### 2. Codasyl模型的基本概念
##### 2.1 记录(Records)
Codasyl模型使用记录类型和集合类型来表示数据。记录可包含数据项和数据聚合,通常称为组件。模式中的记录条目构成记录类型,代表该类型的所有记录,记录是基本的访问单元。
在早期的Codasyl模型中,数据库中的每个记录都有一个唯一的内部标识符,即数据库键,它是永久性的,可用于快速直接访问。在最新版本中,数据库键这一术语仍被保留,但它不再是永久标识符,只是对记录的概念性指针,其值仅在同一运行单元的生命周期内有效。
##### 2.2 集合(Sets)
Codasyl模型中的关联基本由不相交的A - 集合和A - 集合类型(分别称为集合和集合类型)表示,不同的是,集合和集合类型允许来自多个记录类型的成员。集合类型定义为一个所有者记录类型和一个或多个成员记录类型的命名逻辑集合,集合或集合实例由集合类型的所有者记录类型中的一个所有者记录以及成员记录类型中的零个、一个或多个成员记录来表征。集合类型的名称是其集合名称,代表集合类型的唯一标识符;集合由集合名称加上所有者记录标识符来标识。为避免与数学集合混淆,一些专家更喜欢用“Coset”来称呼Codasyl集合。
集合被视为Codasyl类型数据库的基本构建块。以医生、护士和患者记录类型为例,可构建一个名为DOCNP的集合类型,以医生记录类型为所有者,护士和患者记录类型为成员。这种集合类型称为多成员集合类型,它将为每个所有者记录表示多个集合,集合的数量和成员资格可能会因应用程序的后续更新而改变。
Codasyl集合遵循1:n关联限制规则,同一记录可以是同一集合类型甚至同一集合的所有者和成员,也可以参与多个集合类型。但该模型无法直接表示m:n关联,必须将其分解为1:n关联类型。任何网络都可以通过使用多个(而非单个)集合类型在Codasyl模型中表示,这也是Codasyl模型被称为网络数据模型的原因。
有时,需要将给定类型的记录的逻辑子集分组为一个集合进行特殊处理,可通过声明一个名为SYSTEM的虚拟记录类型作为所有者,将员工记录类型作为成员,并使用用户定义的集合名称来创建特殊集合类型,这种集合类型称为单集合或SYSTEM集合。
##### 2.3 访问路径(Access paths)
Codasyl模型允许所有在相关章节讨论过的访问路径。集合的成员可以向前和向后处理,还具备从成员记录查找所有者的额外功能,成员也可以直接访问。由于成员可以双向处理,集合成员出现的逻辑顺序很重要,这种逻辑顺序可以通过多种方式支持。
#### 3. Codasyl模式模型
##### 3.1 模式骨架(Schema skeleton)
模式包含以下四个条目:
1. 模式名称条目:整个模式有一个。
2. 记录条目:每个记录类型有一个条目。
3. 集合条目:每个集合类型有一个条目。
4. 模式结束:表示模式结束。
记录和集合条目都有子条目,模式中有两个KEY子句,分别在记录条目和集合条目的成员子条目中,为区分,前者称为记录键,后者称为成员键。记录名称、集合名称和键名称在模式中必须唯一。Codasyl数据库必须至少有一个记录条目,但可以没有集合条目,不过1981年的规范在这一点上不太明确,因此实现中可能会有差异。
以下是模式骨架的语法表示:
```plaintext
SCHEMA NAME IS name
[CALL procedure name
[ACCESS CONTROL LOCK - --]
RECORD NAME IS name
[KEY keyname is {ASCENDING/DESCENDING} data identifier
DUPLICATES ARE { SYSTEM DEFAULT/NOT ALLOWED}]
[CHECK IS - __ ]
[CALL procedure name ]
[ACCESS CONTROL LOCK - --]
[Level number] data name
[TYPE - __
]
[OCCURS __ -
]
[SOURCE _. _ -
]
[RESULT
]
[CHECK IS __ -
]
[CALL - -
```
0
0
复制全文
相关推荐










