1
面向对象软件工程实践指南
1.2.8.7 8.7 类与关系数据库表的映射
8.7 类与关系数据库表的映射

由于目前关系型数据库是存取数据的主要方式,因此将类映射成相应的表结构就非常有必要。其规则如下:

1)将带有简单数据结构的类直接变成表

(1)将对象标识符变成主键:为每一个对象生成唯一的标识符,可以作为保存对象的关系型表中的主键(可以使用各种方案使得每一个对象有唯一的ID)。

(2)为每一个属性定义相应的字段。

2)类(集合类)的定义中将其他类(嵌套类)的实例作为属性的情况

(1)为嵌套类创建单独的表,嵌套类的对象给分配唯一的对象ID。

(2)集合类对应一张表,每个对象具有唯一ID。

(3)创建含有两列的表,第一列保存包含集合的对象的对象标识符;第二列保存在集合中的对象的对象标识符。

3)关联关系的映射

(1)一对多关联:与情形2)一样处理。

(2)多对多关联:创建一个含有两列的表,每一行包含一对对象标识符,对于参与关联的对象各有一个。

(3)一对一关联:将另一关联的类的标识符作为外键。

4)继承结构

将继承结构映射为关系型数据库表有三种方法:

(1)只是将超类实现为表,所有子类的额外的属性也将变成超类表的属性,保存它们没有使用的空值。该方法最适用于子类与超类相比、在行为方面比属性方面差别更大的情况。需要有type属性以表明每一行表示哪个子类。

(2)只将子类实现为表。超类的属性保存在所有子类的表中。这只是在超类是抽象的、并且没有实例的情况下可行。

(3)将所有的类(子类和超类)实现为表。要为子类检索数据,子类自己的表和超类的表都需要访问。同样,在超类表中需要type属性。