ANSI SQL标准提供了安全系统最基本的访问控制级别,主要有以下几种。授权标识是一种区别访问数据库不同部分的基本方法,应用SQL的这种特征,根据不同的访问控制可以将数据库分给各个模式。要执行模块中的SQL语句,必须对授权标识授予必要的权限。1992 SQL标准增加了一条取消权限的REVOKE语句,使用该语句可选择性地逐级取消被授权者的权限。......
2023-10-28
关系型数据库系统的语言接口是SQL语言。因此这里讨论SQL语言的面向对象扩展问题,特别是SQL3(SQL:1999)的特征。
SQL:1999[7](原称SQL3,为了简洁,下面也称SQL3)是ISO制定的一个国际标准。可以说SQL3是为面向对象SQL(object-oriented SQL)而定义的,计划作为对象-关系数据库管理系统的基础。这类系统如Oracle公司的Oracle 8及以后的系统,原Informix公司的Universal Server,IBM公司的DB2 Universal Database等。原计划3~4年完成,结果花了将近7年的时间。与SQL-92相比,新的语言增加了面向对象的特征。
国际上,ISO/IEC JTC 1(Joint Technical Committee 1)和联合国际电工委员会(International Electrotechnical Commission)负责信息技术的标准问题。JTC 1中的分委员会SC32(数据管理与交换分技术委员会)负责数据库的标准问题,其中,WG3负责SQL标准,而WG4关注SQL/MM(SQL Multi Media,使用SQL的面向对象工具指定类型库的一套标准)。
同时,在美国,美国国家标准学会(ANSI)也在从事类似的工作,如ANSI的国家信息技术标准化委员会(National Committee for Information Technology Standardization,NCITS,前称为“X3”)。NCITS的技术委员会H2(前称为“X3 H2”)负责一些和数据管理相关的标准,包括SQL和SQL/MM。
1.类型
第一代SQL语言及其继承者是SQL-86和SQL-89,随后诞生SQL-92。作为后继,SQL:1999首先引入了以下几个新的数据类型。
第一个数据类型是大对象(LARGE OBJECT),即LOB类型。引入的原因是传统的数据类型无法满足大对象的描述。这类大对象如大型文本文件、图像数据、视频数据等。LOB类型又可以分为两种:CLOB(CHARACTER LARGE OBJECT)和BLOB(BINARY LARGE OBJECT)。
CLOB面向文本数据,BLOB面向图像、视频和二进制程序代码等。CLOB具有大部分字符串的特性,但对其有一些限制,例如不能作为主键(PRIMARY KEY),也不能限定它为唯一性(UNIQUE)。与BLOB的限制类似,LOB类型也不能用在GROUP BY或ORDER BY子句里。应用程序不能将整个LOB值存放后在数据库里传来传去,但可以使用类似指针的东西来操纵,即使用LOB指示符(LOB locator)。在SQL:1999中,指示符是一个唯一性的二进制值,可以把它看成是LOB的一个别名。可以将指示符用在操作里。
第二个数据类型是布尔值,允许SQL直接使用记录的真值true、false和unknown,例如:
WHERE COL1>COL2 AND COL3=COL4 OR UNIQUE(COL6)IS NOT FALSE
SQL:1999还有两个新的组合类型:ARRAY和ROW。ARRAY允许用户在数据库表的一列里存放成组数据,例如:
WEEKDAYS VARCHAR(10)ARRAY[7]
这个例子说明,可以在数据库的一列里存放一周7天的名字。ROW可以看成是SQL中(匿名)行的扩展,它可以让数据库的表格嵌套构造。显然,按照传统的关系数据库理论,这样嵌套的结果破坏了数据库的规范性。
2.谓词
谓词也是SQL:1999的新增特色。按照标准定义,谓词定义如下:
<p redi cate>::=
<compar ison predicate>
|<between predicate>
|<in p redicate>
|<l ike p redi cate>
|<nu l l p redi cate>
|<quant i f ied compar ison predicate>
|<exis ts predi cate>
|<unique predi cate>
|<mat ch p redi cate>
|<over laps p redi cate>
|<simi lar predicate>
|<dis t inc t p redi cate>
|<t ype p redi cate>
SQL:1999包含几个新的谓词,其中类型测试谓词与面向对象概念密切相关。类型测试谓词的定义如下:
<t ype p redi cate>::=
<user-de f ined t ype val ue exp ression>IS[NOT]OF
<l e f t paren><type l is t><r ight paren>
<t ype l ist>::=
<user-de f ined t ype spec i f icat ion>
[{<comma><user-def ined t ype spec i f i cat ion>}...]
<user-de f ined t ype spec i f icat ion>::=
<inc lusive user-def ined t ype spec i f i cat ion>
|<exc lusive user-def ined type speci f icat ion>
<inc lusive user-def ined t ype spec i f i cat ion>::=
<user-de f ined t ype>
<exc lusive user-def ined t ype spec i f i cat ion>::=
ONLY<user-def ined type>
注意SIMILAR和DISTINCT两个谓词。
第一版SQL标准中有LIKE谓词,可以用来满足子串匹配,例如:
where NAME LIKE'% hong'表示匹配NAME值中有准确匹配的子串hong才为真。
SQL:1999的SIMILAR谓词对此进行了扩展,使得更适用于模式匹配,例如:(www.chuimin.cn)
where NAME SIMILAR TO'(SQL-(86|89|92|99))|(SQL(1|2|3))'
DISTINCT谓词与常规的UNIQUE谓词类似,主要区别在于NULL值。DISTINCT谓词把两个NULL值看成非distinct。
3.新的语义、安全性和其他
SQL:1999对视图的范围进行了扩展,使之可以直接更新。此外,SQL:1999提供了一种称为递归查询(recursive query)的功能,例如:
WITH RECURSIVE
Q1 AS Se l ec t...f rom...where...,
Q2 AS Se l ec t...f rom...where...Se l ec t...f rom Q1,Q2 where...
这样,对于ARRAY和LOB值来说,处理起来更方便。
SQL:1999还增加了savepoints的功能。SQL:1999的安全性提升也要注意,尤其是角色(role)支持功能。有了角色支持,安全性有了更好的保证。
SQL:1999具备一定的主动数据库功能,这里起作用的是触发器,例如:
Create TRIGGER log_salupdate
BEFOREUpdate OF sal ar y
ON emp loyees
REFERENCING OLD ROW as ol drow NEW ROW as newrow FOR EACH ROW
Inser t INTO l og_tabl e
VALUES(CURRENT_USER,o l drow.sal ar y,newrow.sa l ar y)
这个触发器表示在修改雇员的薪水时,要注意保存日志,将原来的数据记录为NEW ROW,将新的数据记录为EACH ROW。
触发器在使数据库获得主动功能上是十分有用的工具。触发器的用途很广,例如,可以使用触发器保证人的年龄只能增加不能减少、年龄不能为负数,等等。
对关系模型的重要扩展可以表达在用户自定义类型上:SQL:1999支持面向对象特性,允许结构化用户定义的类型,也允许属性深度嵌套。还有方法和过程的支持,允许构造类型层次,从而让子型具有继承的性质,例如:
从以上语句可以看出,用户定义的新类型emp_type是person_type的一个子型,所以具有继承性。换言之,雇员(employee)继承人(person)具有的所有属性(如姓名、地址等)也有自己定义的新属性:工号(EMP_ID)和工资(SALARY)等。
注意,有些面向对象程序设计语言允许对封装(encapsulation)分级,例如可分为PUBLIC、PRIVATE或PROTECTED,但SQL:1999尚未提供此功能。
4.函数和方法
与SQL调用函数不同,SQL:1999包含SQL调用的方法。简言之,可将方法看成一个函数,但有一定的限制和提升。它们之间的具体区别:方法与用户定义的类型密切关联。
存取一个用户定义类型可以采用两种不同的表示方法,即函数表示法与Dot表示法。
Dot表示法为:
where emp.sa lar y>10000
函数表示法为:
where sa l ar y(emp)>10000
SQL:1999同时支持这两种表示法。这可以看成是同一个事物的不同描述。
5.SQL3的数据类型
与SQL3数据类型对应的是方法,get XXX方法用于获得结果集,set XXX方法负责存储,updateXXX用于更新,如表15.1所示。
表15.1 SQL3类型所对应的方法
下面是查阅一个学生成绩的例子,输出方式是一次读出它们。
这里,变量“成绩”(scores)是一个指向SQLARRAY的指针,这个学生的学号是20060821。
下面是一个用于登记成绩的例子。
6.Blob、Clob、Array对象和类型
Blob、Clob和Array对象是新的SQL的一个重要特征。SQL BLOB、CLOB或ARRAY对象可以非常大,从而大大改善数据库系统的性能,尤其是对多媒体数据、流媒体数据管理来说。
SQL的结构化用户定义类型(user-defined types,UDTs)可以采用CREATE TYPE语句实现,例如:
这个例子定义了平面上的点,两个属性分别是X值和Y值。Collection类型定义在集合(set)、列表(list)等上,例如:
Create TABLE employees(id INTEGER PRIMARY KEY,name VARCHAR(30),address ROW(street VARCHAR(40),city CHAR(20),start CHAR(2),zip INTEGER),projects SET(INTEGER),children LIST(person),hobbies SET(VARCHAR(20)));
有关分布式数据库技术的文章
ANSI SQL标准提供了安全系统最基本的访问控制级别,主要有以下几种。授权标识是一种区别访问数据库不同部分的基本方法,应用SQL的这种特征,根据不同的访问控制可以将数据库分给各个模式。要执行模块中的SQL语句,必须对授权标识授予必要的权限。1992 SQL标准增加了一条取消权限的REVOKE语句,使用该语句可选择性地逐级取消被授权者的权限。......
2023-10-28
为了提供恰当的对象存取,这些关系本质上可以将持久对象引导到物理分组。对象分组不太容易实现有两个原因。简单来说,如果给定一个类图,则可有三个基本的对象分组存储模型。然而,只有LOID允许对象的垂直分割和继承关系。主要困难是对象的父母被删除时,这个对象要重新分组。分布式系统中,DSM和NSM适合直接使用水平分割。......
2023-10-28
对象从一个节点移动到另外一个节点,这是分布式系统的一个显著特点。这样就产生了新的问题,即对象迁移问题。另外一个问题是必须跟踪对象移动,以便能在其新地点找到该对象。处于激活或等待的对象不允许迁移,否则,会被阻塞。因为对象移动时,必须更新系统目录,以反映新的位置。组合对象的移动会涉及其参考的其他对象的移动,如对象组装方法。......
2023-10-28
图18.8传统数据库上的SQL引擎传统数据库上的SQL引擎如图18.8所示。数据修改成为HDFS的固有局限。简单来说,SQL大数据引擎必须应对这些挑战。概括起来,大数据上的SQL引擎主要包含四种不同的方案。这种Hadoop引擎上的SQL优势在于执行特定SQL查询和实施数据调查与发现,可以直接用于数据分析,在BI工具上自动生成SQL代码。图18.9在Hadoop上构建SQL引擎的方法3.减少SQL查询延迟的方法数据规模和I/O开销越大,查询所需要花费的时间越长。......
2023-10-28
SQL语言是关系数据库的国际标准语言。1992年通过的SQL标准称为SQL2,于1999年再次更新为SQL99或SQL3标准。将SQL嵌入宿主语言,还需要提供对选出的数据进行面向逐个......
2023-10-28
几乎所有的对象查询处理器都使用关系型系统定制开发的优化技术。通过继承层次存取对象的优化也是面向对象和关系查询处理相区别的问题。图15.8对象查询处理方法对象的复杂结构及其上面提及的那些与关系查询的四点主要差异导致对象查询的优化和关系查询比较有很大不同。查询优化器可以计算整棵处理树的成本。......
2023-10-28
对象的分布设计比前面介绍的关系分布要复杂。对此,分割类是不容易的,原因是对象模型本身的难度。考虑到类和型的问题,对象世界里的分布设计由于对象状态和方法封装在一起而产生了新的问题。,Cn是不相交的。路径分片是将组合对象分组形成一个分片的概念。这样,索引包含一个指向组合对象的所有成分的指针,避免浏览类......
2023-10-28
瞬时对象标识的实现与所使用的程序设计语言有关。对于永久对象标识,可以是物理标识也可以是逻辑标识。注意,选定对象的大小也很重要,使用小对象,导致对象标识数量大,可能会使得OID表十分大。所以,对象标识管理与对象存储技术密切相关。在对象存取期间,如果LOID里的服务器标识部分不直接用在对象定位标示上,则对象标识符起的是纯LOID的作用。在磁盘上通常采用对象标识符作为指针。......
2023-10-28
相关推荐