Domains
データを適切な形式で保存することで、データの整合性が確保され、エラーが防止され、パフォーマンスが最適化され、検証ルールの適用と効率的なデータ管理によってシステム間で一貫性が維持されます。これらの理由から、PostgreSQL のような一流のリレーショナルデータベースは、さまざまなデータ型を提供しています。さらに、PostgreSQL では、「CREATE DOMAIN」および「CREATE TYPE」ステートメントを使用してカスタムデータ型を作成できるため、開発者はアプリケーション固有のデータ検証、整合性、および一貫性を強化するためにデータ型を拡張できます。今日のブログでは、Navicat Premium 17 を使用して、無料の DVD レンタルデータベースのカスタムドメインを作成する方法を学びます。パート 2 では、型について説明します。
CREATE DOMAIN と CREATE TYPE の簡単な比較
CREATE DOMAIN ステートメントと CREATE TYPE ステートメントはどちらもユーザー定義データ型を作成するために使用できますが、認識しておくべき重要な違いがいくつかあります。
- CREATE DOMAIN は、NOT NULL や CHECK などの制約を持つユーザー定義データ型を作成します。
- CREATE TYPE は、ストアドプロシージャで戻り値のデータ型として使用される複合型を作成します。
Eメールドメインの作成
ドメインは、NULL 値を防ぎ、特定のフィールドタイプの空白をトリムする標準的な制約を作成するなど、複数のテーブルにわたって再利用可能な検証ルールを定義できるようにすることで、制約管理を一元化します。検証チェック付きでメールアドレスのドメインを作成する例を次に示します。
CREATE DOMAIN email AS VARCHAR(255) CHECK ( VALUE ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$' ); -- Use in a table definition CREATE TABLE customer_contacts ( customer_id INT, contact_email email );
Navicat Premium 17 と Navicat for PostgreSQL 17 はどちらも、正確な構文をすべて知らなくてもドメインと型を生成するための GUI ベースのツールを提供しています。どちらもメインツールバーの「その他」にあります。(以下の両方のメニュー項目が赤色で強調表示されています):

ドメインツールには、[一般]、[チェック]、[コメント]、[SQLプレビュー] の4つのタブがあります。
一般属性
すべてのドメインは、型に基づいています。この場合は VARCHAR です。[基になる型のカテゴリ] で [基本型] を選択すると、2つの [基になる型] ドロップダウンから [pg_catalog] と [varchar] を選択できます。また、VARCHAR の [長さ] が 255 であることを確認する必要があります。以下は、そのすべての情報が提供された [一般] タブです。

チェック
次のタブでは、誰かが私たちの型に値を割り当てようとしたときに実行する1つ以上のチェックを定義できます。私たちのチェックは、RegEx(正規表現)に対して値をテストします。

SQLプレビュー
この時点で、生成された CREATE DOMAIN ステートメントを実行するドメインの保存に進むか、[SQLプレビュー] タブをクリックして保存前にステートメントを表示することができます。

ドメイン定義をまだ保存していないため、ドメイン名は「Untitled」になっています。これは正常です。
テーブルでemailドメインを使用する
「email」ドメインが作成されたことを確認する最良の方法は、テーブルで試してみることです。「dvdrental」データベースの「staff」テーブルには、emailフィールドが含まれています。現在、検証チェックなしでVARCHARとして値を格納しています。テーブルデザイナーの[型]ドロップダウンから[(ドメイン)]オプションを選択し、[オブジェクト型]に「public」と「email」を選択することで、型をドメインに変更できます。

テーブルを保存すると、有効なメールアドレスではない値を変更(または追加)しようとすると、制約違反が発生します。

まとめ
無料のdvdrentalデータベースのカスタムドメインを作成することにより、再利用可能な検証ルールを定義できるようにすることで、ドメインが制約管理を一元化する方法を確認しました。パート2では、Navicat Premium 17の型ツールを使用して独自の型を作成します。