PostgreSQL的表、約束

1、基本的建表操作

1.1、繼承表

postgresql是唯一提供繼承功能的數據庫。子表含有自己字段還繼承父表的所有字段,父表結構發生變化,子表的結構也會自動跟着變化。但是,並不是所有的父表特徵都會被子表繼承下來,比如父表的主鍵約束、唯一性約束以及索引就不會被繼承。Check約束會被繼承,但子表還可以另建自己的check約束

1.2、無日誌表

一大優勢:寫入數據快,比普通表大約快15倍,缺點:如果數據庫服務器崩潰,postgresql將截斷所有無日誌表;無日誌表不支持GiST索引

1.3、TYPE OF

你可以使用一個複合數據類型來作爲建表的模板,首先創建一個複合數據類型:

CREATE TYPE basic_user as (user_name vachar(50), pwd varchar(10));

然後我們可以使用of 語法來創建一張表,表結構就是該複合類型:

CREATE TABLE super_users OF basic_user ((CONSTRAINT pk_su PRIMARY KEY (user_name));

爲複合類型新增或者移除字段時,postgresql會自動修改相應的表結構。這種機制的優點是,如果你的系統中有很多結構相同的表,而你可能會需要同時對所有表結構進行相同的修改,那麼此時只需要修改基礎數據類型即可,這一點有點與表繼承機制很相似。

如,需要對super_users表增加一個電話號碼字段:

ALTER TYPE basic_user ADD ATTRIBUTE phone VARCHAR(10) CASCADE;

通常,如果表依賴於某個類型,那麼你就不能更改該類型的定義。CASCADE修飾符凌駕於此限制之上,對所有相關表應用相同的更改。

1.4、check約束

check約束能夠對錶的一個或者多個字段加上一個條件,表中每一行記錄必須滿足此條件。

例如:以下check約束可以限制logs表中所有用戶名必須都小寫:

ALTER TABLE logs ADD CONSTRAINT chk CHECK(user_name=lower(user_name));

特別值得注意的一點是,當表間存在繼承關係時,子表會繼承父表的check約束,但主鍵、外鍵、唯一性這三種約束卻不會繼承。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章