リレーショナル データベースでサブタイプを操作するときに参照整合性を維持するにはどうすればよいですか?
Jan 03, 2025 am 03:59 AMサブタイプで参照整合性を実装する方法
はじめに
参照整合性は、リレーショナル データベースのデータの正確性を確保するために重要です。これにより、外部キーの参照が有効であり、参照する主キーと一貫性があることが保証されます。この記事では、データ モデリングの一般的なシナリオである、サブタイプの参照整合性を実装する方法について説明します。
排他的なサブタイプ
排他的なサブタイプ関係では、各ベースタイプ行には、 1 つのサブタイプ行。これは通常、サブタイプを識別するベースタイプ テーブル内の識別子列を使用して実装されます。
関数とチェック制約を使用した実装:
- 「ユーザー」を作成する「Defined」主キーと識別子の値の組み合わせをチェックする関数 (UDF)
- サブタイプ テーブルに CHECK CONSTRAINT を実装して、UDF を呼び出し、サブタイプを挿入する前に親ベースタイプ行が存在することを確認します。 row.
例:
-- 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 サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?
