Както вече предложиха други, връзката много към много е представена във физическия модел чрез маса за свързване. Ще свърша работата с краката и ще ви илюстрирам това:
CATEGORY_ITEM е съединителната маса. Той има съставен PK, състоящ се от FKs, мигрирали от другите две таблици. Примерни данни...
КАТЕГОРИЯ:
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
Горното означава:„Foo е едновременно Apple и Orange, Bar е само Apple“ .
PK гарантира, че дадена комбинация от категория и артикул не може да съществува повече от веднъж. Категорията или е свързана с елемента на isn't - не може да бъде свързана няколко пъти.
Тъй като основно искате да търсите елементи от дадена категория, редът на полетата в PK е {CATEGORY_ID, ITEM_ID}, така че основният индекс може да удовлетвори тази заявка. Точното обяснение защо е извън този обхват - ако се интересувате, горещо препоръчвам да прочетете Използвайте индекса, Люк ! .
И тъй като InnoDB използва клъстериране , това също така ще съхранява елементи, принадлежащи към една и съща категория, физически близо един до друг, което може да бъде доста полезно за I/O на заявката по-горе.
(Ако искате да направите заявка за категории на дадения елемент, ще трябва да обърнете реда на полетата в индекса.)