PostgreSQL之数据定义(一)继承

  PostgreSQL实现了表继承.capitals用于省会城市,cities用于非省会的城市.语法如下:

CREATE TABLE cities (
    name            text,
    province        text,
    state           int     
);

CREATE TABLE capitals (
    level           float
) INHERITS (cities);

  增加初始化数据:

insert into cities values('荆州','湖北',1);
insert into cities values('荆门','湖北',1);
insert into capitals values('武汉','湖北',1,1.5);

  根据不同方式查询结果(only 可以排除子表):

select * from capitals;
-------------------------
武汉    湖北    1    1.5
select * from cities;
-----------------------
荆州    湖北    1
荆门    湖北    1
武汉    湖北    1
select * from only cities;
----------------------------
荆州    湖北    1
荆门    湖北    1

警告

  继承特性的一个严肃的限制是索引(包括唯一约束)和外键约束值应用在单个表上而非它们的继承子女。在外键约束的引用端和被引用端都是这样。如果我们声明cities.nameUNIQUE或者PRIMARY KEY,这将不会阻止capitals表中拥有和cities中城市同名的行。而且这些重复的行将会默认显示在cities的查询中。事实上,capitals在默认情况下是根本不能拥有唯一约束的,并且因此能够包含多个同名的行。我们可以为capitals增加一个唯一约束,但这无法阻止相对于cities的重复。

原文地址:https://www.cnblogs.com/ryjJava/p/14320644.html