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
.name
为UNIQUE
或者PRIMARY KEY
,这将不会阻止capitals
表中拥有和cities
中城市同名的行。而且这些重复的行将会默认显示在cities
的查询中。事实上,capitals
在默认情况下是根本不能拥有唯一约束的,并且因此能够包含多个同名的行。我们可以为capitals
增加一个唯一约束,但这无法阻止相对于cities
的重复。