Mysql
 sql >> Database >  >> RDS >> Mysql

Come assegnare più ID a una riga in MySQL?

Come altri hanno già suggerito, la relazione molti-a-molti è rappresentata nel modello fisico da una tabella di giunzione. Farò il lavoro sulle gambe e te lo illustrerò:

CATEGORY_ITEM è la tabella di giunzione. Ha un PK composito costituito da FK migrati dalle altre due tabelle. Dati di esempio...

CATEGORIA:

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

ARTICOLO:

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

CATEGORY_ITEM:

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

Quanto sopra significa:"Foo è sia Apple che Orange, Bar è solo Apple" .

Il PK garantisce che una determinata combinazione di categoria e articolo non possa esistere più di una volta. La categoria è collegata all'elemento di non lo è - non può essere collegata più volte.

Poiché desideri principalmente cercare elementi di una determinata categoria, l'ordine dei campi nella PK è {CATEGORY_ID, ITEM_ID} in modo che l'indice sottostante possa soddisfare quella query. La spiegazione esatta del perché va oltre questo scopo:se sei interessato, ti consiglio caldamente di leggere Use The Index, Luke ! .

E poiché InnoDB utilizza il clustering , questo memorizzerà anche elementi appartenenti alla stessa categoria fisicamente vicini, il che potrebbe essere piuttosto vantaggioso per l'I/O della query precedente.

(Se si desidera eseguire una query per le categorie dell'elemento specificato, è necessario invertire l'ordine dei campi nell'indice.)