Faire un lien tables besoin d'une source de champ de clé primaire?

Je suis en train de travailler sur un couple de lier les tables, et je suis arrivé à penser (Danger Robinson, Danger) quelles sont les structures possibles d'une table de lien et quels en sont les avantages et les inconvénients de.

Je suis venu avec quelques restrictions pour le lien de la table:

Traditionnel 3 modèle de colonnes

  • id - numérotation automatique PRIMAIRE
  • table1fk - clé étrangère
  • table2fk - clé étrangère

C'est un classique, dans la plupart des livres, 'nuff said.

Indexés 3 modèle de colonnes

  • id - numérotation automatique PRIMAIRE
  • table1fk - clé étrangère INDEX ('table1fk')
  • table2fk - clé étrangère INDEX ('table2fk')

Dans ma propre expérience, les champs que vous interrogez contre ne sont pas indexés dans le modèle traditionnel. J'ai trouvé que l'indexation des champs de clé étrangère permet d'améliorer les performances que l'on attend. Pas de changement majeur, mais une belle optimisation de tweak.

Clé composée de 2 colonnes ADD PRIMARY KEY ('table1fk' , 'table2fk')

  • table1fk - clé étrangère
  • table2fk - clé étrangère

Avec cela, j'utilise une clé composite de sorte qu'un enregistrement de la table table1 ne peut être liée à un enregistrement sur table2 une fois. Parce que la clé est composite, je peux ajouter des enregistrements (1,1), (1,2), (2,2) sans duplication des erreurs.

Les problèmes potentiels avec la clé composée de 2 colonnes de l'option? Est-il un problème d'indexation que cela pourrait causer? Un gain de performance? Tout ce qui pourrait disqualifier cela comme une option possible?