Som andre allerede har foreslået, er mange-til-mange forhold repræsenteret i den fysiske model af en forbindelsestabel. Jeg vil gøre benarbejdet og illustrere det for dig:
CATEGORY_ITEM er krydsningstabellen. Den har en sammensat PK bestående af FK'er migreret fra de to andre tabeller. Eksempeldata...
KATEGORI:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
VARE:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
Ovenstående betyder:"Foo er både Apple og Orange, Bar er kun Apple" .
PK sikrer, at enhver given kombination af kategori og vare ikke kan eksistere mere end én gang. Kategorien er enten forbundet med varen er ikke - den kan ikke forbindes flere gange.
Da du primært ønsker at søge efter elementer i en given kategori, er rækkefølgen af felter i PK {CATEGORY_ID, ITEM_ID}, så det underliggende indeks kan opfylde denne forespørgsel. Den nøjagtige forklaring på hvorfor ligger uden for dette omfang - hvis du er interesseret anbefaler jeg varmt at læse Use The Index, Luke ! .
Og da InnoDB bruger clustering , vil dette også gemme varer, der tilhører den samme kategori, fysisk tæt på hinanden, hvilket kan være ret fordelagtigt for I/O i forespørgslen ovenfor.
(Hvis du vil forespørge efter kategorier af det givne element, skal du vende rækkefølgen af felter i indekset.)