用每个类对应一个表来表示类的继承层次
运行机制
- 每一个类都对应一个表,领域类中的域直接映射为相应表字段,这里仍然采用继承映射器作为基本方法.
- 需要解决如何把对应的数据库表的行连接起来.可以使用共有的主键或者使用每个表的主键和超类表的外键相关联.
- 最大的问题是把数据从多个表中取回.可以采取在多个表上进行一次连接操作,但这还要依赖于数据库的优化方式,多表连接操作会使效率降低.
使用时机
优点:
- 所有的列对每一行都是相关的,因此没有空间浪费;
- 领域模型和数据库之间的模型非常简单明了;
缺点:
- 为了加载一个对象需要访问多表,因此需要多次查询或查询合并;
- 字段在层次中任何上下移动的重构都导致数据库更改;
- 由于访问频繁,因此超类表可能会成为瓶颈;
- 高度的规范化使特殊查询难于理解.
示例-运动员和他们的家属(C#)
Step1 :每个类各自定义各自的类型代码和表名
Step2 :每个类一个方法,加载该类定义的域,如FootballerMapper中加载域:club
Step3 :最后采用运动员映射器处理