对象的继承关系在数据库中的实现方式和PowerDesigner设计

原创 2012年03月31日 10:40:16

在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式:

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

比如在一个教务系统中,有老师学生2个对象,这两个对象都是“人”对象的子类,所以我们可以建立一个Person表,该表有人的公共属性:姓名、性别等,还有就是数据的唯一标识,一个ID。而教师对象有教师的特有属性,比如职称,学生有学生的特有属性,比如学号。所以我们可以建立Person、Teacher、Student3个表,其关系在PowerDesigner中如图所示:

image

1.具体表继承。

不建立父对象,将父对象的所有属性转移到子对象中,为每个子对象建立对于的表。如果使用这种方法,那么就只需要建立Teacher表和Student表,不需要Person表,在PowerDesigner中,双击继承节点,打开属性窗口,取消“Generate Parent”选项,选中“Generate children”并选择“Inherit all attributes”,如图所示:

image

生成的数据库表将如图所示:

image

2.单表继承。

在一个宽表中列出所有父对象和子对象的属性,同时用一个标识列表示该行数据存储的是哪个子类的数据。在PowerDesigner中,修改继承节点的属性,取消“Generate children”,选中“Generate parent”,然后在下面添加一个标识列,叫PersonType,如图所示:

image

生成的数据库表,在一个宽表中表示如图所示:

image

可以看到Person中的列集成了Person、Teacher、Student这3个表的所有列,同时还多了一个列PersonType,这个列就是用来区分这行数据到底表示的是一个学生还是一个老师。

3.类表继承。

对父对象和每个子对象建立一个对应的表,然后在子表中设置该子表的主键为与父表关联的外键。在PowerDesigner中,对于继承节点的属性,允许生成父和子表,另外,将“Inherit only primary attributes”选中。如图所示:

image

生成的数据库表如图所示:

image

这里可以看到,Teacher的主键和Student的主键同时又是该表的外键,连接到Person表。

PS:如果使用NHibernate进行编程,那么可以参考这篇文章,介绍了NHibernate对这三种继承的配置方法。

如果使用Entity Framework进行编程,那么可以参考这篇文章

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用POWERDESIGNER设计数据库的20条技巧

win7 64位 mysql odbc驱动安装-----mysql-connector-odbc-5.1.5-win32.msi 不能安装64位的,也不能用版本高的! PowerDesign...
  • zhanghao96
  • zhanghao96
  • 2016年06月26日 00:52
  • 624

对象的继承关系在数据库中的实现方式和PowerDesigner设计

在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式...
  • studyzy
  • studyzy
  • 2013年09月10日 14:23
  • 715

对象的继承关系在数据库中的实现方式和PowerDesigner设计

【出自博客园深蓝居,转载请注明作者出处】 在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承...
  • mccand1234
  • mccand1234
  • 2015年04月10日 08:37
  • 336

对象的继承关系在数据库中的实现方式和PowerDesigner设计

在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式...
  • yizhiduxiu11
  • yizhiduxiu11
  • 2013年05月11日 00:03
  • 772

Powerdesigner关联Mysql数据库建表之真·详细步骤(有图)

最近手头刚来一项目,好久没用powerdesigner了,借此机会来复习一下,出现了很多问题,网上搜到的不是很完整,现整理出来给以后备用,亦做分享。 1.安装MYSQL的ODBC驱动。Connect...
  • u010944864
  • u010944864
  • 2015年09月18日 14:53
  • 2469

使用PowerDesigner进行数据库设计

这里用PowerDesigner做一个初步的设计,后面可能会有修改。 1、启动PowerDesigner新建物理数据模型        2、工具栏   3、新...
  • ycl295644
  • ycl295644
  • 2015年11月24日 13:31
  • 8186

从PowerDesigner概念设计模型(CDM)中的3种实体关系说起

CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库设计最高层的抽象。CDM是建立在传统的ER图模型理论之上的,ER图中有三大主要元素:实体型,属性和联系。其中实体型对应到CDM中的Entit...
  • lxyhenpiaoliang
  • lxyhenpiaoliang
  • 2015年09月14日 11:06
  • 1156

类的继承关系如何在关系型数据库体现

在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式...
  • GregOfNeu
  • GregOfNeu
  • 2014年08月27日 16:58
  • 2911

js如何实现继承(js实现继承的五种方式)

js如何实现继承(js实现继承的五种方式)
  • fuxiaohui
  • fuxiaohui
  • 2015年04月07日 01:38
  • 17281

继承关系的对象创建过程

继承关系的对象创建过程
  • xu511739113
  • xu511739113
  • 2016年08月25日 19:01
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象的继承关系在数据库中的实现方式和PowerDesigner设计
举报原因:
原因补充:

(最多只允许输入30个字)