Seperti yang telah disarankan orang lain, hubungan banyak ke banyak diwakili dalam model fisik oleh tabel persimpangan. Saya akan melakukan pekerjaan kaki dan mengilustrasikannya untuk Anda:
CATEGORY_ITEM adalah tabel persimpangan. Ini memiliki PK komposit yang terdiri dari FK yang dimigrasikan dari dua tabel lainnya. Contoh data...
KATEGORI:
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
Di atas berarti:"Foo adalah Apple dan Orange, Bar hanya Apple" .
PK memastikan kombinasi kategori dan item yang diberikan tidak boleh ada lebih dari satu kali. Kategori terhubung ke item tidak - tidak dapat terhubung beberapa kali.
Karena Anda terutama ingin menelusuri item dari kategori tertentu, urutan bidang dalam PK adalah {CATEGORY_ID, ITEM_ID} sehingga indeks yang mendasarinya dapat memenuhi kueri tersebut. Penjelasan yang tepat mengapa berada di luar cakupan ini - jika Anda tertarik, saya sangat menyarankan untuk membaca Gunakan Indeks, Luke ! .
Dan karena InnoDB menggunakan pengelompokan , ini juga akan menyimpan item yang termasuk dalam kategori yang sama secara fisik berdekatan, yang mungkin lebih bermanfaat untuk I/O kueri di atas.
(Jika Anda ingin membuat kueri untuk kategori item tertentu, Anda perlu membalik urutan bidang dalam indeks.)