Navicatブログ

PostgreSQLのルールの理解 2024年4月11日 Robert Gravelle

強力なオープンソースのリレーショナルデータベース管理システムであるPostgreSQLは、データの管理と操作を強化する様々な機能を提供します。これらの機能の中に、データベース内でクエリとコマンドを処理する方法を制御するために使用されるメカニズムであるルールがあります。この記事では、無料の DVDレンタルデータベース を使用した実際の例を使用して、PostgreSQLのルールの仕組みとトリガーとの違いについて説明します。

PostgreSQLのルールとは何ですか?

PostgreSQLのルールは、クエリまたはコマンドを実行する前に書き換える方法を提供します。ルールは、特定の条件に基づいて自動的に実行される一連の定義済みアクションとして機能します。ルールは、主に、基礎となるスキーマを変更せずにデータの抽象化とカスタマイズを実装するために使用されます。

さらに、PostgreSQLのルールは、データベース自体にビジネスロジックを適用するための強力なメカニズムを提供し、アプリケーションレベルの制約の必要性を減らし、様々なアプリケーションやインターフェイス間で一貫したデータ操作を保証します。複雑なロジックをデータベース内にカプセル化することで、ルールはデータの整合性と保守性を促進し、開発プロセスを簡素化します。

ルールとトリガーの違いは何ですか?

PostgreSQLではルールとトリガーは似たような目的を果たしますが、両者には顕著な違いがあります。

  1. 実行時間:
    • ルール: ルールはクエリ解析中に適用され、クエリプランの生成に影響します。
    • トリガー: トリガーは、INSERT、UPDATE、DELETEなどのイベントの完了後に実行されます。

  2. 可視性:
    • ルール: ルールは、クエリを実行するユーザーに対して透過的です。書き換えられたクエリは、クエリ実行プランに表示されます。
    • トリガー: トリガーはテーブルで明示的に定義され、特定のイベントによってトリガーされます。

  3. 粒度:
    • ルール: ルールはテーブルレベルまたはビューレベルで適用できるため、カスタマイズの柔軟性が高まります。
    • トリガー: トリガーは特定のテーブルにバインドされており、グローバルに適用することはできません。

  4. 複雑さ:
    • ルール: ルールは複雑になる可能性があり、複数のアクションや条件が含まれる場合があります。
    • トリガー: トリガーはイベント駆動型であるため、実装と管理が簡単です。

“dvdrental”サンプルデータベースを使用した実例: データ検証の実装

PostgreSQLのルールが“dvdrental”サンプルデータベースと連動してどのように機能するかを理解するために、実例を見てみましょう。

レンタル期間が少なくとも1日でなければならないという制約を適用するとします。これは、ルールを使用して実現できます:

CREATE RULE enforce_min_rental_duration AS
    ON INSERT TO rental
    WHERE (NEW.return_date - NEW.rental_date) < INTERVAL '1 day'
    DO INSTEAD NOTHING;

Navicatでは、テーブルデザイナーの“ルール”タブでルールを追加できます。“代わりに実行”ドロップダウンでは、“INSTEAD”と“ALSO”を選択できます。一方、“場所”テキストボックスではルールを実行するための条件を受け入れ、“定義”ボックスではルールが実行する内容を説明します。Navicatでの完全なルール定義は次のとおりです:

enforce_min_rental_duration_rule (49K)

このルールにより、期間が1日未満のレンタルを挿入しようとする試みが阻止されます。

まとめ

PostgreSQLのルールは、クエリの実行を制御し、データの整合性を強化するための強力なツールです。トリガーに似ていますが、実行時間、可視性、粒度、複雑さの点で明確な利点があります。ルールとトリガーの違いを理解し、その機能を活用することで、開発者は、データの整合性とセキュリティを維持しながら、特定の要件を満たすようにデータベースの動作を効果的にカスタマイズできます。

Navicat 16 For PostgreSQLを試してみませんか。全ての機能を使えるアプリケーションを こちら からダウンロードして、14日間の無料トライアルをお試しください!

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