数据库系统的ANSI标准与等价性解析
立即解锁
发布时间: 2025-08-26 00:31:20 阅读量: 5 订阅数: 14 


数据库系统原理与实践精华
### 数据库系统的ANSI标准与等价性解析
在数据库系统中,ANSI标准为数据库的设计、操作和管理提供了重要的规范和指导。下面将详细介绍ANSI网络模型和关系模型的相关内容。
#### 1. 子模式定义
子模式(subschema)是数据库模式的一种视图,它定义了用户可以访问的数据库部分。子模式的定义格式如下:
```plaintext
SUBSCHEMA subschemaname OF schemaname
{record view clause/
set view clause} ...
```
其中,`subschemaname` 是子模式的名称,`schemaname` 是所属模式的名称。记录视图子句(record view clause)和集合视图子句(set view clause)用于定义子模式中的记录和集合。
记录视图子句的指定方式为:
```plaintext
RECORD [schema record name RENAMED] record view name
{component view clause} ... /ALL}
```
组件视图子句(component view clause)的格式为:
```plaintext
ITEM [schema component name RENAMED] component view name
```
记录视图名称和组件视图名称是相关记录类型和组件类型的子模式名称,除非在相应条目中重命名,否则它们必须与模式中的名称相同。如果指定了 `ALL`,则假定包含所有模式组件。
集合视图子句的规范为:
```plaintext
SET [schema set name RENAMED] set view name
```
集合视图名称是子模式名称,除非在集合条目中重命名,否则必须与集合类型的模式名称相同。
#### 2. ANSI DM 设施
ANSI模型中的数据操作(DM)语句与宿主语言无关,这是通过将特定应用的所有DM语句分离到一个称为DBCS模块(或数据库模块)的数据库程序中来实现的。DBCS模块由一组数据库过程组成。宿主语言相关的应用程序(外部程序)通过调用模块中的适当过程并传递相关参数来调用该模块。
DBCS模块的定义如下:
```plaintext
MODULE modulename
LANGUAGE {COBOL/FORTRAN/PASCAL/PLI}
SUBSCHEMA subschemaname OF schemaname
[{temporary set specification} ...]
[{procedure} ...]
```
`LANGUAGE` 子句指定了模块的预期宿主语言,因此模块并非与宿主语言无关。语言依赖的主要原因是需要匹配外部程序和模块中过程参数的数据类型。
#### 3. 游标和临时集合类型
NDL支持数据库键和当前记录(currency)。会话中有一个当前记录(与运行单元的当前记录相同),子模式中的每个记录类型有一个当前记录,子模式中的每个集合类型有一个当前所有者记录和一个当前成员记录。这些当前记录的数据库键值由称为游标的当前指示器(currency indicators)保存。与Codasyl模型不同,NDL中集合游标包含集合类型的当前所有者和当前成员记录的数据库键值,这解决了递归集合类型的当前记录问题。
数据库键标识符(database-key-identifier)的定义为:
```plaintext
{SESSION/record view name/OWNER set view name/MEMBER set view name}
```
它返回相应当前记录的数据库键值。
NDL用临时集合类型(temporary set type)取代了Codasyl模型中的保留列表(Keeplist)。用户可以在模块中声明任意数量的临时集合类型(单元素集合),并通过 `Connect` 语句插入所需的记录集作为成员,系统定义的顺序为 `ORDER LAST`。用户可以使用 `FIND` 命令和适当的记录选择子句访问这些记录。
临时集合类型的定义如下:
```plaintext
SET set view name
```
例如,声明 `SET SET1` 被DBCS视为等同于:
```plaintext
SET SET1
OWNER SYSTEM
ORDER LAST
MEMBER R1 INSERTION MANUAL RETENTION OPTIONAL
MEMBER R2 INSERTION MANUAL RETENTION OPTIONAL
MEMBER Rn INSERTION MANUAL RETENTION OPTIONAL
```
其中,`R1 ... Rn` 是子模式中的记录视图名称(即记录类型)。
#### 4. 过程和 DM 命令
每个过程是一组DM语句的集合,有时也称为DBCS语句或DBCS函数。过程的定义如下:
```plaintext
PROCEDURE procedure name [{parameter} ...]
{statements} ...
```
参数可以包括外部程序变量,但不包括任何子模式变量(如集合视图名称、记录视图名称、组件视图名称)。参数列表可能包括三个特殊的DBCS参数:`RECORD`(传递所需记录类型的名称)、`STATUS`(传递异常条件,等同于Codasyl模型的 `DB-STATUS`)和 `TEST`(传递测试条件的结果)。
NDL支持大多数Codasyl DM语句(显著的例外是 `ORDER` 和 `USE` 命令),并增加了一些额外的命令,具体如下:
##### 4.1 打开语句
```plaintext
READY recordname {EXCLUSIVE/PROTECTED/SHARED}
{RETRIEVE/UPDATE}
```
没有单独的 `FINISH` 语句,它包含在下面的 `COMMIT` 和 `ROLLBACK` 语句中。这里是对记录类型进行打开或关闭操作,而不是对领域(realms)进行操作。
##### 4.2 记录检索语句
- **FIND 语句**:
```plaintext
FIND record-selection-format [FOR {RETRIEVE/UPDATE}]
[{ASMEMBER set name/RETAIN ALL/
RETAIN {[RECORD] [SET {set name ...}]}}]
```
记录选择格式将在后面讨论。`FOR` 和 `RETAIN` 选项的功能与Codasyl模型相同。`AS MEMBER` 子句是新的,它影响递归集合类型中集合游标的更新。如果没有 `RETAIN` 子句(`RETAIN ALL` 或集合类型的 `RETAIN` 子句),集合类型的集合游标更新遵循以下规则:
- 如果所选记录只是该集合类型中的成员记录,则该记录成为该集合类型集合游标的当前成员,该记录在该集合类型中的所有者成为该集合游标的当前所有者。
- 如果所选记录只是该集合类型中的所有者记录,则该记录成为该集合类型的当前所有者,集合游标中当前成员的位置设置为 null。
- 如果所选记录在该集合类型中既是所有者又是成员(如递归集合类型),如果指定了 `AS MEMBER` 子句,则该记录成为当前成员,其所有者成为当前所有者;如果未指定 `AS MEMBER` 子句,则所选记录成为当前所有者,集合游标中当前成员的相应位置设置为 null。
- **GET 语句**:
```plaintext
GET recordname {SET {parameter TO component name}} ...
```
`GET` 命令检索指定记录类型的当前记录,并通过 `SET` 子句将其内容从组件名称复制到参数,从而将记录组件值从子模式变量传输到外部程序中的变量。
##### 4.3 记录更新语句
- **STORE 语句**:
```plaintext
STORE recordname SET {component
```
0
0
复制全文
相关推荐










