第13章 面向对象数据库
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对复杂数据类型的需求 面向对象数据模型 面向对象语言 持久性程序设计语言 持久性C++ 系统 持久性 持久性JAVA 系统 持久性
Database System Concepts
8.2
©Silberschatz, Korth and Sudarshan
对复杂数据类型的需求
数据处理中的传统数据库应用具有简单数据类型
8.15
©Silberschatz, Korth and Sudarshan
对象标识
即使某些或全部变量的值或方法定义随时间改变, 即使某些或全部变量的值或方法定义随时间改变 对象仍保持其身份. 对象仍保持其身份 对象标识是一个比非面向对象的程序语言或数据模 型中对应概念更强的标识概念. 型中对应概念更强的标识概念
一个person 可以具有 可以具有student, teacher 或footballPlayer 等角色 等角色, 一个 或者任何组合 例如, 例如 踢足球的学生助教
角色” 可用多重继承建模对象的 “角色 角色
即, 允许对象具有多个类型
但许多系统坚持对象必须具有最具体类 但许多系统坚持对象必须具有最具体类
类从它的所有超类继承变量和方法 存在歧义的可能: 当从两个超类A和 继承同名变量 消息N时 继承同名变量/消息 存在歧义的可能 当从两个超类 和B继承同名变量 消息 时
若该变量/消息是在共享的超类中定义的则没有问题 若该变量 消息是在共享的超类中定义的则没有问题 否则, 否则 采用如下方法之一 标志为出错, 标志为出错 重命名变量 (A.N 和B.N) 选择其一. 选择其一
对象类
相似对象组成类 每个对象称为它的类的实例 相似对象组成类; 每个对象称为它的类的实例 一个类中所有对象具有相同的
具有相同类型的变量, 具有相同类型的变量 消息接口 方法 赋给变量的值可能不同
例如: 例如 所有人对象组成 person 类 类与E-R模型中的实体集相似 模型中的实体集相似 类与
应用
CAD, CASE 多媒体与图像数据库, 文档/超文本数据库 多媒体与图像数据库 文档 超文本数据库
Database System Concepts
8.3
©Silberschatz, Korth and Sudarshan
面向对象数据模型(略讲) 面向对象数据模型(略讲)
对象大体上对应于 对象大体上对应于E-R模型中的实体 大体上对应于 模型中的实体 面向对象是基于将与一对象有关的代码与数据封装 面向对象是基于将与一对象有关的代码与数据封装 成一个单位的思想. 成一个单位的思想 类似E-R模 面向对象数据模型是一个逻辑数据模型 (类似 类似 模 型). 使面向对象程序设计风格(e.g., Smalltalk, C++)适应 使面向对象程序设计风格 适应 数据库系统
例如, 与两条消息get例如 属性 address 可用变量 address 与两条消息 address 和 set-address表示 表示 为方便起见, 为方便起见 许多面向对象数据模型都允许直接存取其他对 象的变量. 象的变量
Database System Concepts
8.6
©Silberschatz, Korth and Sudarshan
每个雇员是人; 所以employee 是person 的特例 每个雇员是人 所以 同样, 也是person 的特例 的特例. 同样 customer 也是 创建类 person, employee and customer
对所有人都适用的变量/消息与类 对所有人都适用的变量 消息与类person关联 关联. 消息与类 关联 雇员所特有的变量/消息与类 雇员所特有的变量 消息与类employee关联 消息与类 关联 客户所特有的变量/消息与类 客户所特有的变量 消息与类customer 关联 消息与类
. . .
Database System Concepts 8.11 ©Silberschatz, Korth and Sudarshan
类层次例
的对象的完整变量列表: 类officer 的对象的完整变量列表
office-number, expense-account-number: 局部定义 start-date, salary: 从employee 继承 name, address: 从person 继承
Database System Concepts
8.4
©Silberschatz, Korth and Sudarshan
对象结构
对象具有: 对象具有
变量集合 包含对象的数据. 变量值本身也是对象. 变量集合: 包含对象的数据 变量值本身也是对象 集合 消息集合 对象对消息进行反应; 消息可具有零, 消息集合: 对象对消息进行反应 消息可具有零 一个 集合 或多个参数 参数. 或多个参数 方法集合 实现消息的代码体 方法返回一个值作为 方法集合: 实现消息的代码体; 集合 对消息的反应 对消息的反应
第4部分 对象数据库
第13章 面向对象数据库 章 面向对象数据库(OODB) 关系数据库(ORDB) 第14章 对象 关系数据库 章 对象-关系数据库
Database System Concepts
8.1
©Silberschatz, Korth and Sudarshan
第13章 面向对象数据库 13章
若某对象属于多个类, 即, 若某对象属于多个类 则必须存在这些类的一个共同子类 创建子类student-teacher 与student-teacher-footballPlayer 创建子类 当有许多可能的组合时, 当有许多可能的组合时 为每种组合创建子类会很麻烦
Database System Concepts
Database System Concepts
8.7
©Silberschatz, Korth and Sudarshan
类定义例
class employee { /*Variables */ string name; string address; date start-date; int salary; /* Messages */ int annual-salary(); string get-name(); string get-address(); int set-address(string new-address); int employment-length(); };
在严格的封装中还需要用来读与设置其他变量的值的方法 方法单独定义
如: int employment-length() { return today() – start-date;} int set-address(string new-address) { address = new-address;}
2. 类employee 的外延仅包含不属于子类 的外延仅包含不属于子类officer, teller 或secretary的 的 雇员对象
这是OO系统通常的做法 系统通常的做法 这是 可访问子类的外延求所有子类对象
Database System Concepts
8.12
©Silberschatz, Korth and Sudarshan
注意与E-R模型中的ISA层次的相似性
Database System Concepts
8.10
©Silberschatz, Korth and Sudarshan
类层次定义
class person{ string name; string address: }; class customer isa person { int credit-rating; }; class employee isa person { date start-date; int salary; }; class officer isa employee { int office-number, int expense-account-number, };
Database System Concepts
8.9
©Silberschatz, Korth and Sudarshan
继承
类组织成一个特化 / IS-A 层次
属于类person的变量 消息被类 的变量/消息被类 属于类 的变量 消息被类employee 和customer 继承 结果构成一个类层次 结果构成一个类层次
数据的物理表示仅对对象的实现者可见 消息与反应提供了对象的唯一的外部界面 消息这个词不必意味着物理上的消息传递. 消息这个词不必意味着物理上的消息传递 消息 可以实现为过程调用 可以实现为过程调用
Database System Concepts 8.5 ©Silberschatz, Korth and Sudarshan
8.16
©Silberschatz, Korth and Sudarshan
对象标识
对象标识用于唯一标识对象 对象标识用于唯一标识对象
对象标识是唯一的 对象标识是唯一的: 唯一的 没有两个对象具有相同的标识 每个对象只有一个标识 例如, 对象的spouse 字段可以是另一个 字段可以是另一个person对象的标识 对象的标识. 例如 person对象的 对象的 对象的标识 可保存为一对象的字段, 用来引用另一对象. 可保存为一对象的字段 用来引用另一对象 可以是 由数据库创建), 系统生成的 (由数据库创建 或 由数据库创建 如社会安全号) 外部的 (如社会安全号 如社会安全号 系统生成的标识: 系统生成的标识 更易用, 更易用 但不能跨数据库系统使用 如果已存在唯一标识则冗余
同变量一样还继承方法. 同变量一样还继承方法 类的任何方法可以被属于其子类的任何对象调用. 可替换性 — 类的任何方法可以被属于其子类的任何对象调用 类外延(extent): 类中所有对象的集合 两种选择 类中所有对象的集合. 两种选择: 类外延
1. 类employee 的外延包含所有 的外延包含所有officer, teller 和secretary 对象 对象.
多重继承
多重继承使一个类可有多个超类. 多重继承使一个类可有多个超类
子类联系可表示为有向无圈图 类/子类联系可表示为有向无圈图 子类联系可表示为有向无圈图(DAG) 当对象有多种相互独立的分类方式时尤其有用 E.g. 临时 永久独立于 临时/永久独立于 永久独立于Of源自文库icer/secretary/teller 为每一种子类组合创建一个子类 – 不必为数据库中不可能出现的子类组合创建子类
消息与方法
方法是用通用语言写的程序, 方法是用通用语言写的程序 具有下列特性
变量仅在对象本身内部可以直接引用 其他对象的数据只能通过发送消息引用. 其他对象的数据只能通过发送消息引用
方法分为read-only 和 update 方法 方法分为
只读方法不改变对象的值
严格地说, 实体的每个属性都必须表示为一个变量和 严格地说 两个方法, 一个用于读属性, 两个方法 一个用于读属性 另一个用于更新
Database System Concepts
8.8
©Silberschatz, Korth and Sudarshan
继承
例如, 银行客户类与银行雇员类相似, 例如 银行客户类与银行雇员类相似 尽管有不同之处
两者可以共享某些变量和消息, 两者可以共享某些变量和消息 如 name 与address. 两者也各有特殊变量和消息, 如雇员的salary 和客户的 和客户的credit-rating. 两者也各有特殊变量和消息 如雇员的
数据值; 例如关系系统中所用的主键值. 值 – 数据值 例如关系系统中所用的主键值 名 – 由用户提供 用于过程中的变量 由用户提供; 用于过程中的变量. 数据模型或程序语言内建的标识. 内建 – 数据模型或程序语言内建的标识 不需用户提供标识. 不需用户提供标识 面向对象系统采用的标识形式
Database System Concepts
相对较少的数据类型, 相对较少的数据类型 第一范式成立
近年来复杂数据类型越来越重要
例如: 例如 地址可处理为 单个字符串, 单个字符串 或者 为每个子部分用一单独的属性, 为每个子部分用一单独的属性 或者 (不属于第一范式 不属于第一范式) 复合属性 (不属于第一范式) 例如: 例如 允许直接存储多值属性而不是创建单独的第一范式关系存储通 常更方便
Database System Concepts
8.13
©Silberschatz, Korth and Sudarshan
多重继承例
银行例的类DAG
Database System Concepts
8.14
©Silberschatz, Korth and Sudarshan
多重继承例
一个对象可以同时属于多个子类
Database System Concepts
8.2
©Silberschatz, Korth and Sudarshan
对复杂数据类型的需求
数据处理中的传统数据库应用具有简单数据类型
8.15
©Silberschatz, Korth and Sudarshan
对象标识
即使某些或全部变量的值或方法定义随时间改变, 即使某些或全部变量的值或方法定义随时间改变 对象仍保持其身份. 对象仍保持其身份 对象标识是一个比非面向对象的程序语言或数据模 型中对应概念更强的标识概念. 型中对应概念更强的标识概念
一个person 可以具有 可以具有student, teacher 或footballPlayer 等角色 等角色, 一个 或者任何组合 例如, 例如 踢足球的学生助教
角色” 可用多重继承建模对象的 “角色 角色
即, 允许对象具有多个类型
但许多系统坚持对象必须具有最具体类 但许多系统坚持对象必须具有最具体类
类从它的所有超类继承变量和方法 存在歧义的可能: 当从两个超类A和 继承同名变量 消息N时 继承同名变量/消息 存在歧义的可能 当从两个超类 和B继承同名变量 消息 时
若该变量/消息是在共享的超类中定义的则没有问题 若该变量 消息是在共享的超类中定义的则没有问题 否则, 否则 采用如下方法之一 标志为出错, 标志为出错 重命名变量 (A.N 和B.N) 选择其一. 选择其一
对象类
相似对象组成类 每个对象称为它的类的实例 相似对象组成类; 每个对象称为它的类的实例 一个类中所有对象具有相同的
具有相同类型的变量, 具有相同类型的变量 消息接口 方法 赋给变量的值可能不同
例如: 例如 所有人对象组成 person 类 类与E-R模型中的实体集相似 模型中的实体集相似 类与
应用
CAD, CASE 多媒体与图像数据库, 文档/超文本数据库 多媒体与图像数据库 文档 超文本数据库
Database System Concepts
8.3
©Silberschatz, Korth and Sudarshan
面向对象数据模型(略讲) 面向对象数据模型(略讲)
对象大体上对应于 对象大体上对应于E-R模型中的实体 大体上对应于 模型中的实体 面向对象是基于将与一对象有关的代码与数据封装 面向对象是基于将与一对象有关的代码与数据封装 成一个单位的思想. 成一个单位的思想 类似E-R模 面向对象数据模型是一个逻辑数据模型 (类似 类似 模 型). 使面向对象程序设计风格(e.g., Smalltalk, C++)适应 使面向对象程序设计风格 适应 数据库系统
例如, 与两条消息get例如 属性 address 可用变量 address 与两条消息 address 和 set-address表示 表示 为方便起见, 为方便起见 许多面向对象数据模型都允许直接存取其他对 象的变量. 象的变量
Database System Concepts
8.6
©Silberschatz, Korth and Sudarshan
每个雇员是人; 所以employee 是person 的特例 每个雇员是人 所以 同样, 也是person 的特例 的特例. 同样 customer 也是 创建类 person, employee and customer
对所有人都适用的变量/消息与类 对所有人都适用的变量 消息与类person关联 关联. 消息与类 关联 雇员所特有的变量/消息与类 雇员所特有的变量 消息与类employee关联 消息与类 关联 客户所特有的变量/消息与类 客户所特有的变量 消息与类customer 关联 消息与类
. . .
Database System Concepts 8.11 ©Silberschatz, Korth and Sudarshan
类层次例
的对象的完整变量列表: 类officer 的对象的完整变量列表
office-number, expense-account-number: 局部定义 start-date, salary: 从employee 继承 name, address: 从person 继承
Database System Concepts
8.4
©Silberschatz, Korth and Sudarshan
对象结构
对象具有: 对象具有
变量集合 包含对象的数据. 变量值本身也是对象. 变量集合: 包含对象的数据 变量值本身也是对象 集合 消息集合 对象对消息进行反应; 消息可具有零, 消息集合: 对象对消息进行反应 消息可具有零 一个 集合 或多个参数 参数. 或多个参数 方法集合 实现消息的代码体 方法返回一个值作为 方法集合: 实现消息的代码体; 集合 对消息的反应 对消息的反应
第4部分 对象数据库
第13章 面向对象数据库 章 面向对象数据库(OODB) 关系数据库(ORDB) 第14章 对象 关系数据库 章 对象-关系数据库
Database System Concepts
8.1
©Silberschatz, Korth and Sudarshan
第13章 面向对象数据库 13章
若某对象属于多个类, 即, 若某对象属于多个类 则必须存在这些类的一个共同子类 创建子类student-teacher 与student-teacher-footballPlayer 创建子类 当有许多可能的组合时, 当有许多可能的组合时 为每种组合创建子类会很麻烦
Database System Concepts
Database System Concepts
8.7
©Silberschatz, Korth and Sudarshan
类定义例
class employee { /*Variables */ string name; string address; date start-date; int salary; /* Messages */ int annual-salary(); string get-name(); string get-address(); int set-address(string new-address); int employment-length(); };
在严格的封装中还需要用来读与设置其他变量的值的方法 方法单独定义
如: int employment-length() { return today() – start-date;} int set-address(string new-address) { address = new-address;}
2. 类employee 的外延仅包含不属于子类 的外延仅包含不属于子类officer, teller 或secretary的 的 雇员对象
这是OO系统通常的做法 系统通常的做法 这是 可访问子类的外延求所有子类对象
Database System Concepts
8.12
©Silberschatz, Korth and Sudarshan
注意与E-R模型中的ISA层次的相似性
Database System Concepts
8.10
©Silberschatz, Korth and Sudarshan
类层次定义
class person{ string name; string address: }; class customer isa person { int credit-rating; }; class employee isa person { date start-date; int salary; }; class officer isa employee { int office-number, int expense-account-number, };
Database System Concepts
8.9
©Silberschatz, Korth and Sudarshan
继承
类组织成一个特化 / IS-A 层次
属于类person的变量 消息被类 的变量/消息被类 属于类 的变量 消息被类employee 和customer 继承 结果构成一个类层次 结果构成一个类层次
数据的物理表示仅对对象的实现者可见 消息与反应提供了对象的唯一的外部界面 消息这个词不必意味着物理上的消息传递. 消息这个词不必意味着物理上的消息传递 消息 可以实现为过程调用 可以实现为过程调用
Database System Concepts 8.5 ©Silberschatz, Korth and Sudarshan
8.16
©Silberschatz, Korth and Sudarshan
对象标识
对象标识用于唯一标识对象 对象标识用于唯一标识对象
对象标识是唯一的 对象标识是唯一的: 唯一的 没有两个对象具有相同的标识 每个对象只有一个标识 例如, 对象的spouse 字段可以是另一个 字段可以是另一个person对象的标识 对象的标识. 例如 person对象的 对象的 对象的标识 可保存为一对象的字段, 用来引用另一对象. 可保存为一对象的字段 用来引用另一对象 可以是 由数据库创建), 系统生成的 (由数据库创建 或 由数据库创建 如社会安全号) 外部的 (如社会安全号 如社会安全号 系统生成的标识: 系统生成的标识 更易用, 更易用 但不能跨数据库系统使用 如果已存在唯一标识则冗余
同变量一样还继承方法. 同变量一样还继承方法 类的任何方法可以被属于其子类的任何对象调用. 可替换性 — 类的任何方法可以被属于其子类的任何对象调用 类外延(extent): 类中所有对象的集合 两种选择 类中所有对象的集合. 两种选择: 类外延
1. 类employee 的外延包含所有 的外延包含所有officer, teller 和secretary 对象 对象.
多重继承
多重继承使一个类可有多个超类. 多重继承使一个类可有多个超类
子类联系可表示为有向无圈图 类/子类联系可表示为有向无圈图 子类联系可表示为有向无圈图(DAG) 当对象有多种相互独立的分类方式时尤其有用 E.g. 临时 永久独立于 临时/永久独立于 永久独立于Of源自文库icer/secretary/teller 为每一种子类组合创建一个子类 – 不必为数据库中不可能出现的子类组合创建子类
消息与方法
方法是用通用语言写的程序, 方法是用通用语言写的程序 具有下列特性
变量仅在对象本身内部可以直接引用 其他对象的数据只能通过发送消息引用. 其他对象的数据只能通过发送消息引用
方法分为read-only 和 update 方法 方法分为
只读方法不改变对象的值
严格地说, 实体的每个属性都必须表示为一个变量和 严格地说 两个方法, 一个用于读属性, 两个方法 一个用于读属性 另一个用于更新
Database System Concepts
8.8
©Silberschatz, Korth and Sudarshan
继承
例如, 银行客户类与银行雇员类相似, 例如 银行客户类与银行雇员类相似 尽管有不同之处
两者可以共享某些变量和消息, 两者可以共享某些变量和消息 如 name 与address. 两者也各有特殊变量和消息, 如雇员的salary 和客户的 和客户的credit-rating. 两者也各有特殊变量和消息 如雇员的
数据值; 例如关系系统中所用的主键值. 值 – 数据值 例如关系系统中所用的主键值 名 – 由用户提供 用于过程中的变量 由用户提供; 用于过程中的变量. 数据模型或程序语言内建的标识. 内建 – 数据模型或程序语言内建的标识 不需用户提供标识. 不需用户提供标识 面向对象系统采用的标识形式
Database System Concepts
相对较少的数据类型, 相对较少的数据类型 第一范式成立
近年来复杂数据类型越来越重要
例如: 例如 地址可处理为 单个字符串, 单个字符串 或者 为每个子部分用一单独的属性, 为每个子部分用一单独的属性 或者 (不属于第一范式 不属于第一范式) 复合属性 (不属于第一范式) 例如: 例如 允许直接存储多值属性而不是创建单独的第一范式关系存储通 常更方便
Database System Concepts
8.13
©Silberschatz, Korth and Sudarshan
多重继承例
银行例的类DAG
Database System Concepts
8.14
©Silberschatz, Korth and Sudarshan
多重继承例
一个对象可以同时属于多个子类