SQL の自己参照関係
データベース スキーマでは、2 つのテーブルが相互に参照する可能性があります。ただし、このような自己参照関係の結果を考慮することが重要です。
提供されたテーブル設計で例示されているように、テーブル products と products_pictures は循環参照を形成します。products.DEFAULT_PICTURE_ID は products_pictures.ID を参照し、products_pictures を参照します。 .PRODUCT_ID 参照products.ID.
循環性の問題
テーブル間の循環参照は複雑さと潜在的な問題を引き起こす可能性があります:
オプション軽減策
循環参照の欠点を回避するには、次のオプションを検討してください。
オプション 1: Null 許容外部キー
外部キー列の 1 つを Null 可能にします。これにより、最初に関連テーブルにレコードを作成しなくても、1 つのテーブルにレコードを作成できるため、卵が先か鶏が先かの問題が解決されます。ただし、示されている例に示すように、無効なリレーションシップを防ぐために追加の制約が必要です。
オプション 2: IsDefault Indicator
products テーブルの外部キーを次のように置き換えます。 products_pictures テーブルのブール列 IsDefault。このアプローチでは、製品ごとに 1 つの画像のみをデフォルトとして指定できるようにするために、追加のテーブル レベルの制約が必要です。ただし、MySQL はそのような部分的なインデックス作成制約をサポートしません。
オプション 3: 遅延可能な制約
このオプションには、データ挿入後まで外部キー制約の適用を延期することが含まれます。特定の DBMS はこれをサポートしていますが、MySQL では使用できません。
オプション 4: 追加の結合テーブル
製品と製品間の関係を確立するために別の結合テーブルを導入します。 products_pictures テーブル。これにより、循環参照が排除され、外部キーを null ではないと宣言できるようになります。
MySQL の概要
説明したオプションのうち、MySQL は次の 2 つをサポートします。
以上がSQL データベースの循環参照を MySQL で効果的に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。