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

简介:

在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统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进行编程,那么可以参考这篇文章

本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675.html,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 JSON 数据库
项目管理定义问题之什么是序列化大对象的值对象数据库形态
项目管理定义问题之什么是序列化大对象的值对象数据库形态
|
6月前
|
SQL 存储 Oracle
数据库技术--数据库引擎,数据访问接口及其关系详解(附加形象的比喻)
数据库技术--数据库引擎,数据访问接口及其关系详解(附加形象的比喻)
|
关系型数据库 MySQL 数据库
数据库的创建之使用多态
数据库的创建之使用多态
92 0
|
SQL Java 数据库连接
【数据库】数据库设计之用实体集还是用属性(一)
数据库设计之用实体集还是用属性(一)
251 0
|
SQL Oracle 关系型数据库
如何使用powerdesigner管理设计数据库
如何使用powerdesigner管理设计数据库
200 0
如何使用powerdesigner管理设计数据库
|
数据库 开发者 Python
数据库的基本操作2-关系引用 | 学习笔记
快速学习数据库的基本操作2-关系引用
266 0
|
存储 程序员 数据库
【自然框架】元数据的数据库结构的详细说明和示例(二):数据库描述部分
1、Manage_Table(表、视图、存储过程、函数的信息) 字段名 中文名 类型 大小 默认值 说明 TableName 表名 nvarchar 60 _ 表名 PKColumnID 主键字段的编号 int 4 1 主键字段的编号 Ty...
872 0
|
数据库
对象的继承关系在数据库中的实现方式和PowerDesigner设计
原文:对象的继承关系在数据库中的实现方式和PowerDesigner设计 在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式: Concrete ...
1078 0
|
数据库
NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作
环境: &nbsp&nbspVisual Studio 2010 一、Mindscape.NhibernateModelDesigner安装 &nbsp&nbsp在打开VS2010之后,我们可以在“工具”菜单下找到“扩展管理器,搜索:Mindscape NHibernate Model Designer 下载安装即可。安装完成后,在向
1273 0