他の人がすでに示唆しているように、多対多の関係は、物理モデルではジャンクションテーブルによって表されます。私は脚の仕事をして、あなたのためにそれを説明します:
CATEGORY_ITEMはジャンクションテーブルです。他の2つのテーブルから移行されたFKで構成される複合PKがあります。データの例...
カテゴリ:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
アイテム:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
上記の意味:「FooはAppleとOrangeの両方であり、BarはAppleのみです」 。
PKは、カテゴリとアイテムの特定の組み合わせが複数回存在しないようにします。カテゴリは、ではないアイテムに接続されています。複数回接続することはできません。
主に特定のカテゴリのアイテムを検索するため、PKのフィールドの順序は{CATEGORY_ID、ITEM_ID}であり、基になるインデックスがそのクエリを満たすことができます。理由の正確な説明はこの範囲を超えています-興味がある場合は、 Use The Index、Lukeを読むことを強くお勧めします。 ! 。
また、InnoDBはクラスタリングを使用している 、これにより、同じカテゴリに属するアイテムが物理的に近接して保存されるため、上記のクエリのI/Oにかなり役立つ場合があります。
(特定のアイテムのカテゴリをクエリする場合は、インデックス内のフィールドの順序を入れ替える必要があります。)