SQL Server 2008 でのチェック制約のあるカスタム関数の使用
SQL Server 2008 では、複数のテーブル間のデータ整合性の管理が困難な場合があります。この記事では、会場とイベント テーブルの間で一貫したデータを維持する際の特定の問題について説明します。
問題ステートメント
以下を保証するチェック制約を実装するには、カスタム関数が必要です。 events テーブルのevent_expected_attendance が、venue テーブルのvenue_max_capacity を超えることはありません。ただし、複数のテーブルの結合とカスタム関数の構文が複雑であるため、課題が生じます。
解決策
ユーザー定義関数 (UDF) を使用してチェック制約を実装すると、パフォーマンスに影響を与える場合、次のコードは機能的なソリューションを提供します。
CREATE FUNCTION dbo.CheckVenueCapacity (@venue_id int, @capacity int) RETURNS int AS BEGIN DECLARE @retval int SELECT @retval = CASE WHEN venue_max_capacity >= @capacity THEN 0 ELSE 1 END FROM venues WHERE venue_id = @venue_id RETURN @retval END; GO ALTER TABLE events ADD CONSTRAINT chkVenueCapacity CHECK (dbo.CheckVenueCapacity(event_venue_id, event_expected_attendance) = 0);
この関数 CheckVenueCapacity は、会場 ID と予想される出席者数を入力パラメータとして使用し、予想される出席者数が会場の最大収容人数内にある場合は 0 を返し、それ以外の場合は 1 を返します。その後、この条件を強制するためにチェック制約 chkVenueCapacity がイベント テーブルに追加されます。チェック制約でカスタム関数を使用すると、会場とイベント テーブル間のデータの整合性を維持できます。
以上がSQL Server 2008 でカスタム関数を使用してテーブル間のデータ整合性を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。