3.5. PostgreSQL繼承

來源:互聯網
上載者:User

標籤:

繼承是物件導向的資料庫的概念。它開啟了資料庫設計新的有趣的可能性大門。

讓我們建立兩個表:一個 cities 表和一個 capitals 表。自然,首府(capital)也是城市(cities),因此在列出所有城市時你想要某種方法隱含地顯示首府。如果你已經很高明了,那麼你可能會創造類似下面這樣的模式:

CREATE TABLE capitals (  name       text,  population real,  altitude   int,    -- (單位是英尺)  state      char(2));CREATE TABLE non_capitals (  name       text,  population real,  altitude   int     -- (單位是英尺));CREATE VIEW cities AS  SELECT name, population, altitude FROM capitals    UNION  SELECT name, population, altitude FROM non_capitals;

如果只是查詢,那麼這個方法運轉得很好,但是如果你需要更新某幾行,那這個方法就很難看了。

一種更好的方法是:

CREATE TABLE cities (  name       text,  population real,  altitude   int     -- (單位是英尺));CREATE TABLE capitals (  state      char(2)) INHERITS (cities);

在這個例子裡,子表(capitals)繼承父表(cities)的所有欄位(name, population, altitude)。欄位 name 的類型 text 是 PostgreSQL 用於變長字串的固有類型。州首府有一個額外的欄位 state 顯示其所處的州。在 PostgreSQL 裡,一個表可以從零個或者更多其它表中繼承過來。

比如,下面的查詢找出所有海拔超過 500 英尺的城市的名字,包括州首府:

SELECT name, altitude  FROM cities  WHERE altitude > 500;

它返回:

   name    | altitude-----------+---------- Las Vegas |     2174 Mariposa  |     1953 Madison   |      845(3 rows)

另一方面,下面的查詢找出所有不是州首府並且位于海拔大於或等於 500 英尺的城市:

SELECT name, altitude    FROM ONLY cities    WHERE altitude > 500;
   name    | altitude-----------+---------- Las Vegas |     2174 Mariposa  |     1953(2 rows)

cities 前面的 ONLY 指示系統只對 cities 表執行查詢,而不包括繼承層級中低於 cities 的表。許多我們已經討論過的命令 SELECT, UPDATE, DELETE 都支援這個 ONLY 標記法。

【注意】儘管繼承經常是有用的,但是它還沒有整合唯一約束或者外鍵,因此制約了其實用性。

更多資訊參考http://www.infocool.net/PostgreSQL/index.htm

3.5. PostgreSQL繼承

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.