2017-07-25 1 views
0

Supposons que nous ayons deux tables: produits et commandes. Comme c'est une relation multi-à-plusieurs, j'ai créé une table supplémentaire: ordersproducts.MySQL - table plusieurs à plusieurs - clés primaires et doublons

Comme je l'ai lu de nombreux fils, deux clés primaires sont recommandées dans ce cas - ordersproducts de table:

ORDER_ID (PK), Product_ID (PK, FK),

Cependant, dans cette situation, il peut Ne soyez pas des doublons dans le tableau. Order_id peut être dupliqué, mais product_id doit être unique, et j'ai besoin d'un peu plus de flexibilité - order_id devrait être en mesure de dupliquer et donc product_id.

Fonctionne correctement après avoir supprimé les clés primaires, en laissant seulement la clé étrangère à product_id, cependant - table sans clés primaires ne semble pas correct, n'est-ce pas?

+0

vous pouvez rendre unique de combinaison de (order_id et product_id) Dans ce cas, order_id peut être dupliqué même chose pour product_id mais les deux ne peuvent pas dupliquer en même temps – Ashish451

+0

La chose est - j'ai besoin qu'ils soient tous deux en mesure de dupliquer temps. Dans une commande, il peut y avoir 4 produits: clavier, souris, souris, lecteur sdd. (C'est juste un exemple.) Et la souris ne peut pas être résolue en tant que quantité, souris de produit dans ce cas est plus comme un type de produit que produit exact. – ficus

+1

dans ce cas ont 3 colonnes dans les commandesproduits 1. clé primaire 2,3 order_id et product_id – Ashish451

Répondre

0

Toujours avoir un PRIMARY KEY. On dirait que vous avez besoin soit (pas les deux) de ceux-ci:

PRIMARY KEY(order_id, product_id) 
PRIMARY KEY(product_id, order_id) 

Ces disent (parce qu'un PK MySQL doit être unique) qu'il y peut être des doublons de deux colonnes, mais la paire est ne duplique jamais.

Puisque vous voulez probablement aller dans les deux directions (donné un ordre, trouver tous les produits et donné un produit, trouver toutes les commandes), vous avez besoin d'indices dans les deux sens:

PRIMARY KEY(order_id, product_id), 
INDEX(product_id, order_id) 

Rappelez-vous, un PK est UNIQUE et est un INDEX.

Here sont plus de conseils sur pratiquement tous beaucoup: beaucoup de table. Cela discute d'une solution générique à votre problème générique.