对象关系数据库系统(ORDBS)是面向对象数据模型(Object Oriented Data Model, 简称OO模型)和关系数据模型相结合的产物
面向对象数据库系统支持OO模型
1.OO模型的核心概念
对象的定义:是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位。 (由属性集合和方法集合组成)
对象标识OID:面向对象数据库中的每个对象都有一个唯一的不变的标识称为对象标识(OID) 。
在OODB中,一个对象是某一类的一个实例。
=====================================
2.类层次和继承
相似的对象之间的公共属性和方法部分可以统一定义,各自的特殊属性和方法部分可以分别定义。为此,面向对象数据结构给出了类层次结构。
单继承:一个子类只能继承一个超类的特性(包括属性和方法)
层次结构图是一棵树
多重继承:一个子类能继承多个超类的特性
层次结构图是一个带根的有向无回路图
继承性的优点
第一,建模的有力工具,提供了对现实世界简明而精确的描述。
第二,提供了信息重用机制。
=======================================
3.对象嵌套
设Obj1和Obj2是两个对象。如果Obj2是Obj1的某个属性的值,称Obj2属于Obj1,或Obj1包含Obj2
=======================================
4.关系数据模型与OO模型的比较
可扩展的标记语言,相对于HTML,XML具有如下的一些特点: ▪ 更多的结构和语义 ▪ 可扩展性 ▪ 自描述性 ▪ 数据与显示分离 ▪ 简洁性
1.文档类型定义DTD
用来描述XML文档的结构,类似于模式的概念
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>
带DTD的XML文档实例:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
以上 DTD 解释如下: !DOCTYPE note (第二行)定义此文档是 note 类型的文档。 !ELEMENT note
(第三行)定义 note 元素有四个元素:“to、from、heading,、body” !ELEMENT to (第四行)定义 to
元素为 “#PCDATA” 类型 !ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型 !ELEMENT
heading (第六行)定义 heading 元素为 “#PCDATA” 类型 !ELEMENT body (第七行)定义 body
元素为 “#PCDATA” 类型
2.XML Schema
用XML来定义其文档的模式,支持对结构和数据类型的定义(XML Schema 最重要的能力之一就是对数据类型的支持。)
同样的元素定义使用XML Schema编写:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
3.DTD和XML Schema比较
============================================
XMLQuery函数
❖ XML数据的查询语言
❖ SQL/XML提供将XQuery嵌入SQL的机制,对存储在关系
数据库中的XML数据可以用XQuery进行查询
❖ 返回的数据类型为XML
实例: 选出价格低于80的所有英文书,返回价格和作者名
SELECT XMLQUERY(
‘for $bib in $doc/bib[lang/text()='English'],
$book in $bib//book
WHERE $book/@price < 80
RETURN <bookInfo> {$book/@price},{$book/author/name} </bookInfo>'
PASSING bib AS "doc" RETURN CONTENT) AS "result"
FROM bookstore;
XMLTable函数
从XML数据中提取信息,返回结果是一个二维的关系
表(列的定义用XPath路径表达式)
实例:选出价格低于80的英文书,显示书名、作者名、出版年 份和价格(返回关系表的格式)。
SELECT T.title,T.author,T.year,T.price
FROM bookstore AS B,
XMLTABLE( 'for$bib in $doc/bib[lang/text()='English'],
$book in $bib//book WHERE $book/@price < 80
RETURN $book'
PASSING B.bib AS "doc"
COLUMNS "title" VARCHAR(100) PATH './title',
"year" INTEGER PATH './year',
"price" DOUBLE PATH './@price',
"author" VARCHAR(30) PATH './author/name' )
AS T;
XMLExists
检查XQuery查询在XML数据上的执行结果是否为非空,如果查询结果是一个空序列,则谓词返回假,否则为真
实例:查询标了价格的所有书目。
SELECT id,bib
FROM bookstore
WHERE XMLEXISTS(' $doc/bib/book/@price' PASSING bib AS "doc");