继承关系如何持久化到数据库

本文深入探讨了数据库设计中继承关系的实现方式,包括具体表继承、单表继承和类表继承,通过鸭子实例生动解释了每种继承方式的具体表现,并对比了面向对象程序设计中的继承与组合。

关系型数据库中的关系的详细描述可以参见下面的博文:
数据库(二)—— 关系数据库以及关系代数和关系运算
数据库关系运算
数据库设计中的数据库表和表之间的关系有:一对一、一对多和多对多这三种关系。
可见,数据库表之间的关系是组合关系。
那么在面向对象程序设计当中有哪些关系呢?
答案是有两种关系:继承和组合。
在设计模式中有一句话叫做:组合优于继承,说的是组合相对于继承更加灵活。参见如下博文:
组合优于继承—设计模式之策略模式
详解继承与组合的优缺点
那么下面提出一个问题,具有继承关系的对象的数据如何存储到数据库当中?
在数据库表中实现表继承一般来说有3种实现方式:

  • Concrete Table Inheritance(具体表继承)
  • Single Table Inheritance(单表继承)
  • Class Table Inheritance(类表继承)

比如有一只鸭子,它有属性是:动物,会叫,两只脚。来了一只可达鸭(除了鸭的属性,还有会唱可达歌),又来了一只大黄鸭(除了鸭的属性,会跳大黄鸭之舞),它们各有各自的属性。

  1. 具体表继承
    具体表现:不建立父对象,将父对象的所有属性转移到子对象中,为每个子对象建立对于的表。建可达鸭表和大黄鸭表。
  2. 单表继承
    具体表现:在一个宽表中列出所有父对象和子对象的属性,同时用一个标识列表示该行数据存储的是哪个子类的数据。多一个type字段,用来指明是什么鸭。
  3. 类继承表
    具体表现:对父对象和每个子对象建立一个对应的表,然后在子表中设置该子表的主键为与父表关联的外键。给他们新增一个字段,鸭的id。这个id,在两张字表中,即表示主键,又表示外键。

更详细的描述请参考博文:
类的继承关系如何在关系型数据库体现
Hibernate中的Entity类之间的继承关系之三JOINED

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值