Jak již naznačili jiní, vztah many-to-many je ve fyzickém modelu reprezentován spojovací tabulkou. Udělám práci nohou a ukážu vám to:
CATEGORY_ITEM je spojovací tabulka. Má složený PK sestávající z FK migrovaných z dalších dvou tabulek. Příklad dat...
KATEGORIE:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
POLOŽKA:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
Výše uvedené znamená:"Foo je Apple i Orange, Bar je jenom Apple" .
PK zajišťuje, že žádná daná kombinace kategorie a položky nemůže existovat více než jednou. Kategorie je buď spojena s položkou není - nelze ji připojit vícekrát.
Protože chcete primárně hledat položky dané kategorie, pořadí polí v PK je {CATEGORY_ID, ITEM_ID}, takže základní index může tento dotaz uspokojit. Přesné vysvětlení proč je mimo tento rámec – pokud vás to zajímá, vřele doporučuji přečíst Use The Index, Luke ! .
A protože InnoDB používá shlukování , bude to také ukládat položky patřící do stejné kategorie fyzicky blízko sebe, což může být pro I/O výše uvedeného dotazu spíše výhodné.
(Pokud byste se chtěli dotazovat na kategorie dané položky, museli byste otočit pořadí polí v indexu.)