关键字:
父表、子表、人大金仓、KingbaseES
1. 什么是数据库表继承
表继承是数据库中的一个基础特性,他是一种将多个表组织成一个继承层次结构的方式。它允许创建一个父表,然后从父表继承子表。那么子表继承了父表的结构,包括列、索引和约束。子表可以添加自己的列、索引和约束,但是不能删除父表的列、索引和约束。表继承的主要优点是可以将数据分解成更小的逻辑单元,从而使数据更易于管理和维护。此外
2.表继承的案例
案例1:
create table father (name text,age int, sex bool);
create table son (number int) inherits ( father );
insert into son values ('男',15,true,01);
insert into son values ('男',16,false,02);
insert into father values ('男士',25,true);
select * from father ;
select * from son ;
上面的语句显示了创建了一个常见的表,并且创建了son表来继承这个表,随后在向son表插入数据的时候,我们把father表中的表结构对应的数据类型也在son表中进行插入,插入成功,并且在子表的查询时查询不到父表的内容的,但是在对父表进行查询时是可以查询到子表的内容的。
案例2:
再看一个案例,这里我们为父表创建了检查约束、非空约束、主键约束以及唯一性约束,为了验证这些约束在父表中存在,但在子表中是否存在,对父子的表结构进行查询
create table father1 (a int, b int not null,c int primary key,d int unique check(a > 0));.
create table son1 (e int) inherits ( father1 );
可以看到,父表中的主键以及唯一性约束在子表中并不存在,只有检查约束与非空约束被子表继承了下来。
insert into son1 values (-1,2,2,1,99);
insert into son1 values (1,null,2,1,99);
insert into son1 values (1,2,null,1,99);
上面得了两个案例分别违反了父表中的检查约束和非空约束,但是因为第三列的主键约束中包含非空约束的概念,因此在子表中,虽然对应的主键约束不在,但是主键约束附带的非空约束也被继承到了子表中,因此向第三列插入空值也会提示错误。
insert into son1 values (1,2,2,1,99);
insert into son1 values (1,2,2,1,99);
这里向子表插入两条相同的数据,如果第四列继承了父表中的唯一约束的话,那么第二条数据应该是插入失败的,但是仍然插入成功,那么,唯一约束也不会进行继承。
此时可以再对父表进行验证,唯一性约束是存在的。
案例3:
create table son11 (a int,f int) inherits ( father1);
这里重新创建一个子表,仍然继承案例2的父表,并且令子表中的列名与父表重合,可以看到,如果列名重合,数据库会给出提示,并将两个字段合并为一个字段。
但是如果创建的子表类型与父表不同,那么就无法进行合并。
案例4:
当对父表进行查询、更新等操作时,可以发现,子表一会同时被操作。
如下图,对父表进行查询,可以看到子表中插入的对应的父表列的值。
如下图所示,如果在父表中对数据进行修改,那么修改后无论是对父表还是子表进行数据查询,显示的均为修改后的值
参考资料
《KingbaseES SQL语言参考手册》