異なるデータベース内のテーブル間の参照整合性の強制: 回避策
別々のデータベース内のテーブル間に外部キー関係を直接作成すると、「データベース間の外部キー参照はサポートされていません」というエラーが発生することがよくあります。 この制限により、参照整合性を維持するための代替方法が必要になります。 そのようなアプローチの 1 つは、データベース トリガーの使用です。
データベーストリガーの活用
トリガーを使用すると、特定のデータベース イベント (INSERT、UPDATE、DELETE) に応答してカスタム コードを実行できます。 外部キーを含むセカンダリ データベース (database2.table2) のテーブルでトリガーを利用して制約を適用できます。
実装例
トリガーは次のように実装できます:
<code class="language-sql">CREATE TRIGGER dbo.MyTableTrigger ON dbo.MyTable AFTER INSERT, UPDATE AS BEGIN IF NOT EXISTS(SELECT PK FROM OtherDB.dbo.TableName WHERE PK IN (SELECT FK FROM INSERTED)) BEGIN -- Handle the integrity violation (e.g., rollback transaction or raise an error) END END</code>
このトリガーは、dbo.MyTable
での INSERT および UPDATE 操作をインターセプトします。参照された主キーが OtherDB.dbo.TableName
に存在するかどうかを検証します。外部キー参照が無効な場合、トリガーは違反を処理し、トランザクションをロールバックするか、例外を発生させる可能性があります。
重要な考慮事項:
トリガーは解決策を提供しますが、最適なアプローチではありません。 ベスト プラクティスは、直接外部キー制約を考慮して、同じデータベース内に両方のテーブルが存在するようにデータベース スキーマを設計することです。 このトリガーベースの方法は、データベースの再構築が現実的ではない状況の回避策として考慮する必要があります。
以上が異なるデータベース内のテーブル間の参照整合性を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。