228 votes

Utiliser l'adresse électronique comme clé primaire ?

L'adresse électronique est-elle un mauvais candidat pour le primaire par rapport aux nombres qui s'incrémentent automatiquement ?

Notre application web a besoin que l'adresse e-mail soit unique dans le système. J'ai donc pensé à utiliser l'adresse électronique comme clé primaire. Cependant, mon collègue suggère que la comparaison de chaînes de caractères sera plus lente que la comparaison d'entiers.

Est-ce une raison valable de ne pas utiliser l'email comme clé primaire ?

Nous utilisons PostgreSQL .

280voto

Sjoerd Points 34671

La comparaison de chaînes de caractères est plus lente que la comparaison d'intersections. Toutefois, cela n'a pas d'importance si vous récupérez simplement un utilisateur dans la base de données à l'aide de l'adresse électronique. En revanche, cela a de l'importance si vous avez des requêtes complexes avec des jointures multiples.

Si vous stockez des informations sur les utilisateurs dans plusieurs tables, les clés étrangères de la table des utilisateurs seront l'adresse électronique. Cela signifie que vous stockez l'adresse électronique plusieurs fois.

175voto

HLGEM Points 54641

Je ferai également remarquer que l'adresse électronique n'est pas un bon choix pour créer un champ unique, car il y a des personnes et même des petites entreprises qui partagent une adresse électronique. Il en va de même pour les numéros de téléphone, les courriels peuvent être réutilisés. Jsmith@somecompany.com peut très bien appartenir à John Smith un an et à Julia Smith deux ans plus tard.

Un autre problème avec les courriels est qu'ils changent fréquemment. Si vous joignez d'autres tables avec cette clé, vous devrez également mettre à jour les autres tables, ce qui peut nuire aux performances lorsque toute une société cliente change d'adresse électronique (ce que j'ai vu se produire).

99voto

Steven A. Lowe Points 40596

La clé primaire doit être unique et constant

Les adresses électroniques changent comme les saisons. Utile comme clé secondaire pour la recherche, mais un mauvais choix pour la clé primaire.

63voto

Jay Points 14781

Inconvénients de l'utilisation d'une adresse électronique comme clé primaire :

  1. Ralentissement lors des jonctions.

  2. Tout autre enregistrement avec une clé étrangère affichée a maintenant une valeur plus importante, ce qui occupe plus d'espace disque. (Compte tenu du coût de l'espace disque aujourd'hui, il s'agit probablement d'un problème insignifiant, sauf dans la mesure où la lecture de l'enregistrement prend plus de temps. Voir n° 1).

  3. Une adresse électronique peut changer, ce qui oblige à mettre à jour tous les enregistrements qui l'utilisent comme clé étrangère. Comme les adresses électroniques ne changent pas très souvent, le problème de performance est probablement mineur. Le plus gros problème est qu'il faut s'assurer de le prévoir. Si vous devez écrire le code, cela représente un surcroît de travail et introduit la possibilité de bogues. Si votre moteur de base de données prend en charge la "cascade de mises à jour", il s'agit d'un problème mineur.

Avantages de l'utilisation de l'adresse électronique comme clé primaire :

  1. Il est possible d'éliminer complètement certaines jonctions. Si tout ce dont vous avez besoin dans la "fiche" est l'adresse électronique, avec une clé abstraite entière, vous devrez effectuer une jointure pour la récupérer. Si la clé est l'adresse électronique, vous l'avez déjà et la jointure n'est pas nécessaire. Pour savoir si cela vous sera utile, il faut savoir si cette situation se présente souvent.

  2. Lorsque vous effectuez des requêtes ad hoc, il est facile pour un être humain de voir quelle fiche est référencée. Cela peut s'avérer très utile lorsqu'il s'agit d'identifier des problèmes de données.

  3. Vous aurez certainement besoin d'un index sur l'adresse électronique de toute façon, de sorte que le fait d'en faire la clé primaire élimine un index, ce qui améliore les performances des insertions puisqu'il n'y a plus qu'un seul index à mettre à jour au lieu de deux.

À mon humble avis, la question n'est pas tranchée dans un sens ou dans l'autre. J'ai tendance à préférer les touches naturelles lorsqu'elles sont disponibles, parce qu'elles sont tout simplement plus faciles à utiliser et que les inconvénients ne sont pas vraiment importants dans la plupart des cas.

12voto

meriton Points 30447

C'est assez grave. Supposons qu'un fournisseur de services de courrier électronique fasse faillite. Les utilisateurs voudront alors changer d'adresse électronique. Si vous avez utilisé l'e-mail comme clé primaire, toutes les clés étrangères des utilisateurs dupliqueront cet e-mail, ce qui rendra le changement très difficile...

... et je n'ai même pas commencé à parler des considérations de performance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X