由多个关系表的行构成。这些行必须具有相同的对象标识。 (5)聚集 如果聚集的元素类型是基本数据类型,可以考虑投影成二进制类型。如果元素类型是实体类型,这实际上构成了该实体与元素所指向实体之间多对多的引用关系,具体可参照第3节。 (6)类型定义 主要指自定义结构类型,需要将结构的域投影成单个的列。 (7)唯一性规则。转换为关系表的唯一性约束规则,当唯一性规则中包括的属性投影成多列时,注意要将多个列均包括在关系表的唯一性约束定义中。 (8)Where规则 转换成关系表的条件约束规则。 (9)名字转换规则 实体名转换成表名,属性名转换为列名,数据类型的域展开为列时,需要有一套名字转换规则。 3、对象之间引用关系的投影[3] 如果从纯粹的建模技术角度来看,对象之间的关系有以下几种: 一对多关系 多对多关系 一对一关系 不管是哪一种关系在概念模型中都两种情况,一种是依赖的,一种是独立的。 为了方便叙述,我们定义了一个简单的对象模型,图2是该模型的实体关系图(也称为类图),图中的各实体只列出了主标识中的属性。图中分别用不同的符号给出了继承关系、多对多关系、依赖的一对多关系和独立的一对多关系。 具体说明如下:实体Student和Teacher是Person的子类,继承关系用一个三角形表示。一个系(Department)里有多个人(学生或老师),两个实体间用实线连接表示引用关系,实心圆圈表示多的一端。一个系可以开设多门课(Course),一门课是依赖于系的,这就是说只知道课程名还不能确定这门课,还需要知道是哪个系开设的这门课。同样是计算方法课,数学系开设的和计算机系开设的在难度上和内容上会有很大区别。用箭头表示依赖。一门课有多个学生选修,一个学生可以选修多门课程。 实体间不同的关系进行投影方法是不同的。 (1)独立的引用关系进行投影,需要在“多”的一边要产生一个外部键。如果实体Person投影对应的表是T_Person,则表T_Person中要自动增加一个属性DptName,作为外部键,对应实体Department投影成的表T_Department的主键DptName。如果在继承关系中Person要分解到多个子类表中,则这些子类表中都要生成这个对实体Department引用的外部键 (2)依赖的引用关系进行投影,不仅需要在“多”的一边产生一个外部键,而且还要把该外部键做为辅助键。例如实体Course投影成表T_Course时,不仅要生产一个外部键DptName,而且它的辅助键由两个列组成:DptName和CourseName。注意,根据第2节对象标识的投影规则,表T_Course的主键是对象标识列。 (3)实体之间多对多的关系进行投影,需要新建一个“交叉表”,该表专门记录实体间多对多的这种联系,原来的两个实体表与新建的交叉表之间的关系是一对多的关系,这实际上把多对多关系变成两个一对多关系。实体Cource和Student之间的多对多关系投影成表T_Course_Student,它有两个列一个是Course_ID,一个是Student_ID,都是外部键,分别用来对表T_Course或T_Student进行引用。 4 继承关系的投影 继承关系的投影是模型投影中的关键问题,对该问题的不同解决方案会影响到整个模型投影的设计。一般来讲,在关系数据库中实现继承的方法可划分为三类: (1)合并法。合并法就是将整个类层次映射为单个关系表,表中保存所有类(基类、子类)的属性。图2中实体Person、Student、Teacher映射成一个表T_Person。如图3所示,表中增加了一个属性PersonID,由于对象标识的格式是实体名+唯一序列值,通过它的前缀可以区分用一个实例属于哪一个实体。
合并法实现继承关系投影的优点是实现简单,操作方便,缺点是会产生大量的数据冗余。 (2)分解法 分解法就是将每个具体子类映射成单个关系表,超类的属性将复制到各子类中。子类对应的关系表包括自身的属性和继承的属性,每个具体的子类包含各自的对象标识。抽象的基类不参与映射。其中,Person由于是抽象类,未映射成数据库表;而Student、Teacher映射为相应的表,它们具有各自的主键。如图4所示。 分解法的表中包含了具体子类的所有信息,操作实现简单,但超类的修改会导致相对应的表及其子类所对应表的更改,这会增加保持数据的完整性的复杂性。 (3)单表法 单表法为每一个类创建数据库表,表中包含特定于该类的属性和对象标识。图5所示,注意personID作为所有表的主键,它们之间是is-a的关系。 单表法与面向对象的概念具有一致性,支持多态,易于修改基类和增加新的类。但数据库中存在大量的关系表,加上表之间的关联较多,会降低数据访问效率。 以上三种方法各有优缺点,没有一种是绝对完美的。因此,数据库设计人员要根据模型的具体情况选择继承的投影方法。 5 结束语 本文介绍的对象模型的关系投影原理已经用于多个项目的对象数据平台的开发上,简洁实用。由于对象模型到目前为止还没有统一的标准,因此对象模型向关系模型的投影规则要根据实际模型的定义来制定。在实际的投影规则定义中,名字的转换规则、聚集的处理方式、对象之间的引用关系、继承处理方式可以根据需要确定下来,也可以设计成多种方式并存,建立可控制的投影,这需要设计一整套投影规则元模型。建立一套可描述对象模型、关系模型、投影规则的形式语言规则和语法规则在理论上和应用上具有重要意义,这也是我们目前正在研究的重点。
上一页 [1] [2]
Tags:
|