您的位置:首页 > 数据库

继承

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可以相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  postgreSQL 继承