先來看一張圖
簡單說明一下裡面的指令:
看到這裡,也許會有疑問.這種 typed table 有何用處?
先來看
當我們要對辣椒增加屬性時,因為有 typed table 的關係,是不能這樣修改,要用 CASCADE.
有點類似關聯限制.
接著我們使用辣椒再建立一個table 西瓜.
然後再增加辣椒的屬性.
後面再做查詢,可以看到table的欄位是 小螃蟹 與 奇異果.
這樣的關係限制,有利於我們在系統中,保持欄位的一致性.就不會改了芒果忘了西瓜.
在PG的information_schema.tables 裡面也有 is_typed 屬性.
可以很方便的查到,哪些table 是 typed table.
線上展示在以下連結:
https://dbfiddle.uk/?rdbms=postgres_14&fiddle=dbc11dbbebce4e65f02dd32ace903da9
編輯時預覽,可以看到 辣椒 那些 emoji.但是發表時,卻又變成?了,所以改成截圖方式.
這是黑科技嗎?
IBM DB2 也有 typed table
https://www.ibm.com/docs/en/db2/11.5?topic=tables-creating-typed
Oracle 也有自定義type 與 繼承
https://docs.oracle.com/en/database/oracle/oracle-database/18/adobj/inheritance-in-sql-object-types.html#GUID-381EB31A-F88A-478E-9430-E2D88E844A8D
PG 也有table 繼承,這個以後會分享.
三者的這些機制不完全相同,比較像是各自奔放的發展.
感謝你!我另外注意到為何能將圖片顯示並做定義?
PG 支援 UNICODE 的程度很高,所以物件(table,column等等),都可以使用.所以就使用了emoji.