前面已经介绍了对象--关系行为模式,包括工作单元、标识映射、延迟加载,这些都是协调内存对象与关系数据库之间行为操作的一些方法。内存对象与关系数据库除了行为需要协调之外,在结构上也需要一些方法来保证彼此的完整,这就是对象-关系结构模式。这些方法主要有:标识域、外键映射、关联表映射、依赖映射、嵌入值、序列化大对象、单表继承、类表继承。具体表继承。
(1)标识域:为了在内存对象和数据库之间维护标识而在对象内保存一个数据库标识域。
将关系数据库表的主键存储在对象的域中
标识的选择:数据表标识,自动生成,GUID
(2)外键映射:把对象间的关联映射到表间的外键引用
考虑数据库的3范式,尤其是第3范式
对象间的关系(1对1,1对多,多对多)
(3)关联表映射:把关联保存为一个表,带有指向(有关联所连接的)表的外键
多对多关系时常用的解决方案
关联表映射的基本思想是使用一个链表来保存关联关系。这个表仅仅含有两个相互关联表的外键ID,对于每一对相关联的对象,它都有一个数据行与之对应。
(4)依赖映射: 让一个类为部分类执行数据库映射。
依赖映射的基本思想是在数据库持久化时,数据库中的某个类(依赖者)依赖于其他类(所有者)。每个依赖者有且只有一个所有者。
当有一个对象只被另一个对象引用的时候可以使用该模式。
(5)嵌入值:把一个对象映射成另一个对象表的若干字段。
一对一的关系时可采用
(6)序列化LOB:通过将多个对象序列化到一个大对象(LOB)中来保存一个对象图,并存储在一个数据库字段中。
数据库必须支持二进制类型
常与XML共用。
(7)单表继承:将类的继承层次表示为一个单表,表中各列代表不同类中的所有域。
单表继承把一个继承结构中所有类的所有域都映射到一个单表中。每个类负责将与之相关的数据保存在表的一行中,数据库中其他不相关的列则留空。
(8)类表继承:用每个类对应一个表来表示类的继承关系。
类表继承实现中的最大问题是如何用一种有效的方式把数据从多个表中取回。
(9)具体表继承:用每个具体类对应一个表来表示类的继承层次。
每一个表中的列都对应着具体类和这个具体类的所有祖先类,因此超类中的任何域在子类的表中都会被复制。
与叶表继承类似