用每个具体类对应一个表来表示类的继承层次
把内存中每一个对象映射为一个单独的数据库行就是具体表继承,对于继承层次中每一个具体类都有一个表与之对应。
运行机制
- 对继承层次中的每一个具体类使用一个数据库表,每个表中的列都对应着具体类和这个具体类的所有祖先类.
- 键,不仅在一个表中是唯一的,而且在继承层次里所有的表中都是唯一的.
使用时机
优点:
- 每个表都是自包含的,没有不相关的域;
- 从具体映射器读取数据的时候不需要连接操作;
- 只有在类被访问的时候表才能被访问,这样可以分散访问负载
缺点:
- 不能把数据库关系加到抽象类中;
- 如果领域类中的某个域被提升,同样需要修改表结构;
- 如果一个超类的域改变了,需要修改拥有这个越的所有表;
- 超类上的一次查询需要检查所有表,导致多次访问或连接操作.
示例-运动员和他们的家属(C#)
Step1 :每个映射器各自定义表名
Step2 :每个映射器类和它的所有超类都对应一个加载方法
Step3 :最后采用运动员映射器处理
与以往例子不同,此处需要读取三次数据库,因此在内存中进行处理,这段代码比较有效。
更新、插入、删除操作的方法实现,从结构上和查找类似。