範圍類型
毫無疑問,PostgreSQL 是市場上最靈活的資料庫之一。事實上,PostgreSQL 的可擴展性和豐富的功能集最近使其超越 MySQL 成為開發人員最受推崇和期望的資料庫系統。在關於使用 Navicat Premium 17 在 PostgreSQL 中建立自訂資料類型的系列中,我們到目前為止已經探索了一些類型,包括自訂網域、複合類型和列舉類型。本週文章的主題將是範圍類型,當你需要處理連續間隔或值範圍時,範圍類型尤其有用。
RANGE TYPE 快覽
PostgreSQL 中的範圍類型提供了一種處理連續值間隔的方法。因此,一個範圍可以包括 10 美元到 20 美元之間的所有產品價格。這些範圍使你可以使用落在其範圍內的任何值,從而可以輕鬆地檢查排程衝突或價格匹配等情況。當你需要處理連續的時間跨度、數值間隔或任何其他順序資料時,範圍類型在資料庫中非常有用。
例如,在電影院的資料庫中,你可以使用範圍類型來表示放映時間,以確保不會有兩部電影的放映時間重疊。或者在飯店預訂系統中,範圍類型可以追蹤客房的可用日期,從而輕鬆檢查空房衝突。範圍類型特別有用,因為 PostgreSQL 處理了比較和操作這些間隔的所有複雜邏輯,提供內建作業來檢查範圍之間的重疊、包含和交集。
在下一節中,我們將介紹幾個使用 Navicat Premium 17 和免費 DVD 租賃資料庫 的實際範例。
定義影片播放時間範圍
在考慮自訂範圍類型之前,我們應該檢查 PostgreSQL 的內建範圍類型是否能夠滿足我們的需求。這些包括:
- int4range:integer的範圍
- int8range:bigint 的範圍
- numrange:numeric 的範圍
- tsrange:不帶時區的timestamp 的範圍
- tstzrange:帶時區的 timestamp的範圍
- daterange:date的範圍
雖然 DVD 租賃資料庫中的電影播放時間儲存為整數,但當我們有特定業務需求且內建類型無法滿足時,建立我們自己的範圍類型是有意義的。例如,如果我們使用特殊的驗證規則來追蹤電影播放時間範圍:
-- Creating a custom minutes range type with specific validation CREATE TYPE runtime_range AS RANGE ( subtype = integer, subtype_diff = int4mi ); CREATE TABLE film_runtime_categories ( category_name VARCHAR(50), typical_runtime runtime_range, CHECK (lower(typical_runtime) >l= 30 AND upper(typical_runtime) <= 240) ); -- Adding rows to the table INSERT INTO film_runtime_categories VALUES ('Short Film', '[30,45]'); INSERT INTO film_runtime_categories VALUES ('Feature Film', '[75,180]');
在 Navicat 17 中建立範圍類型
定義列舉類型的一種更簡單的方法是使用 Navicat 的 GUI 工具。你可以在 Navicat Premium 17 和 Navicat for PostgreSQL 17 中找到它們。若要存取「類型」工具,只需按一下主工具列中的「其他」按鈕,然後從下拉式清單中選取「類型」:
這會開啟「物件」窗格,在那裡我們可以看到現有類型的清單。若要建立新類型,請按一下「物件」工具列中「新增類型」項目旁的箭頭,然後從選單中選取「範圍」項目:
範圍類型設計器有三個索引標籤:一般、註解和 SQL 預覽。在「一般」索引標籤中,我們需要提供的主要詳細資料是「子類型」和「子類型差異」。我們將以 int4 為基礎定義我們的類型,如下所示:
在按下「儲存」按鈕之前,我們可以按一下「SQL 預覽」標籤來查看 Navicat 產生的陳述式:
請注意,類型名稱為「未命名」,因為我們尚未儲存定義。這是正常的。
按下「儲存」按鈕後,我們會看到一個「另存為」對話方塊,我們可以在那裡輸入類型名稱「runtime_range」:
現在我們可以像其他 PostgreSQL 資料類型一樣使用「runtime_range」類型。例如,如果我們建立在之前範例中的「film_runtime_categories」資料表,我們可以從「物件類型」下拉式清單中選取,將「typical_runtime」欄設定為我們的自訂類型:
然後我們可以在「檢查」索引標籤中新增欄位驗證:
總結
在今天的文章中,我們使用 Navicat Premium 17 的類型工具建立了一個範圍類型,並建立了一個使用我們自訂類型的新資料表。在第 5 部分中,我們將透過擴展基本類型來結束這個系列。