Zoals anderen al hebben gesuggereerd, wordt de veel-op-veel-relatie in het fysieke model weergegeven door een verbindingstabel. Ik zal het beenwerk doen en dat voor je illustreren:
De CATEGORY_ITEM is de knooppuntentabel. Het heeft een samengestelde PK die bestaat uit FK's die zijn gemigreerd vanuit de andere twee tabellen. Voorbeeldgegevens...
CATEGORIE:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
ITEM:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
Het bovenstaande betekent:"Foo is zowel Apple als Orange, Bar is alleen Apple" .
De PK zorgt ervoor dat een bepaalde combinatie van categorie en item niet meer dan één keer kan bestaan. De categorie is ofwel verbonden met het item is niet - het kan niet meerdere keren worden verbonden.
Aangezien u in de eerste plaats wilt zoeken naar items van een bepaalde categorie, is de volgorde van velden in de PK {CATEGORY_ID, ITEM_ID}, zodat de onderliggende index aan die vraag kan voldoen. De exacte uitleg waarom valt buiten dit bestek - als u geïnteresseerd bent, raad ik u van harte aan om Use The Index, Luke te lezen ! .
En aangezien InnoDB clustering gebruikt , worden hiermee ook items die tot dezelfde categorie behoren fysiek dicht bij elkaar opgeslagen, wat nogal gunstig kan zijn voor de I/O van de bovenstaande query.
(Als u naar categorieën van het gegeven item wilt zoeken, moet u de volgorde van de velden in de index omdraaien.)