对象关系特性_ 对象数据库对SQL的扩展


在DBMS中,存在结合了对象数据库元素和SQL的对象关系特性。SQL语言用于关系数据库,并且它随着时间推移而不断发展。在名为SQL:2008的最新标准中,已经加入了对象特性,尽管并非所有商业DBMS都已实现这些特性。

对象关系模型指的是关系模型与对象数据库增强的组合。SQL也进行了修订,以包含与XML相关的特性。

以下是SQL中包含的一些对象数据库特性:

类型构造器

添加了新的类型构造器来指定复杂对象。例如,行类型对应于元组或结构体构造器,而数组类型允许指定集合。其他集合类型构造器,如集合、列表和包,最初并非SQL/Object的一部分,但后来被包含在标准中。

对象标识

通过使用引用类型提供了一种指定对象标识的机制。这有助于区分数据库中的不同对象。

封装

操作可以封装在用户定义类型 (UDT) 中。这些类型可以在其声明中包含操作。UDT类似于编程语言中的抽象数据类型。用户定义例程 (UDR) 包含通用方法的定义。

继承

使用关键字“UNDER”支持继承机制。对象可以继承其他对象的属性和行为。这些创建分层结构。

这些对象关系特性扩展了SQL的功能。这些是灵活的模型数据结构,并支持高级数据操作。

DBMS中对象的自定义类型和复杂结构

为了创建复杂结构的对象并将类型声明与表创建分开,DBMS现在支持用户定义类型 (UDT)。包含了四种集合类型来处理多值类型和属性,允许指定复杂结构的对象,而不仅仅是简单的记录。

要创建UDT,用户可以使用以下语法将其定义为数据库模式的一部分:

CREATE TYPE TYPE_NAME AS (<component declarations>);

DBMS中使用引用类型的对象标识符

可以使用SQL中的引用类型创建唯一对象标识符。这些标识符是由系统生成的,并确保每个对象都有不同的标识符。也可以使用来自基本关系模型的传统键,而不是系统生成的标识符。

为表中的各个行创建系统生成的 对象标识符。语法如下:

REF IS <OID_ATTRIBUTE> <VALUE_GENERATION_METHOD>;

这里,<OID_ATTRIBUTE> 指的是属性。它将用于标识表中的每个元组。<VALUE_GENERATION_METHOD> 选项是“SYSTEM GENERATED”或“DERIVED”。使用“SYSTEM GENERATED”时,系统会自动为每个元组生成唯一的标识符。另一方面,当使用“DERIVED”时,将应用使用用户提供的主键值来标识元组的传统方法。

在DBMS中基于用户定义类型 (UDT) 创建表

当用户定义UDT时,可以基于该UDT创建一个或多个表。不可实例化的UDT只能用作属性类型,不能用作创建表的依据。

操作的封装

用户定义类型可以通过在SQL中定义方法来拥有自己的行为规范。指定带有方法的UDT的语法如下:

CREATE TYPE <TYPE-NAME> (
   <LIST OF COMPONENT ATTRIBUTES AND THEIR TYPES>
   <DECLARATION OF FUNCTIONS (METHODS)>
);

SQL为用户定义类型提供内置函数。构造函数创建一个新的UDT类型对象,并将每个属性初始化为其默认值。为每个属性创建一个观察器函数以读取其值。一个更改器函数使用新值更新属性。这些函数可以阻止公众使用,需要EXECUTE权限才能访问它们。

UDT可以有多个用户定义函数与其关联。函数可以是用SQL编程语言编写的内部SQL函数,也可以是用宿主语言编写的外部函数。UDT中的属性和函数可以分为公共(在UDT接口可见)、私有(在UDT接口不可见)和受保护(仅对子类型可见)。虚拟属性也可以在UDT中定义,它们是使用函数计算和更新的。

指定函数的继承和重载

SQL使用UNDER关键字支持类型继承。属性和实例方法都继承自超类型。UNDER子句中超类型的顺序决定了继承层次结构。子类型可以重新定义其超类型中定义的任何函数,只要签名保持不变。调用函数时,将根据参数的类型选择最佳匹配。SQL还考虑参数的运行时类型进行动态链接。

表继承是SQL中的另一个特性,允许子表继承自超表。这使用UNDER关键字指定。当将记录插入子表时,它也会插入其超表,并且INSERT、DELETE和UPDATE之类的操作会适当地传播。

通过引用指定关系

一个元组的组件属性可以使用REF关键字作为对另一个表中元组的引用。SCOPE关键字指定可以由引用属性引用的表的名。这类似于外键,但使用系统生成的值而不是主键值。

要引用元组和行类型的组件属性,SQL使用点表示法。对于具有REF类型的属性,使用取消引用符号“->”。例如,查询SELECT E.Employee->NAME从EMPLOYMENT表中检索在名为'ABCXYZ'的公司工作的员工的姓名。

SQL提供SCOPE关键字,使引用属性指向相同类型的特定表中的元组,从而允许引用相同类型的多个关系中的元组。

更新于:2023年5月18日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告