第三部分OODChapter6数据接口部分的设计第6章数据接口部分的设计6.1什么是数据接口部分6.2数据管理系统及其选择6.3对象存储方案和数据接口的设计策略6.4本章小结为了隔离数据管理系统对其它部分的影响,使得选用不同的数据管理系统时,问题域部分基本相同。为什么需要数据管理部分?人机交互部分控制流管理部分问题域部分数据管理部分文件系统数据管理部分关系型DBMS数据管理部分OO-DBMS6.1什么是数据接口部分1、数据管理部分是OOD模型中负责与具体的数据管理系统衔接的外围组成部分,它为系统中需要长久存储的对象提供了在选定的数据管理系统中进行数据存储与恢复的功能。2、在OOD中可以采用不同种类的数据管理系统实现对象的永久存储。有文件系统、R-DBMS、OODBMS,具体选用要考虑各种实现因素,对数据管理部分的设计有不同的影响。6.1什么是数据接口部分3、OOD模型中数据接口部分涉及的范围:(1)解决应用系统中的对象在外存空间(永久性存储介质)的存储问题。(2)只存储对象的属性部分(3)可能只有一部分对象需要长久存储(4)如果使用OOP语言能够支持永久对象的表示和存储管理,则不需要设计者做很多工作。4、总之,在选定的编程语言和数据管理系统不能直接支持对象永久存储的情况下,通过一个专门设计的模型组成部分,实现应用系统与数据管理系统的接口,以解决应用系统中需要长期保存的对象的属性值在外存空间的保存问题。6.1什么是数据接口部分1、文件系统通常是操作系统的一部分。2、文件的物理结构和文件的逻辑结构流式文件、记录式结构、树型结构等。3、编程语言对文件系统的支持4、文件系统相对于数据库管理系统的优缺点6.2数据管理系统及其选择6.2.1文件系统1、数据库和数据库管理系统数据库系统是存储、管理、处理和维护数据的软件系统,由数据库、数据库管理系统和有关软件组成。数据库是长期存在计算机内、有组织、可共享的数据的集合。数据库管理系统是用于建立、使用和维护数据库的软件,它对数据库进行统一管理和控制,以保证数据库的完整性和安全性。2、DBMS的功能和特点3、DBMS的类型数据库按照一定数据模型组织其中的数据,先后出现过层次数据模型、网状数据模型、关系数据模型和面向对象数据模型。关系DBMS是目前在理论和技术上最完善,应用最广泛的DBMS.6.2数据管理系统及其选择6.2.2数据库管理系统应用程序用户数据库管理员应用程序接口终端用户查询处理器数据定义接口数据库访问和控制逻辑数据库管理系统物理数据存储模式数据库6.2数据管理系统及其选择6.2.2数据库管理系统6.2.2.1关系数据库和数据库管理系统1、关系数据库是采用关系模型的数据库。关系模型用二维表结构来表示各类实体及其间的联系;二维表由行和列组成;一个关系数据库由多张表组成。2、关系数据库术语3、数据依赖和规范化4、关系数据库管理系统(RDBMS)及其特点6.2数据管理系统及其选择6.2.2数据库管理系统侯选关键字:可保证表的每个元组唯一性的任何属性的集合。指定侯选关键字中的一个为表的主关键字.外键:连接表的关键字。人员-ID人员姓名地址身份证号1张三海淀路11号2131251255李四清华西路123号12555125471张三天津海河路2号56264246人员-ID祖籍1山东5云南71浙江元组、记录属性、字段数据库中的表要满足一些范式,如下为三个范式的定义。第一范式:关系(表)的每个属性都应该是原子的。第二范式:如果一个关系的所有非关键字属性,都只依赖整个关键字,则该关系满足第二范式。(学号,系名,住处,课程号,成绩)第三范式:如果一个关系满足第二范式,且没有传递依赖,则该关系满足第三范式。Boyce-Codd范式(BCNF)等6.2.2.2面向对象数据库和数据库管理系统1、面向对象数据模型面向对象的数据库系统是OO设计和编程的之间扩展,是为了存储对象并与面向对象程序设计语言交互而专门设计的。它是按对象存储数据的数据库管理系统。2、面向对象数据库系统有两方面的特征:(1)是面向对象的,应支持对象、类、操作、属性、继承、聚合、关联等面向对象的概念;(2)另一方面它具有数据库系统所应具有的特定和功能。6.2数据管理系统及其选择6.2.2数据库管理系统6.2.2.2面向对象数据库和数据库管理系统3、面向对象数据库管理系统的实现途径。(1)在面向对象编程语言的基础上,增加数据库管理系统的功能,即长久地存储、管理和存取对象的功能。(2)对关系数据库管理系统进行扩充,使之支持面向对象数据模型,在关系数据库模型基础上提供对象管理功能,并向用户提供面向对象的应用程序接口。(3)第三种是按“全新的”面向对象数据模型进行的设计。6.2数据管理系统及其选择6.2.2数据库管理系统6.2.2.2面向对象数据库和数据库管理系统面向对象的数据库系统与应用系统的逻辑模型都是一致的,不需要再设计负责保存与恢复其他类的对象的类,因为每个类的对象都可以直接在OODBMS中保存。面向对象的数据库系统相对来说还比较新,在理论上和技术上还不太完善,而且目前还没有被广泛接受的标准。由对象数据库管理组ODMG提出的一些数据库标准正在逐渐地得到广泛的接收,如对象定义语言(ODL)。ODL是一种描述对象数据库结构和内容的语言。在若干年后,ODBMS有望取代RDBMS。6.2数据管理系统及其选择6.2.2数据库管理系统1、非技术因素(1)数据管理系统的成熟程度和先进性(2)价格(3)开发队伍的技术背景(4)与其它系统的关系。2、技术因素(1)文件系统(2)关系数据库管理系统(3)面向对象数据库管理系统各种数据管理系统的适用性、操作方面、有时它们是互补的。6.2数据管理系统及其选择6.2.3数据管理系统的选择首先要根据条件选择数据管理系统:文件系统,R-DBMS,OO-DBMS6.3.1.1对象在内存空间和文件空间的映像1、用文件系统存储对象2、对象与文件记录的映射方式6.3对象存储方案和数据接口的设计策略6.3.1针对文件系统的设计6.3.1.2对象存放策略6.3对象存储方案和数据接口的设计策略6.3.1针对文件系统的设计1、基本策略2、提高检索效率6.3.1.3设计数据接口的对象类6.3对象存储方案和数据接口的设计策略6.3.1针对文件系统的设计1、对象存取器2、对象存取器的特殊类6.3.1.4问题域部分的修改6.3对象存储方案和数据接口的设计策略6.3.1针对文件系统的设计问题域部分的对象通过请求数据接口部分提供的操作实现对象的保存与恢复。1、“存储协议”类2、“保存对象”和“恢复对象”的集中处理与分散处理6.3.2.1对象及其对数据库的使用0、面向对象、实体-关系以及关系数据库系统中的概念间的对应关系面向对象实体—联系关系数据库类实体类型表对象实体实例行属性属性列关系关系表或与类的表在一起6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计创建数据管理部分数据库查询修改数据存储及应用示意图:应用系统通过数据接口和RDBMS交互问题域部分RDBMSUPDATEFROMWHERESELECTFROMWHERECREATE……6.3.2.1对象及其对数据库的使用图6.5用关系数据库存储对象图6.6对象与数据库元组的不同映射方式1、系统可能以不同方式使用数据库中的数据2、可能需要数据格式转换(规范化问题)6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计对象标识:在程序运行时的对象标识是唯一的,对程序员来说通常是不可以访问的,只是通过对象名来访问对象。永久对象的标识在一个表中是唯一的。由类导出的表用一个主关键字作为表中所存储的对象的唯一标识。由关联导出的表用相关联的表的主关键字组合作为主关键字。在应用中使用对象名,在表中使用主关键字。6.3.2.2对象在数据库中的存放策略6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计1、对象数据的规范化永久类的存放设计:每个永久类使用一个数据库表1)确定要存储对象的哪些属性值,据此列出一个永久类的相应属性。2)按时间与空间要求进行权衡,对这些属性进行规范化,规范化后的属性至少应满足第一范式。3)定义数据库的表,列:规范化之后的一个属性;行:一个对象实例,把规范化之后类的一个属性作为表的一个列,要存储的每一个对象实例作为表中的一行。若一个类的属性列表不满足第二范式或更高范式,有两种可选的策略:(1)拆分类,这样要修改问题域模型;(2)不修改类,而是让一个类对应两个或多个表,让每个表满足范式要求,这样在存储和检索类时要进行一定的转换运算。6.3.2.2对象在数据库中的存放策略6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计2、修改类图3、确定关键字6.3.2.2对象在数据库中的存放策略6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计4、从类图到数据库的映射(对关系的存储)(1)对关联的存储设计在关系数据库中按下述方法对关联进行数据存放:l每个一对一的关联映射到一张独立的表;或在各类对应的表中用外键隐含;也可把两个对象和关联放在同一表中。l每个一对多的关联映射到一张独立的表;或在“多”的类对应的表中用外键隐含。l每个多对多的关联映射到一张独立的表,该表的主关键字是两个进行关联的表的主关键字的拼接;或者把它转化为一对多的关联,然后再按一对多的方式进行处理。6.3.2.2对象在数据库中的存放策略6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计将关联或聚合映射到表格一对一关联雇员雇员号码名字办公室办公室名地点11只映射到一个表属性名是否为空域雇员号码N号码名字N名字办公室名N名字地点N地点使用得较多,能提高性能。6.3.2.2对象在数据库中的存放策略6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计映射到多个表属性名是否为空域雇员号码N号码名字N名字属性名是否为空域办公室名N名字地点N地点属性名是否为空域雇员号码N号码办公室名N名字关联一对多关联公司公司名称地址人员人员姓名地点1..*1属性名是否为空域公司IDN号码人员IDN号码为关联单建一个表属性名是否为空域人员IDN号码人员姓名N姓名地点Y地址公司IDN号码在对象较多的类中建立表多对多关联1..*1..*用户工作站工作站用户使用权11..*1..*1(2)对聚合的存储设计聚合遵循与关联同样的规则(3)对泛化的存储设计可采用下述方法之一,进行数据存放。①把一般类的各个子类的属性都集中到一般类中,创建一个表。②为一般类(非抽象类)创建一个表,并为它的各个特殊类各创建一个表。一般类的表与各子类的表要用同样的属性作为主关键字。③如果一般类为抽象类,则要把一般类的属性放到各子类中,为它的子类各建立一张表。若一般类不为抽象类,也可采用(2)的做法。上述是对单继承的处理方法,对于多继承的处理与此类似。6.3.2.2对象在数据库中的存放策略6.3对象存储方案和数据接口的设计策略6.3.2针对RDBMS的设计将泛化映射到表设备设备名称价格水泵吸气压力排气压力热交换器表面面积属性名是否为空域设备IDN号码设备名称N名称价格Y金额设备类型N设备类型父类和子类各对应一张表属性名是否为空域设备IDN号码吸气压力Y压力排气压力Y压力属性名是否为空域设备IDN号码表面面积Y面积候选关键字:设备ID,设备名称主关键字:设备ID常见访问:设备ID,设备名称候选关键字:设备ID主关键字:设备ID常见访问:设备ID候选关键字:设备ID主关键字:设备ID常见访问:设备ID当从子类对应的表开始检索时,根据提供的设备ID,用设备ID查找子类相应表中的行,再在父类对应的表中,用设备ID和查找表中的行,即检索出该设备的所有信息。当从父类对应的表开始检索时,根据提供的设备ID和设备类型,用设备ID查找父类相应表中的行,用设备类型确定查那个子类所对应的表,再在子类对应的表中,用设备ID查找表中的行,即检索出该设备的所有信息。每个子类各对应一张表属性名是否为空域设备IDN号