Jak już sugerowali inni, relacja wiele-do-wielu jest reprezentowana w modelu fizycznym przez tabelę skrzyżowań. Wykonam pracę nóg i zilustruję to dla Ciebie:
CATEGORY_ITEM to tabela połączeń. Ma złożoną PK składającą się z FK przeniesionych z pozostałych dwóch tabel. Przykładowe dane...
KATEGORIA:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
ELEMENT:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
Powyższe oznacza:„Foo to zarówno Apple, jak i Orange, Bar to tylko Apple” .
PK zapewnia, że dana kombinacja kategorii i przedmiotu nie może istnieć więcej niż raz. Kategoria jest połączona z elementem lub nie jest - nie może być połączona wielokrotnie.
Ponieważ chcesz przede wszystkim wyszukiwać elementy z danej kategorii, kolejność pól w PK to {CATEGORY_ID, ITEM_ID}, więc bazowy indeks może spełnić to zapytanie. Dokładne wyjaśnienie, dlaczego wykracza poza ten zakres - jeśli jesteś zainteresowany, gorąco polecam przeczytanie Use The Index, Luke ! .
A ponieważ InnoDB używa klastrowania , spowoduje to również przechowywanie elementów należących do tej samej kategorii fizycznie blisko siebie, co może być raczej korzystne dla operacji we/wy powyższego zapytania.
(Jeśli chcesz zapytać o kategorie danego elementu, musisz odwrócić kolejność pól w indeksie).