Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie weist man einer Zeile in MySQL mehrere IDs zu?

Wie andere bereits vorgeschlagen haben, wird eine Viele-zu-Viele-Beziehung im physikalischen Modell durch eine Verbindungstabelle dargestellt. Ich übernehme die Beinarbeit und veranschauliche das für Sie:

Das CATEGORY_ITEM ist die Verbindungstabelle. Es hat einen zusammengesetzten PK, der aus FKs besteht, die aus den anderen beiden Tabellen migriert wurden. Beispieldaten...

KATEGORIE:

CATEGORY_ID CATEGORY
----------- --------
1           Apple
2           Orange

ARTIKEL:

ITEM_ID     NAME
-------     ----
1           Foo
2           Bar

CATEGORY_ITEM:

CATEGORY_ID ITEM_ID
----------- -------
1           1
2           1
1           2

Das Obige bedeutet:"Foo ist sowohl Apple als auch Orange, Bar ist nur Apple" .

Die PK stellt sicher, dass eine bestimmte Kombination aus Kategorie und Artikel nicht mehr als einmal vorhanden sein kann. Die Kategorie ist entweder mit dem Item verbunden oder nicht - sie kann nicht mehrfach verbunden werden.

Da Sie in erster Linie nach Elementen einer bestimmten Kategorie suchen möchten, ist die Reihenfolge der Felder im PK {CATEGORY_ID, ITEM_ID}, sodass der zugrunde liegende Index diese Abfrage erfüllen kann. Die genaue Erklärung, warum, würde diesen Rahmen sprengen - wenn Sie daran interessiert sind, empfehle ich wärmstens, Use The Index, Luke, zu lesen ! .

Und da InnoDB Clustering verwendet , werden dadurch auch Elemente derselben Kategorie physisch nahe beieinander gespeichert, was für die E/A der obigen Abfrage sehr vorteilhaft sein kann.

(Wenn Sie nach Kategorien des angegebenen Elements suchen möchten, müssen Sie die Reihenfolge der Felder im Index umkehren.)