Wie andere bereits vorgeschlagen haben, wird eine Viele-zu-Viele-Beziehung im physikalischen Modell durch eine Verbindungstabelle dargestellt. Ich übernehme die Beinarbeit und veranschauliche das für Sie:
Das CATEGORY_ITEM ist die Verbindungstabelle. Es hat einen zusammengesetzten PK, der aus FKs besteht, die aus den anderen beiden Tabellen migriert wurden. Beispieldaten...
KATEGORIE:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
ARTIKEL:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
Das Obige bedeutet:"Foo ist sowohl Apple als auch Orange, Bar ist nur Apple" .
Die PK stellt sicher, dass eine bestimmte Kombination aus Kategorie und Artikel nicht mehr als einmal vorhanden sein kann. Die Kategorie ist entweder mit dem Item verbunden oder nicht - sie kann nicht mehrfach verbunden werden.
Da Sie in erster Linie nach Elementen einer bestimmten Kategorie suchen möchten, ist die Reihenfolge der Felder im PK {CATEGORY_ID, ITEM_ID}, sodass der zugrunde liegende Index diese Abfrage erfüllen kann. Die genaue Erklärung, warum, würde diesen Rahmen sprengen - wenn Sie daran interessiert sind, empfehle ich wärmstens, Use The Index, Luke, zu lesen ! .
Und da InnoDB Clustering verwendet , werden dadurch auch Elemente derselben Kategorie physisch nahe beieinander gespeichert, was für die E/A der obigen Abfrage sehr vorteilhaft sein kann.
(Wenn Sie nach Kategorien des angegebenen Elements suchen möchten, müssen Sie die Reihenfolge der Felder im Index umkehren.)