继承实现方式分为三种:subclass; joined-subclass;union-subclass
a.类中体现
b.库中体现分为三种:
b.1:一种方式:人和学生公用一张表,添加一个辨别字段,学生数据特有的字段不能设置非空约束,因为人对象是没有这个数据的
b.2第二种方式:共有数据放一张表中,特有的数据放另外一张表中;外键关联:外键做主键;
b.3第三种方式:每个对象有各自表存放各自的数据;
c.不同方式的配置也不同:
c.1一种方式只有一个表的情况:只需要配置人对象映射配置:
不同对象插入设置了一个默认辨别值,
c.2第二方式的配置:子类对应的表进行主键关联;
c.3第三种方式配置:注意的是主键的生成策略,两个表的主键是连续的
d.测试
d.1一种方式进行
保存:执行两条插入语句,并且为辨别列自动设对应的值,对于school特有的值,person所对应那列值为null;
查询:
查询子类和父类都只从一张表中,一条查询语句,以type来判断类型;
缺点:需要添加辨别列
子类特有列不能加非空约束
如果继承新加的列比较多,那么父类的数据冗余很多null值;
d.2,对应第二方式:
保存:
特别之处是保存子类型时,会执行两条插入语句,因为数据是存放在两个表中;
查询:
采用多态查询父类时,采用左外连接的方式联合查询;
查询子类时,采用内连接联合查询;
缺点:保存和查询比第一种方式差
优点:不需要辨别列
特有数据列可设置为非空
没有冗余字段;
d.3第三种方式:
保存:执行两条插入语句;
获取:获取子类直接获取;
获取父类:利用子查询先查询person和student采用union组合起来再得到整个父类;需要查询两个表;因为子表父表数据都属于父类;
缺点:存在冗余的字段;
更新:
更新父类的效率较低:因为要更新父表和子表的数据;