MySQL-utiliser la clé étrangère comme clé primaire aussi

J'ai le tableau 1 avec une clé primaire user_id et le tableau 2 où user_id est une clé étrangère.

Seul 1 enregistrement par user_id peut exister dans le tableau 2, et aucun enregistrement ne peut exister sans lui.

QUESTION: user_id dans le tableau 2 peut-il être à la fois une clé étrangère et une clé primaire, et si oui, est-ce une bonne idée, quels sont les avantages/inconvénients?

27
demandé sur CodeVirtuoso 2012-01-21 03:09:38

1 réponses

Oui, vous pouvez le faire (et vous devriez, du point de vue de la conception de la base de données).

Cependant, considérez ce que cela signifie Si user_id est la clé primaire sur la table 2. Vous dites en effet que chaque ligne du tableau 2 correspond à un utilisateur, mais vous avez déjà une table où chaque ligne correspond à un utilisateur: Tableau 1. Cela soulève la question " Pourquoi alors ne mettez-vous pas toutes les données du tableau 2 dans des colonnes nullables du tableau 1?". Après tout, avoir deux tables signifie que vous devrez faire deux requêtes pour obtenir ces données au lieu d'un.

Maintenant, il y a quelques scénarios où cette pratique pourrait être une bonne idée:

  • Si vous avez beaucoup d'utilisateurs mais seulement quelques lignes dans la table 2, peut-être que la requête sur la table 2 ne sera effectuée que rarement; en même temps, vous gagnez de l'espace de stockage et de la vitesse de modification sur la table 1
  • Il pourrait être possible à l'avenir que la clé primaire de la table 2 change, alors que la clé étrangère reste; si vous mettez toutes les données dans la table 1, cette modification très probablement casser votre modèle de base de données

Cela peut être une bonne idée, mais cela dépend des détails de votre application.

32
répondu Jon 2012-01-20 23:13:30