ホームページ >データベース >mysql チュートリアル >チェック制約で複数のデータベース テーブルにわたる範囲制約を検証するにはどうすればよいですか?
チェック制約を使用したテーブル全体の範囲制約の検証
両方に StartDate 列と EndDate 列が含まれる 2 つのテーブル ProjectTimeSpan と SubProjectTimeSpan について考えます。 SubProjectTimeSpan の StartDate と EndDate が常に ProjectTimeSpan の対応する日付範囲内に収まるようにチェック制約が必要なシナリオが発生します。
従来のチェック制約
通常チェック制約は通常、同じテーブル内の値を比較します。ただし、この場合、条件では別のテーブルの値を参照する必要があります。
関数によるチェック制約の拡張
1 つの解決策は、チェック制約を関数と組み合わせて利用することです。 ProjectTimeSpan から関連データを取得できる関数。 CheckFunction() のような関数を定義し、制約内でそれを参照することにより、データベースは ProjectTimeSpan に格納されている値に対して日付範囲を動的に検証できます。
たとえば、次のコード スニペットは、そのようなチェックを実装する方法を示しています。制約:
ALTER TABLE SubProjectTimeSpan ADD CONSTRAINT chk_CheckFunction CHECK (dbo.CheckFunction() = 1)
CheckFunction 関数は次のように定義できます:
CREATE FUNCTION dbo.CheckFunction() RETURNS INT AS BEGIN RETURN (SELECT 1) END
関数ProjectTimeSpan から必要なデータを取得し、必要な比較を実行できます。このアプローチにより、複数のテーブルにわたる日付範囲の動的な検証が可能になり、最初の問題ステートメントに対処できます。
以上がチェック制約で複数のデータベース テーブルにわたる範囲制約を検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。