设计模式-单表继承(Single Table Inheritance)

 概念

将类的继承层次表示为一个单表,表中的各列代表不同类中的所有域 

关系数据库不支持继承,因此把对象映射到数据库的时候必须考虑如何用关系数据库表来表现继承结构。

运行机制

  • 使用一个表包含某个继承层次中所有类的所有数据,每个类负责把自己的数据保存到表中的一行中.
  • 使用一个域来标识加载对象时,需要实例化的类.这个域可能是代码类,也可以是文本的类名.
  • 加载数据时首先读代码,看看需要实例化哪个类.保存数据的时候代码需要由层次关系中的超类写出.

使用时机

优点:

  • 在数据库中只关注一个表;
  • 获取数据时不必进行连接操作;
  • 任何对继承层次的重构都不需要修改数据库

缺点:

  • 数据库表中的列有时对应到对象域有时没有对应;
  • 只被某些子类使用的列带来数据库空间的浪费;
  • 单表可能最终过大,索引多并被频繁上锁导致效率低下;
  • 所有域只有一个名字空间,需要区分.

示例-运动员的单表(C#)

Step1 :所有域都放到抽象类中

Step2 :通过一系列加载方法把数据加载到新对象,如CricketerMapper

Step3 :最后采用运动员映射器处理

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值