陣列和列舉
PostgreSQL 以其可擴展性和多功能性而聞名,除了傳統的整數和字串之外,它還提供多種資料類型。其中包括陣列(array)和列舉(enum)類型,為開發人員提供了進階的資料建模能力。在這篇文章中,我們將深入了解這些複雜的資料類型,並用免費的 dvdrental 範例資料庫 dvdrental 範例資料庫為例子展示它們的用法和好處。
陣列(array)類型
在 PostgreSQL 中,陣列允許將多個值存儲在單一資料庫欄位中。在處理資料清單或集合的情況下,這種能力非常有價值。假設我們想要將電影和出演每部電影的演員存儲在一起。我們可以利用陣列資料類型來實現這一點。首先,以下是用於建立新的「films_with_actors」資料表和填入資料的陳述式:
CREATE TABLE films_with_actors (
film_id SERIAL PRIMARY KEY,
title VARCHAR(255),
actors TEXT[]
);
INSERT INTO films_with_actors (title, actors) VALUES
('Inception', ARRAY['Leonardo DiCaprio', 'Joseph Gordon-Levitt']),
('The Shawshank Redemption', ARRAY['Tim Robbins', 'Morgan Freeman']);
在 Navicat 中,我們可以使用資料表格設計器建立資料表:
![films_with_actors_table_design (57K)](https://www.navicat.com/link/Blog/Image/2024/20240301/CHT/films_with_actors_table_design.jpg)
需要注意的是,如果在文字(text)類型後面加上方括號「[]」,Navicat 會將其識別為陣列類型並在儲存資料表時在「維度」欄位中填入「1」,表示這是一個一維陣列。
在建立資料表之後,我們就可以加入資料。請務必將陣列值放在大括號「{}」內,以告訴 Navicat 每個陣列中包含哪些值:
![films_with_actors_table_with_data (24K)](https://www.navicat.com/link/Blog/Image/2024/20240301/CHT/films_with_actors_table_with_data.jpg)
在查詢中,我們可以在方括號內附加所需的索引來引用特定的陣列元素。因此,「actors[1]」將取得陣列的第一個值:
![selecting_array_values (39K)](https://www.navicat.com/link/Blog/Image/2024/20240301/CHT/selecting_array_values.jpg)
列舉(enum)類型
Enum 是「Enumerated」的縮寫。列舉類型可讓開發人員為欄定義一組固定的常量。這增強了資料庫結構內的資料完整性和清晰度。讓我們透過在「films_with_actors」資料表中新增「rating」欄位來說明這一點。我們可以使用以下 DDL 陳述式定義一個用於電影評級的陣列類型:
CREATE TYPE rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
ALTER TABLE films_with_actors ADD COLUMN rating rating;
在Navicat中,我們可以在資料表設計器中按一下欄清單上方的「加入欄位」按鈕來加入新欄。使用上面的 CREATE TYPE 陳述式建立了 rating 的陣列類型之後,我們可以從「類型」下拉選單中選取「(Type)」項目,然後從「物件類型」清單中選擇 rating 項目:
![rating_column (61K)](https://www.navicat.com/link/Blog/Image/2024/20240301/CHT/rating_column.jpg)
資料表的 rating 欄現在有一個包含我們定義的陳列值的下拉選單:
![rating_column_in_grid_view (32K)](https://www.navicat.com/link/Blog/Image/2024/20240301/CHT/rating_column_in_grid_view.jpg)
總結
PostgreSQL 的陣列和列舉資料類型為開發人員提供了強大的工具,可以高效地建立複雜的資料結構。運用這些進階功能,開發人員可以增強資料完整性,簡化查詢,並構建更壯實的資料庫架構。在下一週的文章中,我們將介紹 Range 類型並結束對 PostgreSQL 進階資料類型的探索。Range 類型提供了一種簡潔的方式表示單一資料庫欄位中的一系列數值,在各種方面(從時態資料到數字間隔)都非常有用。
你是否正在尋找一個的易於使用的PostgreSQL 資料庫開發圖形化工具?Navicat 16 for PostgreSQL 是你的不二之選。按一下 此處 下載完整功能的應用程式,免費試用 14 天!