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

 

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

Concrete Table Inheritance(具体表继承)

Single Table Inheritance(单表继承)

Class Table Inheritance(类表继承)

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

9a02RwtK2R8NOLbjrfmUWTtGYUIIeVzPZtYOM8365jsimO2hYveQAAEzkIAsjkLecaNIQDZxBDiexCoCAHIpiJlXUxUyOZiCme6bSNAOJxweMk28P+4p8Q47Y2QoQAAAABJRU5ErkJggg==uploading.4e448015.gif转存失败重新上传取消

1.具体表继承。

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

A2Tm5DOl9mKIAAAAAElFTkSuQmCCuploading.4e448015.gif转存失败重新上传取消

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

JLLbDccbHDgAAAABJRU5ErkJggg==uploading.4e448015.gif转存失败重新上传取消

2.单表继承。

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

BwasimLmJazFAAAAAElFTkSuQmCCuploading.4e448015.gif转存失败重新上传取消

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

 

XxK+11qwAAAAASUVORK5CYII=uploading.4e448015.gif转存失败重新上传取消

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

3.类表继承。

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

9Id+o9ZdFVwAAAABJRU5ErkJggg==uploading.4e448015.gif转存失败重新上传取消

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

8+xPM0IN579bc3Ijj572Hvr8qwAuteOEVxmgOIJhUEIQAACdRGwt0Ibvwfc+0DefQPUbe2RIJrlTcEK+XfItXgGWFf+4S0EIACBagicfc7mE6jQn8+gjpZit4Ae+d7X4RlgNamIoxCAAAQgIEkAAZSkiS0IQAACEKiGAAJYTahwFAIQgAAEJAn8P3zY8rOXmarPAAAAAElFTkSuQmCCuploading.4e448015.gif转存失败重新上传取消

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值