版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Chapter 9: 对象-关系数据库,Chapter 9: 对象-关系数据库,复杂数据类型与面向对象 SQL中的结构数据类型与继承 表继承 SQL中的Array与Multiset类型 SQL中的对象标识及引用类型 实现O-R特性 持久化程序设计语言 O-O与O-R数据库的比较,对象-关系数据模型,扩展关系数据模型: 引入面向对象及处理新增数据类型的构造. 允许元组属性具有复杂类型, 包括非原子值(如嵌套关系). 保持关系基础, 尤其是对数据的描述性存取, 同时扩展建模能力. 与现有关系语言向上兼容.,复杂数据类型,动机: 允许非原子域(原子 不可分) 非原子域的例子: 整数集合, 元组集合
2、可对具有复杂数据的应用进行更直观的建模 直观定义: 所有允许使用原子(标量)值的地方可以使用关系 关系内的关系 保持关系模型的数学基础 违反第一范式,嵌套关系例,例如: 图书馆信息系统 每本书具有 书名 作者集合 出版商 关键词集合 非1NF关系 books,嵌套关系的1NF版本flat-books,flat-books,嵌套关系的4NF分解,假设flat-books 上有下列多值依赖: title author title keyword title pub-name, pub-branch 将flat-books分解到4NF模式: (title, author) (title, keywo
3、rd) (title, pub-name, pub-branch),flatbooks的4NF分解,4NF 模式的问题,4NF设计要求用户在查询中包含连接. 通过连接4NF关系而定义的1NF视图 flat-books: 使用户不必执行连接, 但丢失了元组与文档的一一对应. 具有大量冗余 嵌套关系表示法更自然.,复杂类型与SQL:1999/SQL:2003,为支持复杂类型而对SQL进行的扩充包括: 集合体与大对象类型 嵌套关系是集合体类型的例子 结构类型 类似符合属性的嵌套记录结构 继承 面向对象 包含对象标识符和引用 我们主要基于SQL:1999和SQL:2003标准进行描述 在任何当前的数据
4、库系统中都没有完全实现 但某些特性在每个主要商业数据库系统中都存在 请参阅你的数据库系统的手册,SQL中结构类型与继承,SQL中可声明并使用结构类型 create type Name as (firstname varchar(20), lastname varchar(20) final create type Address as (street varchar(20), city varchar(20), zipcode varchar(20) not final 注: final 和 not final 指示是否可以创建子类型 结构类型可用来创建具有复合属性的表 create tabl
5、e customer ( nameName, addressAddress, dateOfBirth date) 使用点表示法来引用成员: name.firstname,结构类型 (续),用户定义的行类型 create type CustomerType as ( name Name, address Address, dateOfBirth date) not final 然后可以创建表, 该表的行具有用户定义类型 create table customer of CustomerType,方法,可以为结构类型增加方法声明 method ageOnDate (onDate date) ret
6、urns interval year 方法体单独定义 create instance method ageOnDate (onDate date) returns interval year for CustomerType begin return onDate - self.dateOfBirth; end 现在可以求出每个客户的年龄: select name.lastname, ageOnDate (current_date) from customer,继承,假设有下列关于人的类型定义: create type Person (name varchar(20), address var
7、char(20) 利用继承定义学生和教师类型 create type Student under Person (degree varchar(20), department varchar(20) create type Teacher under Person (salary integer, department varchar(20) 子类型可以在方法声明中通过用overriding method代替method来重定义方法,多重继承,SQL:1999和SQL:2003 不支持多重继承 如果类型系统支持多值继承, 可以如下定义助教类型:create type Teaching Assi
8、stant under Student, Teacher 为避免两个department 之间的名字冲突, 可以重命名 create type Teaching Assistant under Student with (department as student-dept), Teacher with (department as teacher-dept),表继承,表继承通过允许一个实体同时存在于多个表中, 使得对象可具有多个类型. 例如 people 表: create table people of Person 可定义people 的子表students 和 teachers cre
9、ate table students of Student under peoplecreate table teachers of Teacher under people 子表的类型必须是父表类型的子类型. 因此people中的每个属性也存在于子表中. 子表中的每个元组隐含地存在于其父表中. 因此查询people不仅查到直接插入其中的元组, 还能查到插入其子表students 和 teachers中的元组(仅返回people中存在的属性). 只查询people中独有的元组: 使用only people only还可用于delete和update语句, 这时子表中的元组不受更新操作影响. 在
10、概念上, 多重继承对于表也是可能的. 但SQL不支持. create table teaching-assistants of Teaching Assistant under students, teachers,对子表的一致性要求,子表元组s对应父表元组t: s在所有继承属性上与t具有相同的值. s和t表示的是同一实体 对子表的一致性要求 超表中的每条元组在每个直接子表中最多只能与一条元组对应. 例如: students 中不能有两条元组对应于同一个people元组 SQL还有一条限制: 相互对应的所有元组必须是由(插入到某个表中的)同一条元组派生的. 问: people中的元组p能同时对
11、应于students中的s和teachers中的t吗? 除非p、s和t都是因为向teaching-assistants 表插入了一条元组而隐含派生的. 但SQL并不支持多重继承,因此上述限制实际上给出了否定答案. 但可以不通过继承来表示TA, 而是通过创建单独的表: people, students和 teachers ,后两个表包含Person的键及自身的特殊属性. 添加引用完整性约束来确保数据一致性: 即students和teachers的元组必须出现在people中.,SQL中的Array与Multiset类型,SQL支持两种集合体类型: array和multiset SQL:1999开
12、始加入了array, SQL:2003开始加入了multiset set是multiset的特例 支持E-R中的多值属性的建模 array与multiset声明的例子: create type Publisher as (name varchar(20), branch varchar(20) create type Book as (title varchar(20), author_array varchar(20) array 10, pub_date date, publisher Publisher, keyword_set varchar(20) multiset ) create
13、 table books of Book 类似于嵌套关系books, 但用了作者array 而不是集合,创建及访问集合体类型的值,Array array Silberschatz,Korth,Sudarshan Multisets multiset computer, database, SQL 创建books关系所定义的类型的元组: (Compilers, arraySmith,Jones, new Publisher (McGraw-Hill,New York), multiset parsing,analysis ) 注意: 构造子函数Publisher( )需要显式创建 插入该元组到关
14、系books insert into booksvalues (Compilers, arraySmith,Jones, new Publisher (McGraw-Hill,New York), multiset parsing,analysis ),查询具有集合体值的属性,求所有具有关键词“database”的书 select titlefrom bookswhere database in (unnest(keyword_set ) 利用unnest可将集合体值转换成关系, 从而可出现在关系名能出现的地方 利用下标可访问数组的个别元素 E.g.:如果知道某本书有三个作者, 可以写出: s
15、elect author_array1, author_array2, author_array3from bookswhere title = Database System Concepts 对每本书及其每个作者, 生成关系, 包含形如“书名,作者名”的序对 select B.title, A.author from books as B, unnest (B.author_array) as A(author ) 为保持array的排序信息, 使用 unnest with ordinality select B.title, A.author, A.position from books
16、 as B, unnest (B.author_array) with ordinality as A(author, position),解嵌套(Unnesting),unnesting: 将嵌套关系转换成具有较少(或没有)关系值的属性 例如: 将嵌套关系books展开 select title, A.author, as pub_name, publisher.branch as pub_branch, K.keyword from books as B, unnest(B.author_array ) as A(author), unnest(B.keywo
17、rd_set ) as K(keyword),嵌套(Nesting),Nesting: 与unnesting相反, 创建集合体值的属性. Nesting可以用与分组聚合类似的方式进行, 只是用函数collect() 代替聚合函数来创建一个多重集. SQL:2003还提供了函数intersection( )和fusion( ) 给定关系flat_books ,对其属性keyword 进行嵌套: select title, author, Publisher (pub_name, pub_branch) as publisher, collect (keyword) as keyword_setf
18、rom flat_booksgroup by title, author, publisher 同时对author和keyword属性进行嵌套: select title, collect(author ) as author_set, Publisher (pub_name, pub_branch) as publisher, collect(keyword ) as keyword_setfrom flat_booksgroup by title, publisher,嵌套(续),创建嵌套关系的另一种方法: 在select子句中使用子查询 select title, array( select author from authors as A where A.title = B.title order by A.position) as author_array, Publisher(pub-name, pub-branch) as publisher, multiset (select ke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年汽车修理厂综合维修工职业协议样本版B版
- 2024年黄金产品销售代表合同版B版
- 2025年度智能工厂产权转让及定金支付协议范本3篇
- 2024年度大蒜种植补贴项目采购合同2篇
- 2024年环保设施运营管理服务合同
- 危重心律失常的急诊处理
- 2025年度科幻小说改编剧本创作合同3篇
- 2024版自建房房屋买卖合同
- 2024年规范保健品购销合同模板版B版
- 2024年物业管理分包协议6篇
- 压力容器风险评估报告样板
- 胃黏膜肠上皮化生
- 汽车离合器设计毕业设计(论文)
- 2023年房屋租赁管理模板
- 全部编版四年级语文下生字读音、音序、偏旁及组词
- 药物的不良反应
- 《公安机关人民警察内务条令》
- 呼吸机常见报警及处理
- 巨力索具(河南)有限公司年生产10万吨钢丝及5万吨钢丝绳项目环境影响报告
- GB/T 26254-2023家用和类似用途保健按摩垫
- 苏教版六年级数学下册第三单元第3课《练习五》公开课课件
评论
0/150
提交评论