首页 > 知识点讲解
       复杂类型
知识路径: > 数据库技术 > 数据库标准语言—SQL > SQL-99所支持的对象关系模型 > 
相关知识点:16个      
        嵌套关系只是对基本关系模型扩展的一个实例,其他非原子数据类型,如嵌套记录,同样已被证明是有用的。面向对象数据模型已经导致了对于诸如对象的继承和引用之类特征的需求。有了复杂对象系统和面向对象,我们能够直接表达E-R模型的一些概念,如实体标识、多值属性及一般化和特殊化,而不再需要经过到关系模型的复杂转化。
        在本节中,主要描述为允许复杂类型对SQL所做的扩展,包括嵌套关系以及面向对象特征。我们的介绍是基于SQL-99标准的一些特征。
               集合类型
               考虑下面这个代码段:
               
               这个表的定义不同于普通关系数据库中表的定义,因为它允许属性是集合(set),所以E-R图中的多值属性能够直接表示。
               集合是集合体类型(collection type)的一个实例,其他的集合体类型包括数组(array)和多重集合(multiset)(即无序的集合体,其中一个元素可以出现多次),下面的属性定义了数组的声明:
               
               这里author-array是最多10位作者名的数组,我们可以通过指定数组下标来访问数组中的元素,例如author-array[1],author-array[2],…,author-array[10]。数组是SQL-99中唯一支持的集合体类型,使用语法如前所述。SQL-99不支持无序集合或多重集合,尽管它们可能会在SQL将来的版本中出现。
               许多现在的数据库应用需要存储的属性很大(大约几千字节),比如一个人的相片,或者更大的(大约几兆甚至上吉字节),比如高分辨率的医学图像或者录像剪辑。因此SQL-99提供了新字符型数据大对象数据类型(clob)和二进制数据大对象数据类型(blob)。数据类型中的“lob”意为“Large Object”。例如,声明属性:
               
               执行一个SQL查询通常把结果中的一条或多条记录放入内存。大对象一般用于外部的应用,把整个大对象(几M甚至上G字节)放入内存中是非常低效和不现实的。即通过SQL对它们进行全体检索是毫无意义的,取而代之,应用程序一般用一个SQL查询来检索大对象的“定位器”,然后用定位器从宿主语言中一点一点地操作该对象。例如,JDBC允许程序员分成小片来存取一个大对象,而不是一次全取出来,很像从操作系统文件中存取数据。
               结构类型
               在SQL-99中结构类型声明以及使用方法如下例所示。
               复杂类型值的创建
               在SQL-99中构造器函数(constructor function)用来创建结构类型的值。与结构类型同名的函数就是这个结构类型的构造器函数。
               然后我们可以用Publisher('McGraw-Hill','New York')来创建Publisher类型的值。
               SQL-99也支持除构造器之外的其他函数。这些函数的名字必须不同于任何结构类型的名字。注意在SQL-99中,不像在面向对象数据库中,构造器创建的是类型的一个值,而不是类型的一个对象。也就是说,构造器创建的值没有对象标识。在SQL-99中对象相当于关系中的元组,通过在关系中插入一个元组来创建。
               默认的情况下,每一个结构类型都有一个不带参数的构造器,它将属性设为默认值。任何其他的构造器必须被显式地创建。对同一个结构类型可以有不止一个构造器,虽然它们有一个相同的名字,但是它们必须以参数的个数和类型来相互区别。
               在SQL-99中可以这样创建数组的值:
               
               我们可以在圆括号中列出它的属性来构造一行的值。例如,我们声明Publisherl属性为一个行类型,我们可以这样构造它的值:
               
               它没有用到构造器。
               通过在关键字set之后的圆括号内列举它的元素的方法创建以集合为值的属性,例如keyword-set。可以像集合值一样创建多重集合值,此时只需要用multiset替换set。
               可以创建用一个books关系定义的类型的一个元组如下:
               
               这里通过合适参数调用Publisher的构造器函数创建了Publisher属性的值。如果想在books关系中插入上述元组,可以执行语句:
               
 
 相关知识点:
 
软考在线指南
优惠劵及余额
在线支付
修改密码
下载及使用
购买流程
取消订单
联系我们
关于我们
联系我们
商务合作
旗下网站群
高级资格科目
信息系统项目管理师 系统分析师
系统架构设计师 网络规划设计师
系统规划与管理师
初级资格科目
程序员 网络管理员
信息处理技术员 信息系统运行管理员
中级资格科目
系统集成项目管理工程师 网络工程师
软件设计师 信息系统监理师
信息系统管理工程师 数据库系统工程师
多媒体应用设计师 软件评测师
嵌入式系统设计师 电子商务设计师
信息安全工程师
 

本网站所有产品设计(包括造型,颜色,图案,观感,文字,产品,内容),功能及其展示形式,均已受版权或产权保护。
任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
本站部分内容来自互联网或由会员上传,版权归原作者所有。如有问题,请及时联系我们。


工作时间:9:00-20:00

客服

点击这里给我发消息 点击这里给我发消息 点击这里给我发消息

商务合作

点击这里给我发消息

客服邮箱service@rkpass.cn


京B2-20210865 | 京ICP备2020040059号-5 |京公网安备 11010502032051号 | 营业执照 | Copyright ©2000-2023 All Rights Reserved 软考在线版权所有