Navicatブログ

Navicat 17 で PostgreSQL のデータ型を拡張する - パート 4 Jan 27, 2025 by Robert Gravelle

範囲型

PostgreSQL が市場で最も柔軟なデータベースの 1 つであることは周知の事実です。実際、PostgreSQL の拡張性と豊富な機能セットにより、PostgreSQL は最近、開発者の間で最も賞賛され、望まれるデータベースシステムとして MySQL を追い抜きました。Navicat Premium 17 を使用して PostgreSQL でカスタムデータ型を作成するこのシリーズでは、カスタムドメイン、複合型、列挙型など、いくつかのオプションをこれまで探ってきました。今週のブログのトピックは範囲型です。これは、連続した間隔または値の範囲を扱う必要がある場合に特に役立ちます。

範囲型について

PostgreSQL の範囲型は、値の連続的な間隔を扱う手段を提供します。したがって、範囲には 10 ドルから 20 ドルの間のすべての製品価格を含めることができます。これらの範囲を使用すると、その境界内にある任意の値を操作できるため、スケジュールの競合や価格の一致などを簡単に確認できます。範囲は、時間の連続した期間、数値の間隔、またはその他の順次データを扱う必要がある場合に、データベースで特に役立ちます。

たとえば、映画館のデータベースでは、範囲を使用して上映時間を表し、同じ劇場で 2 つの映画が重複してスケジュールされないようにすることができます。または、ホテルの予約システムでは、範囲を使用して部屋の空き状況の日付を追跡し、空室の競合を簡単に確認できます。範囲型は、PostgreSQL がこれらの間隔の比較と操作の複雑なロジックをすべて処理し、範囲間の重複、包含、および交差をチェックするための組み込み演算を提供するため、特に貴重です。

次のセクションでは、 Navicat Premium 17 と無料の DVD レンタルデータベース を使用した実用的な例をいくつか紹介します。

映画の上映時間範囲の定義

カスタム範囲型を検討する前に、PostgreSQL の組み込み範囲型のいずれかが、私たちが求めていることを実現できるかどうかを確認する必要があります。これらには以下が含まれます。

  • int4range: 整数の範囲
  • int8range: bigint の範囲
  • numrange: 数値の範囲
  • tsrange: タイムゾーンのないタイムスタンプの範囲
  • tstzrange: タイムゾーン付きのタイムスタンプの範囲
  • daterange: 日付の範囲

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 17Navicat for PostgreSQL 17 の両方にあります。型ツールにアクセスするには、メインツールバーの「その他」をクリックし、ドロップダウンから「型」を選択します。

type_menu_command (33K)

これで「オブジェクト」ペインが表示され、既存の型のリストが表示されます。新しい型を作成するには、「オブジェクト」ツールバーの「新しい型」項目の横にある矢印をクリックし、コンテキストメニューから「範囲」項目を選択します。

range_menu_item (31K)

範囲型デザイナには、「一般」、「コメント」、「SQLプレビュー」の3つのタブがあります。「一般」タブでは、入力が必要な主な項目は「サブタイプ」と「サブタイプの違い」です。int4に基づいて型を作成します。

range_type_general_tab (35K)

「保存」ボタンをクリックする前に、「SQLプレビュー」タブをクリックすることで、Navicatが生成するステートメントを確認できます。

range_type_sql_preview (22K)

定義をまだ保存していないため、型名は「Untitled」になっています。これは想定どおりです。

「保存」ボタンをクリックすると、「名前を付けて保存」ダイアログが表示され、そこで型に名前を付けることができます。「runtime_range」と入力しましょう。

range_type_save_as_dialog (38K)

これで、"runtime_range" 型を他の PostgreSQL データ型と同じように使用できます。たとえば、上記の例で見た "film_runtime_categories" テーブルを作成する場合、"Object Type" ドロップダウンから選択して "typical_runtime" 列をカスタム型に設定できます。

runtime_range_type_in_table_designer (74K)

その後、「チェック」タブでフィールド検証を追加できます。

typical_runtime_check (42K)

まとめ

本日のブログでは、Navicat Premium 17' のタイプツールを使用して範囲型を作成し、そのカスタム型を特徴とする新しいテーブルを作成しました。パート5では、基本型を拡張することで、このシリーズを締めくくります。

ブログのアーカイブ
シェア