关于继承映射(上)

关于继承映射 1 每个类分层结构一张表(Table per class hierarchy) <!-- 不同记录用鉴别字段来区分类型 --> <discriminator column="computer_type"></discriminator><subclass name="PC" discriminator-value="P"><property name="component"></property></subclass> 采用这种策略只需要一张表即可。它有一个很大的限制:要求那些由子类定义的字段, 如component,不能有非空(NOT NULL)约束。 优点:这样做的优点包括只有一张表查询简单以及容易与其他表进行关联 ,策略的性能调优要比其他策略容易得多,比较适合做数据仓库系统 ,因为所有数据在一张表里面 不需要做关联。 缺点:如果子类的属性过多 就会用很多 为null的属性 这为基于行的SQL调优增加了难度,SIG系统中使用了分区解决这个问题 2 每个子类一张表(Table per subclass) <joined-subclass name="PC" extends="Computer" table="t_pc"><key column="computer_id"></key><property name="component"></property></joined-subclass><joined-subclass name="NoteBook" extends="Computer" table="t_notebook"><key column="computer_id"></key><property name="duration"></property></joined-subclass> 需要四张表。三个子类表通过主键关联到超类表(因而关系模型实际上是一对一关联)。 优点:包括数据表比较紧凑(没有不需要的可空字段),数据跨三个子类的表进行分区,容易使用超类的表与其他表进行关联。紧凑的数据表可以针对基于行的数据库做存储块优化,让SQL执行得更好。数据分区增加了数据修改的并发性(除了超类,没有热点),OLTP系统通常会更好些 缺点:在所有策略中它使用的表和表连接最多 3 每个具体类一张表(Table per concrete class) 要用到的关键字<union-subclass>注意主键id不能重复 <class abstract="true"> --&gt;不建父类表 <!-- 继承映射,方案三,每个具体子类各自存放一张表 --> <class name="Computer" abstract="true"><union-subclass name="PC" extends="Computer" table="t_pc"><property name="component"></property></union-subclass><union-subclass name="NoteBook" extends="Computer" table="t_notebook"><property name="duration"></property></union-subclass></class></class></union-subclass>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值