ホームページ >データベース >mysql チュートリアル >リレーショナル データベースでサブタイプを操作するときに参照整合性を維持するにはどうすればよいですか?
はじめに
参照整合性は、リレーショナル データベースのデータの正確性を確保するために重要です。これにより、外部キーの参照が有効であり、参照する主キーと一貫性があることが保証されます。この記事では、データ モデリングの一般的なシナリオである、サブタイプの参照整合性を実装する方法について説明します。
排他的なサブタイプ
排他的なサブタイプ関係では、各ベースタイプ行には、 1 つのサブタイプ行。これは通常、サブタイプを識別するベースタイプ テーブル内の識別子列を使用して実装されます。
関数とチェック制約を使用した実装:
例:
-- UDF to check basetype existence CREATE FUNCTION CheckBaseTypeExists (@PrimaryKey INT, @Discriminator CHAR(1)) RETURNS BIT AS BEGIN DECLARE @Exists BIT; SELECT @Exists = CASE WHEN EXISTS (SELECT 1 FROM BaseType WHERE PrimaryKey = @PrimaryKey AND Discriminator = @Discriminator) THEN 1 ELSE 0 END; RETURN @Exists; END; -- CHECK CONSTRAINT in Subtype ALTER TABLE Subtype ADD CONSTRAINT FK_BaseType FOREIGN KEY (PrimaryKey, Discriminator) REFERENCES BaseType (PrimaryKey, Discriminator) CHECK (CheckBaseTypeExists(PrimaryKey, Discriminator) = 1);
非排他的サブタイプ
非排他的サブタイプ内この関係により、ベースタイプ行には複数のサブタイプ行を含めることができます。これには、識別子列を使用する必要はありません。
PRIMARY KEY と FOREIGN KEY を使用した実装:
サブタイプ テーブルの PRIMARY KEY は、サブタイプ テーブルの FOREIGN KEY でもあります。基本型テーブル。これにより、各サブタイプ行が一意のベースタイプ行に関連付けられるようになります。
例:
CREATE TABLE Subtype ( PrimaryKey INT PRIMARY KEY, ForeignKey INT REFERENCES BaseType (PrimaryKey), ... );
トランザクションを使用した強制
ここで説明されているメソッドは、ユーザーがベースタイプの直接更新を妨げるものではないことに注意することが重要です。識別子またはサブタイプ行。これらのシナリオで参照整合性を強制するには、トランザクションを使用する必要があります。トランザクションにより、複数の操作が全体としてコミットされるか、操作が失敗した場合にロールバックされることが保証されます。
結論
説明したメソッドを使用してサブタイプに参照整合性を実装すると、データベース内のデータ関係が維持され、一貫性があることを保証できます。トランザクションは、データの直接操作によって生じる可能性のあるデータの不整合を防ぐ上で重要な役割を果たします。
以上がリレーショナル データベースでサブタイプを操作するときに参照整合性を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。