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

Pourquoi devrions-nous avoir une colonne ID dans la table des utilisateurs ?

Même si votre nom d'utilisateur est unique, il y a peu d'avantages à avoir une colonne d'id supplémentaire au lieu d'utiliser le varchar comme clé primaire.

  • Certaines personnes préfèrent utiliser une colonne d'entiers comme clé primaire, pour servir de clé de substitution qui n'a jamais besoin de changer, même si d'autres colonnes sont susceptibles de changer. Bien que rien n'empêche une clé primaire naturelle d'être également modifiable, vous devez utiliser des contraintes de clé étrangère en cascade pour vous assurer que les clés étrangères des tables associées sont mises à jour en synchronisation avec une telle modification.

  • La clé primaire étant un entier 32 bits au lieu d'un varchar peut économiser de l'espace. Le choix entre une colonne de clé étrangère int ou varchar dans toutes les autres tables faisant référence à votre table utilisateur peut être une bonne raison.

  • L'insertion dans l'index de clé primaire est un peu plus efficace si vous ajoutez de nouvelles lignes à la fin de l'index, au lieu de les coincer au milieu de l'index. Les index dans les tables MySQL sont généralement des structures de données B+Tree, et vous pouvez les étudier pour comprendre comment ils fonctionnent.

  • Certains frameworks d'application préfèrent la convention selon laquelle chaque table de votre base de données a une colonne de clé primaire appelée id , au lieu d'utiliser des clés naturelles ou des clés composées. Le respect de ces conventions peut simplifier certaines tâches de programmation.

Aucun de ces problèmes n'est décisif. Et il y a aussi des avantages à utiliser des clés naturelles :

  • Si vous recherchez plus souvent des lignes par nom d'utilisateur que par identifiant, il peut être préférable de choisir le nom d'utilisateur comme clé primaire et de tirer parti du stockage organisé par index d'InnoDB. Faites en sorte que votre colonne de recherche primaire soit la clé primaire, si possible, car les recherches de clé primaire sont plus efficaces dans InnoDB (vous devriez utiliser InnoDB dans MySQL).

  • Comme vous l'avez remarqué, si vous avez déjà une contrainte unique sur le nom d'utilisateur, cela semble être une perte de stockage de conserver une colonne d'identifiant supplémentaire dont vous n'avez pas besoin.

  • L'utilisation d'une clé naturelle signifie que les clés étrangères contiennent une valeur lisible par l'homme, au lieu d'un identifiant entier arbitraire. Cela permet aux requêtes d'utiliser la valeur de clé étrangère sans avoir à se joindre à la table parent pour la valeur "réelle".

Le fait est qu'il n'y a pas de règle qui couvre 100% des cas. Je vous recommande souvent de garder vos options ouvertes et d'utiliser des clés naturelles, des clés composées et des clés de substitution même dans une seule base de données.

Je couvre certains problèmes de clés de substitution dans le chapitre "ID requis" de mon livre Antipatterns SQL :éviter les pièges de la programmation de bases de données .