SQL 语言:对象关系数据模型


对象关系数据模型扩展关系数据模型的方式是通过提供一个包括复杂数据类型和面向对象的更丰富的类型系统。

嵌套关系

嵌套关系模型(Nested Relational Model)是关系模型的一个扩展,域可以是原子的也可以赋值为关系。这样元组在一个属性上的取值可以是一个关系,于是关系可以存储在关系中。从而一个复杂对象就可以用嵌套关系的单个元组来表示。如果我们将嵌套关系的一个元组视为一个数据项,在数据项和用户数据库观念上的对象之间就有了一个一一对应的关系。

图书馆示例,每本书存储有书名、作者集合、出版商、关键字集合四种属性。如果这些信息定一个关系,下面的属性将是非原子的:

1)作者。一本书可能有一组作者。

2)关键字。一本书存储了一组关键字,我们希望能够检索出关键字包含该集合中的一个或多个关键字的所有书,这样就将关键字集合域视为非原子的。

3)出版商。与关键字和作者不同,出版社没有一个以集合为值的域。但是,我们可能将出版商视为由名字和分支机构这两个子字段组成的,使得出版商域成为非原子的。

定义一个示例关系 books,该关系是1NF, 如下:

image

假如需要访问单个作者和单个关键字,可以对 books 关系进行拆解,得到 flat-books 关系1NF如下:

image

如果 title→→author、title→→keyword、title→pub-name, pub-branch 是多值依赖,我们可以进一步把这个关系拆解成4NF,使得 flat-books 关系的冗余去除。拆解后关系和示例如下:

                  authors(title, author)

                  keywords(title, keyword)

                  books4(title, pub-name, pub-branch)

image

4NF 设计要求用户她们的查询包含连接操作,因此使得交互复杂化。

面向对象数据库系统支持面向对象数据模型,是一个持久的、可共享的对象库的存储和管理者,而一个对象库是由一个OO模型所定义的对象的集合体。

对象:是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位。对象之间的界面由 一组消息定义。 一个对象包括属性集合、方法集合和消息集合。

对象标识:是指面向对象数据库中的每个对象都有一个唯一不变的标识。常用的几种标识有值标识、名标识和内标识。

  • 值标识,使用一个值来标识,在关系数据库中通常使用这种形式的标识。例如,一个元组的主码标识了这个元组。
  • 名标识,用用户提供的名称作为标识。这种形式的标识通常用于文件系统中的文件,不管文件的内容是什么,每个文件都被赋予一个名称来唯一标识。
  • 内标识,是建立在数据模型或程序设计语言中内置的一种标识,不需要用户给出标识。面向对象系统中使用这种形式的标识,每个对象在创建时被系统自动赋予一个标识符。

封装:OO模型的一个关键概念就是封装。每一个对象是其状态和行为的封装。封装是对象的外部界面与内部实现之间实行清晰隔离的一种抽象,外部与对象的通信只能通过消息。

:共享同样属性和方法集的所有对象构成了一个对象类(简称类)。例如,学生是一个类,黎明、张军、樊建喜是学生类中的一个对象。类是“型”,对象是“值”。

复杂类型

集合类型

集合是集合体类型(collection type)的一个实例,其他的集合体类型包括数组(array)和多重集合(multiset)(即无序的集合体,其中一个元素可以出现多次)。

SQL-99还提供了新字符型数据大对象数据类型(clob)和二进制数据大对象数据类型(blob)。

create table books(
keyword-set setof(varchar(2))
,author-array varchar (20) array [10]
,book-review clob (10KB) 
,image blob (10MB)
,movie blob (2GB)
);

复杂类型值的创建

在SQL-99中构造器函数(constructor function)用来创建结构类型的值。与结构类型同名的函数就是这个结构类型的构造器函数。

示例20. 给Publisher类型声明一个构造器。

create function Publisher (n varchar(20),b varchar(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有请小发菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值