Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment attribuer plusieurs identifiants à une ligne dans MySQL ?

Comme d'autres l'ont déjà suggéré, la relation plusieurs à plusieurs est représentée dans le modèle physique par une table de jonction. Je vais faire le travail des jambes et illustrer cela pour vous :

Le CATEGORY_ITEM est la table de jonction. Il a un PK composite composé de FK migrés à partir des deux autres tables. Exemple de données...

CATÉGORIE :

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

ÉLÉMENT :

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

CATEGORY_ITEM :

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

Ce qui précède signifie :"Foo est à la fois Apple et Orange, Bar n'est qu'Apple" .

Le PK garantit qu'une combinaison donnée de catégorie et d'élément ne peut pas exister plus d'une fois. La catégorie est soit connectée à l'élément ou n'est pas - elle ne peut pas être connectée plusieurs fois.

Étant donné que vous souhaitez principalement rechercher des éléments d'une catégorie donnée, l'ordre des champs dans le PK est {CATEGORY_ID, ITEM_ID} afin que l'index sous-jacent puisse satisfaire cette requête. L'explication exacte pourquoi est au-delà de cette portée - si vous êtes intéressé, je vous recommande vivement de lire Utiliser l'index, Luke ! .

Et puisque InnoDB utilise le clustering , cela stockera également les éléments appartenant à la même catégorie physiquement proches les uns des autres, ce qui peut être plutôt bénéfique pour les E/S de la requête ci-dessus.

(Si vous souhaitez interroger les catégories de l'élément donné, vous devez inverser l'ordre des champs dans l'index.)