PostgreSQL
上一頁   下一頁

第九章. 繼承

讓我們創建兩個表。表 capitals 包含各州的首府,同時也是cities表。自然而然,表 capitals 應該從 表 cities 繼承下來。

CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int     -- (in ft)
);

CREATE TABLE capitals (
    state           char(2)
) INHERITS (cities);
   

在本例中,一條 capitals 的記錄 繼承 所有父表 cities 的字段(name,population,和 altitude)。 字段 name 的型態是 textPostgres用於變長ASCII字符串的型態。字段 population 的型態是 float, Postgres 用於雙精度浮點數的型態。表 capitals 多一個字段,state,表明首府所在的州。在Postgres裡,一個表可以從0到多個其他表繼承下來,一個查詢可以檢索一個表的所有記錄,或是檢索該表和其所有後代的記錄。

注意:繼承實際上是分級的不閉合的層次關系。(The inheritance hierarchy is a actually a directed acyclic graph.)

例如,下面查詢將找出所有海拔500英尺以上的城市:

SELECT name, altitude
    FROM cities
    WHERE altitude > 500;

+----------+----------+
|name      | altitude |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+
   

另一方面,如果要找出包括州首府在內的所有海拔超過500英尺的城市,查詢應該是這樣的:

SELECT c.name, c.altitude
    FROM cities* c
    WHERE c.altitude > 500;
   

which returns:

+----------+----------+
|name      | altitude |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+
|Madison   | 845      |
+----------+----------+
   

在這裡citics後的“*” 表明該查詢應該遍歷所有繼承級別低於citics的表。許多我們已經討論過的命令 -- SELECTUPDATEDELETE 等和其他像 ALTER TABLE 這樣的命令都支援“*”(譯注:像命令行中的通配符 "*")。


上一頁 首頁 下一頁
數組 開頭 多版本並行控制