conseil pour bdd

bdd
Invité n'ayant pas de compte PHPfrance

20 mai 2005, 00:44

salut ! je fais une base de donnée dans laquelle je gère des clients... je stock le nom, prenom, date de naissance, adresse... ainsi que l'adresse mail.. est-il judicieux de me servir de l'adresse mail comme identifiant de ma table client ? ou un numero serait-il plus adequate ? merci !

Mammouth du PHP | 19672 Messages

20 mai 2005, 08:22

Salut,
l'idée de l'adresse de courriel est intéressante parce que c'est une adresse unique à chaque fois, mais tu as encore pas mal de gens qui n'ont pas d'accès du tout à Internet, soit géographiquement soit par choix personnel, et ils n'ont donc pas d'adresse de courriel. Donc un numéro automatiquement incrémenté est en fin de compte nécessaire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 mai 2005, 09:45

l'idée de l'adresse de courriel est intéressante parce que c'est une adresse unique à chaque fois
Je ne suis pas tout à fait d'accord...

Deux clients peuvent utiliser une même adresse e-mail [-X
(monsieur et madame, par exemple, font des commandes séparées.
C'est rare mais ça peut arriver.)

De même, utiliser la date de naissance ne convient pas non plus [-X
(il y a les jumeaux et les simples coïncidences...)

Conclusion :
Toujours définir une clé primaire avec un entier auto-incrémenté !
:!:

ViPHP
ViPHP | 1024 Messages

20 mai 2005, 09:46

j'éviterai le mail comme identifiant (clé primaire) Why?
parce que:
- si on fait référence à la table, il faut passer la clé = le mail = un champ de 50 caractères au lieu d'un champ numérique plus court (probleme de taille)
- un mail ça se change (problème de mise à jour sur les autres tables)

A+

Pascal

Mammouth du PHP | 19672 Messages

20 mai 2005, 09:52

l'idée de l'adresse de courriel est intéressante parce que c'est une adresse unique à chaque fois
Je ne suis pas tout à fait d'accord...
J'entends bien, mais tu ne peux pas trouver sur la planète deux adresses strictement identiques et en ce sens, elle pourrait à la rigueur servir de clé primaire: si monsieur et madame utilisent la même adresse, j'ai des raisons de croire qu'ils vivent à priori à la même adresse, donc ça ne posera pas de problème au niveau de la facturation ou de la livraison. Par contre là où tu as raison, c'est que monsieur s'inscrit et que madame le fait aussi en utilisant la même adresse de courriel, il y aura un problème.

La conclusion reste la même de toute façon, il faut un champ identifiant. Il y a une option : le nom d'usager qu'on peut mettre unique comme nos pseudo sur ce forum par exemple: il n'y a qu'un seul albat, une seul pascaltje, etc... mais c'est en revanche source d'erreurs et d'oublis pour un client qui se connecte une fois tous les 36 du mois et entre temps a perdu son identifiant.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2144 Messages

20 mai 2005, 10:01

Un client peut changer d'adresse email, et comme clé primaire, il faut quelque chose qui perdure, sans quoi, en cas de modification on devrait modifier toutes les tables faisant référence à cette clé primaire, et pour peu qu'une partie de ces données soient archivée, ce ne sera pas possible.
Rien n'empêche de mettre le champ mail en unique, mais sans l'utiliser comme clé primaire.
NB: les pseudos dans phpbb sont unique, mais la clé primaire est un id auto-incrémenté

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 mai 2005, 10:06

Quand je me penche sur un MCD, je part toujours du fait que la clé primaire doit être entièrement transparente pour l'utilisateur. Il ne doit même pas avoir la possibilité de connaître celle qui lui est attribué

Je suis contre le fait que ça soit un champ modifiable qui soit une PK car, comme l'a dit pascaltje, ca se change et c'est très dur à ce moment là de garantir une éventuelle intégrité référentielle !!!!

Le fait de mettre une PK numérique auto incrémenté à, à mon gout, des tas d'avantage

- l'index sur la PK est + performant
- on ne se soucis pas de vérifier si exiset déjà ou pas
- l'intégrité référentielle est toujours bonne même si on change l'intégralité des champs de l'enregistrement dont l'utilisteur à la possibilité d'accèder
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

bdd
Invité n'ayant pas de compte PHPfrance

20 mai 2005, 17:50

salut ! ok ok vous m'avez convaincu ! je garde l'auto incremente id :p merci les camarades ;)