Navicatブログ

チェック制約を使用してPostgreSQLでデータの整合性を確保する 2024年3月25日 Robert Gravelle

データの整合性は、あらゆるデータベースシステムの重要な側面であり、保存されたデータが正確であり、一貫性があり、意味のあるものであることを保証します。PostgreSQLでは、データの整合性を維持するための強力なツールの1つがチェック制約の使用です。これらの制約を使用すると、データが従う必要があるルールを定義して、無効なデータの挿入や変更を防ぐことができます。この記事では、無料の DVDレンタルデータベース を参考に、チェック制約を使用してPostgreSQLでデータを検証する方法を説明します。

チェック制約の理解

チェック制約は、テーブルの列または列セットに入力できる値を制限するルールです。これらのルールはデータベースシステムによって強制され、指定された条件に違反する行の挿入や変更を防ぎます。チェック制約は、CHECKキーワードに続いてBoolean値に評価される式を使用して定義されます。

レンタル期間の検証

“rental_duration“列を含む”dvdrental“データベースの”rental“テーブルの修正バージョンを使用するシナリオを考えてみましょう。テーブル定義は、Navicat のテーブルデザイナーで次のように表示されます。

rentals_with_rental_period_table_definition (48K)

ここで、レンタル期間が常に0日以上であることを確認したいとします。これは、次のように“rentals_with_rental_period”テーブルにチェック制約を追加することで実現できます。

ALTER TABLE rentals_with_rental_period
ADD CONSTRAINT rental_duration_check
CHECK (rental_duration > 0);
    

Navicatでは、テーブルデザイナーの“チェック”タブでチェック制約を追加できます。式とオプションの名前を入力するだけです。名前を入力しない場合は、Navicatが一意の名前を作成します。

rental_duration_check_in_navicat (28K)

“保存”ボタンをクリックすると、Navicatはチェック制約を作成するか、制約に違反する行がある場合はエラーメッセージを表示します。

この制約を設定すると、レンタル期間が0以下の"rentals_with_rental_period"テーブルに行を挿入または更新しようとするとエラーになり、有効なレンタル期間のみが許可されるようになります。

有効な評価の適用

"dvdrental"データベースの"film"テーブルからの別の例は、映画の評価の検証です。評価を'G'、'PG'、'PG-13'、'R'、または 'NC-17'などの特定の値のみに制限するとします。これは、チェック制約を使用して実現できます:

ALTER TABLE film
ADD CONSTRAINT film_rating_check
CHECK (rating IN ('G', 'PG', 'PG-13', 'R', 'NC-17'));
    

Navicatのテーブルデザイナーの同じ制約は次のとおりです:

film_rating_check_in_navicat (34K)

これで、指定された値に含まれない評価を持つ行を“film”テーブルに挿入または更新しようとすると拒否され、有効な評価のみが許可されるようになります。

NULL値の処理

制約に NULL をチェックする条件が明示的に含まれていない限り、チェック制約は1つ以上の列に NULL 値を含む行には適用されないことに注意してください。例えば、“film”テーブルの“rental_rate”列が常に0より大きくNULL ではないことを強制するためには、次の制約を使用します:

ALTER TABLE film
ADD CONSTRAINT film_rental_rate_check
CHECK (rental_rate > 0 AND rental_rate IS NOT NULL);
    

Navicatのテーブルデザイナーの同じ制約は次のとおりです:

film_rental_rate_check_in_navicat (43K)

まとめ

チェック制約は、PostgreSQLでデータの整合性を確保するための強力なツールです。データが従うべきルールを定義することで、無効なデータの挿入や変更を防ぎ、データベースの正確性と一貫性を維持するのに役立ちます。データベース設計にチェック制約を組み込むことで、組織のニーズを満たす堅牢で信頼性の高いデータシステムを構築できます。

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