关系型数据库中的关系的详细描述可以参见下面的博文:
数据库(二)—— 关系数据库以及关系代数和关系运算
数据库关系运算
数据库设计中的数据库表和表之间的关系有:一对一、一对多和多对多这三种关系。
可见,数据库表之间的关系是组合关系。
那么在面向对象程序设计当中有哪些关系呢?
答案是有两种关系:继承和组合。
在设计模式中有一句话叫做:组合优于继承,说的是组合相对于继承更加灵活。参见如下博文:
组合优于继承—设计模式之策略模式
详解继承与组合的优缺点
那么下面提出一个问题,具有继承关系的对象的数据如何存储到数据库当中?
在数据库表中实现表继承一般来说有3种实现方式:
- Concrete Table Inheritance(具体表继承)
- Single Table Inheritance(单表继承)
- Class Table Inheritance(类表继承)
比如有一只鸭子,它有属性是:动物,会叫,两只脚。来了一只可达鸭(除了鸭的属性,还有会唱可达歌),又来了一只大黄鸭(除了鸭的属性,会跳大黄鸭之舞),它们各有各自的属性。
- 具体表继承
具体表现:不建立父对象,将父对象的所有属性转移到子对象中,为每个子对象建立对于的表。建可达鸭表和大黄鸭表。 - 单表继承
具体表现:在一个宽表中列出所有父对象和子对象的属性,同时用一个标识列表示该行数据存储的是哪个子类的数据。多一个type字段,用来指明是什么鸭。 - 类继承表
具体表现:对父对象和每个子对象建立一个对应的表,然后在子表中设置该子表的主键为与父表关联的外键。给他们新增一个字段,鸭的id。这个id,在两张字表中,即表示主键,又表示外键。
更详细的描述请参考博文:
类的继承关系如何在关系型数据库体现
Hibernate中的Entity类之间的继承关系之三JOINED
本文深入探讨了数据库设计中继承关系的实现方式,包括具体表继承、单表继承和类表继承,通过鸭子实例生动解释了每种继承方式的具体表现,并对比了面向对象程序设计中的继承与组合。
3477

被折叠的 条评论
为什么被折叠?



