在物件導向的世界裡,繼承的應用很普遍,但其實在資料庫, table 與 table 之間,也可以建立繼承的關係,下面就來介紹要如何在 PostgreSQL 使用繼承並新增 table。
假如有一張紀錄各國城市資訊的 table - city
,現在要針對各國首都的發展程度進行排序,所以需要延伸 city
這張 table ,另外增加一個欄位,並產生一張新的 table - capitals
。因為兩張 table 差異不大, table 之間也有關聯,這時候就可以使用繼承來產生 capitals
。
CREATE TABLE IF NOT EXISTS public.city
(
city_id integer NOT NULL DEFAULT nextval('city_city_id_seq'::regclass),
city character varying(50) COLLATE pg_catalog."default" NOT NULL,
country_id smallint NOT NULL,
last_update timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT city_pkey PRIMARY KEY (city_id),
CONSTRAINT fk_city FOREIGN KEY (country_id)
REFERENCES public.country (country_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
在 PostgreSQL 使用繼承很簡單,只要在 CREATE TABLE
的時候,加上 INHERITS
並指定要繼承的 table ,就可以完成繼承。
CREATE TABLE capitals (
rating integer NOT NULL
) INHERITS (city);
新增完 capitals
之後可以看到,有四個欄位跟 city
一模一樣,是從 city
繼承過來的。
今天就先介紹到這裡,明天再繼續說 city
和 capitals
父子之間的特性。