继承
2016-07-10 20:48
148 查看
数据表的继承关系可以归纳为单表继承、多表继承和多层继承。
单表继承
create table event_a(
id uuid primary key,
sip_a inet,
dip_a inet,
sport_a integer,
dpor_a integer,
name varchar(256)
);
create table event_a_b(
id uuid primary key,
sip_a_b inet,
dip_a_b inet,
sport_a_b integer,
dport_a_b integer,
name varchar(256)
) inherits(event_a);
如上,表event_a_b继承于表event_a,即表event_a_b是表event_a的子表。
多表继承
create table event_a(
id uuid primary key,
sip_a inet,
dip_a inet,
sport_a integer,
dpor_a integer,
name varchar(256)
);
create table event_b(
id uuid primary key,
sip_b inet,
dip_b inet,
sport_b integer,
dport_b integer,
name varchar(256)
);
create table event_ab(
state int
) inherits (event_a, event_b);
如上,表event_ab继承于表event_a和表event_b,即表event_ab是表event_a和表event_b的子表。
多层继承
create table event_a(
id uuid primary key,
sip_a inet,
dip_a inet,
sport_a integer,
dpor_a integer,
name varchar(256)
);
create table event_a_b(
id uuid primary key,
sip_a_b inet,
dip_a_b inet,
sport_a_b integer,
dport_a_b integer,
name varchar(256)
) inherits(event_a);
create table event_a_b_c(
state int
) inherits (event_a_b);
如上,表event_a_b继承于表event_a, 表event_a_b_c继承于表event_a_b,即表event_a_b是表event_a的子表,表event_a_b_c是表event_a_b的子表,同时表event_a_b_c也是表event_a的子表。
特性
1. 父表的select/update/delete操作,也会作用于子表的操作,如果只需要操作父表,可以使用only关键字,如'select * from only event_a', 此时只能查看父表中的数据。
2. 子表拥有父表的所有字段,当父子字段重复时,以子表的字段为准,其中包括约束条件。
3. 唯一约束和外键并不适用于继承,如果event_a_b.id没有primary key约束,那么event_a.id与event_a_b.id可以相同。
单表继承
create table event_a(
id uuid primary key,
sip_a inet,
dip_a inet,
sport_a integer,
dpor_a integer,
name varchar(256)
);
create table event_a_b(
id uuid primary key,
sip_a_b inet,
dip_a_b inet,
sport_a_b integer,
dport_a_b integer,
name varchar(256)
) inherits(event_a);
如上,表event_a_b继承于表event_a,即表event_a_b是表event_a的子表。
多表继承
create table event_a(
id uuid primary key,
sip_a inet,
dip_a inet,
sport_a integer,
dpor_a integer,
name varchar(256)
);
create table event_b(
id uuid primary key,
sip_b inet,
dip_b inet,
sport_b integer,
dport_b integer,
name varchar(256)
);
create table event_ab(
state int
) inherits (event_a, event_b);
如上,表event_ab继承于表event_a和表event_b,即表event_ab是表event_a和表event_b的子表。
多层继承
create table event_a(
id uuid primary key,
sip_a inet,
dip_a inet,
sport_a integer,
dpor_a integer,
name varchar(256)
);
create table event_a_b(
id uuid primary key,
sip_a_b inet,
dip_a_b inet,
sport_a_b integer,
dport_a_b integer,
name varchar(256)
) inherits(event_a);
create table event_a_b_c(
state int
) inherits (event_a_b);
如上,表event_a_b继承于表event_a, 表event_a_b_c继承于表event_a_b,即表event_a_b是表event_a的子表,表event_a_b_c是表event_a_b的子表,同时表event_a_b_c也是表event_a的子表。
特性
1. 父表的select/update/delete操作,也会作用于子表的操作,如果只需要操作父表,可以使用only关键字,如'select * from only event_a', 此时只能查看父表中的数据。
2. 子表拥有父表的所有字段,当父子字段重复时,以子表的字段为准,其中包括约束条件。
3. 唯一约束和外键并不适用于继承,如果event_a_b.id没有primary key约束,那么event_a.id与event_a_b.id可以相同。
相关文章推荐
- PostgreSQL新手入门教程
- PostgreSQL教程(十):性能提升技巧
- PostgreSQL教程(二):模式Schema详解
- PostgreSQL教程(十三):数据库管理详解
- 深入解读PostgreSQL中的序列及其相关函数的用法
- PostgreSQL教程(八):索引详解
- PostgreSQL教程(三):表的继承和分区表详解
- 简单介绍Ruby on Rails对PostgreSQL数组类型的支持
- PostgreSQL教程(十九):SQL语言函数
- PostgreSQL教程(四):数据类型详解
- PostgreSql新手必学入门命令小结
- 用一整天的时间安装postgreSQL NTFS权限
- FREEBSD安装POSTGRESQL笔记
- Mac OS上安装PostgreSQL的教程
- PostgreSQL8.3.3安装方法第1/2页
- 深入理解PostgreSQL的MVCC并发处理方式
- PostgreSQL教程(一):数据表详解
- PostgreSQL教程(十二):角色和权限管理介绍
- ETL MySQL in Oracle ODI 12c