Ne pas modifier un identifiant ?

Eléphant du PHP | 92 Messages

12 août 2009, 19:39

Bonsoir,
En parcourant les tutos, je vois qu'il y en a un PHP/SQL qui conseille de ne jamais modifier les identifiants des données.

Et justement, je me posais une question il y a quelques jours : dans le cas d'une table d'utilisateurs qui sont identifiés par un login qui doit être unique (deux utilisateurs ne doivent pas avoir le même login), est-ce qu'il vaut mieux utiliser un id numérique pour chaque utilisateur ou utiliser le champ login comme clé unique de la table ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 août 2009, 22:08

Comme je le dit dans le tuto en question, un identifiant ne doit pas être une valeur que l'utilisateur connait.

Ton exemple est une illustration parfaite : tu as une table "utilisateur". Immagine que tu mettes à disposition une table "message" qui sont associés à un utilisateur. Dans cette table, il faut que tu mettes la clé primaire de la table utilisateur.
Si tu utilises le login comme clé primaire de la table "utilisateur", lorsque quelqu'un va vouloir changer son login, il va falloir que tu modifies tous les enregistrements de la table "message" pour qu'ils pointent sur le bon enregistrement.

Donc, il faut que tu utilises un identifiant qui est inconnu du public, qui ne peut pas etre modifié, et qui sera le garant à travers le temps de l'identification d'un enregistrement.

Par contre, si ton soucis, c'est de faire en sorte que ta table ne puisses avoir 2 login identiques, il existe la solution des index unique (je t'ai donné le lien vers MySQL, mais c'est implémenté dans tout les SGBD).
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

Eléphant du PHP | 92 Messages

12 août 2009, 22:19

Ok, merci pour la réponse. Je vais regarder cette histoire d'index unique de plus près. Bon, ce n'est de toute façon pas difficile de tester si un login existe déjà avec mon système mais je ne voyais pas trop en quoi ça pouvait poser problème globalement. Bêtement, je n'avais pas pensé aux tables associées.