Optimiser mes tables

Résolu
DesTunK Messages postés 392 Statut Membre -  
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,

J'ai une question toute simple dont je n'ai pas la réponse ^^'
Je bosse sur une BDD et je dois l'optimiser au maximum.

Je voulais savoir si il était préférable de mettre en clé primaire :
- utiliser la clé de base varchar(15) (login par exemple) car le nom de l'attribut est unique
ou bien
- ajouter un int autoincrémenter pour créer une clé qui remplace le login

Car je vais référencer cette clé primaire ensuite dans une autre table en clé étrangère.

Je vais donc avoir 4*nblignesPK octets en plus sur ma table de base, mais je vais économiser (16-4)*nblignesFK sur ma table en clé étrangère.

Est-ce que mon raisonnement est bon ?

Cordialement :)
A voir également:

1 réponse

jordane45 Messages postés 40050 Statut Modérateur 4 756
 
Bonjour,
Il est préférable (en terme de performances) de manipuler des clés numériques au lieu de varchar.
Donc oui.. mettre un ID auto-incréménté est préférable ..

1
DesTunK Messages postés 392 Statut Membre 157
 
Merci beaucoup, je bloquais la dessus car c'est une question qui semble rajouté des informations au premier avis.

Par contre, comment faire pour ne pas perdre l'unicité.

Car mettre un id au lieu d'un varchar en clé primaire permet maintenant d'avoir le varchar plusieurs fois dans la base avec un ID différent.
Il s'agit de faire une vérification à partir de mon PHP du coup ?
0
jordane45 Messages postés 40050 Statut Modérateur 4 756 > DesTunK Messages postés 392 Statut Membre
 
Tu peux le gérer en PHP en effet...
ET tu peux aussi mettre ton champ varchar en UNIQUE pour empêcher de mauvaises manip.
0
DesTunK Messages postés 392 Statut Membre 157
 
J'y avais pas pensé, c'est vrai que ça fonctionne comme ça aussi !

En tout cas, merci beaucoup !
0
jordane45 Messages postés 40050 Statut Modérateur 4 756
 
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0