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

Pourquoi dois-je utiliser une clé étrangère si je peux utiliser WHERE ?

Ce n'est pas strictement nécessaire pour la requête, c'est vrai. Il existe pour plusieurs raisons :

  1. Comme une contrainte sur la table pour vous empêcher d'insérer quelque chose qui ne pointe vers rien ;
  2. Comme indice pour l'optimiseur ; et
  3. Pour des raisons historiques, c'était plus nécessaire.

(1) est probablement le plus important des trois. C'est ce qu'on appelle l'intégrité référentielle . Cela signifie que s'il y a une valeur dans une clé étrangère, il y aura un enregistrement correspondant avec cette valeur comme clé primaire dans la table parent.

Cela dit, toutes les bases de données ne prennent pas en charge l'intégrité référentielle (par exemple, les tables MySQL/MyISAM) et celles qui le font ne l'appliquent pas nécessairement (pour des raisons de performances).