ホームページ  >  記事  >  データベース  >  SQL での循環参照が許容されるのはどのような場合ですか?

SQL での循環参照が許容されるのはどのような場合ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-25 13:03:15555ブラウズ

When is Circular Referencing in SQL Acceptable?

SQL での循環参照は許容されますか?

データベース設計において、相互に参照するテーブルを扱うときに共通の懸念が生じます。循環方式。この概念を理解するために、サンプル データベースを調べてみましょう。

CREATE TABLE products (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  NAME varchar(255) NOT NULL,
  ...
  DEFAULT_PICTURE_ID int(10) unsigned DEFAULT NULL,
  FOREIGN KEY (DEFAULT_PICTURE_ID) REFERENCES products_pictures (ID)
);

CREATE TABLE products_pictures (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  IMG_PATH varchar(255) NOT NULL,
  PRODUCT_ID int(10) unsigned NOT NULL,
  FOREIGN KEY (PRODUCT_ID) REFERENCES products (ID)
);

このシナリオでは、products テーブルには products_pictures テーブルを参照する DEFAULT_PICTURE_ID 列があり、products_pictures テーブルには、製品テーブル。これにより、循環参照が作成されます。

循環参照の結果

SQL での循環参照は、特に参照が NOT NULL として宣言されている場合に問題を引き起こす可能性があります。このような設計でのレコードの挿入または更新は、卵が先か鶏が先かという状況により問題が発生します。つまり、どのテーブルを最初に更新する必要があるかということです。さらに、レコードを削除すると、参照整合性違反が発生する可能性があります。

許容可能な代替手段

SQL での循環参照に対処するには、いくつかのアプローチがあります。

  • 1 つの外部キーを Null 可能にする: このオプションには、次のいずれかを作成することが含まれます。外部キーは NULL 可能で、一方のテーブルを参照せずに一方のテーブルにレコードを挿入できます。ただし、孤立レコードを防ぐ制約を実装してデータの整合性を確保することが重要です。
  • 個別の結合テーブルを使用する: 別の方法として、2 つのテーブルを関連付けるための個別の結合テーブルを作成することもできます。新しい外部キーのセット。このアプローチにより、循環参照が排除され、NOT NULL 外部キーを定義できるようになります。
  • 遅延可能な制約の使用を検討する: PostgreSQL や Oracle などの特定のデータベース システムでは、遅延可能な制約を使用して遅延させることができます。トランザクションがコミットされるまで外部キーが強制されます。ただし、この機能は MySQL ではサポートされていません。

結論:

SQL での循環参照は関係をモデル化するのに魅力的かもしれませんが、複雑さや問題を引き起こす可能性があります。パフォーマンスの問題。信頼性が高く保守しやすいデータベース設計を実現するには、null 許容外部キー、結合テーブル、遅延可能な制約など、より適切な代替手段の 1 つを選択することをお勧めします。

以上がSQL での循環参照が許容されるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。