Varchar primary key

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Varchar primary key

par Sékiltoyai » 01 nov. 2007, 16:16

Si tu veux des structures bien faites, renseigne toi sur MCD, ya un cours par exemple sur cette page.

par Sékiltoyai » 01 nov. 2007, 16:12

Imagine un de tes membres qui te demande de modifier son pseudo (c'est pas si idiot que ça ;) ) ... tu va être obligé de modifier toutes tes tables où le pseudo est une clé étrangère. :?
[avocat du diable]
Ya le ON UPDATE CASCADE :D
[/avocat du diable]

En effet le pseudo peut (et vaut mieux) être une clé UNIQUE, mais l'utiliser pour les jointures serait assez couteux en ressources. Le coup de l'identifiant PRIMARY INT AUTOINCREMENT c'est souvent la meilleure chose à faire, surtout lorsque tu utilises des jointures ou des clés étrangères. (A la rigueur on peut s'en passer pour une table qui n'est liée à aucune autre et sur laquelle on fera peu de modifications)…

par zeus » 01 nov. 2007, 13:40

Salut,

De manière générale, il vaut mieux que la clé primaire ne soit pas une donnée visible par l'utilisateur, qui plus est le pseudo.
Non seulement, il va falloir te trimbaler un varchar plutôt qu'un int, comme ça a déjà été dit, mais en plus, une donnée visible par l'utilisateur est soumise à modification.

Imagine un de tes membres qui te demande de modifier son pseudo (c'est pas si idiot que ça ;) ) ... tu va être obligé de modifier toutes tes tables où le pseudo est une clé étrangère. :?

par Invité » 01 nov. 2007, 13:17

Je posais cette question dans le cadre du développement d'une appli qui gère un ensemble d'utilisateur qui n'ont pas la possibilité d'avoir le même pseudo (identifiant unique, alphanumérique sans caractères spéciaux, sur 20 caractères maximum, 3 minimum). Je voulais faire de ce pseudo une clé dans ma base pour mes jointures. Mais selon vos réponses il est apparemment préférable d'attribuer un matricule à chaque enregistrements.

par Sékiltoyai » 01 nov. 2007, 01:27

Si c'est par rapport à entier, varchar fera souvent des clés plus petites donc plus faciles à parcourrir.
Euh, un INT prend seulement 4 octets, je doute qu'aucun VARCHAR puisse faire plus court que ça, c'est pourquoi les INT sont plus rapides pour à peu près toutes les opérations. Ou alors on ne parle pas de la même chose ? Peut-être avec des données plutôt redondantes grâce à la compression de préfixe le stockage pourrait être moindre, mais pour l'exécution je préfèrerais un INT.
oui, je voulais dire le contraire, ca m'étonne de ne pas m'être relu…

par Hubert Roksor » 01 nov. 2007, 01:23

Si c'est par rapport à entier, varchar fera souvent des clés plus petites donc plus faciles à parcourrir.
Euh, un INT prend seulement 4 octets, je doute qu'aucun VARCHAR puisse faire plus court que ça, c'est pourquoi les INT sont plus rapides pour à peu près toutes les opérations. Ou alors on ne parle pas de la même chose ? Peut-être avec des données plutôt redondantes grâce à la compression de préfixe le stockage pourrait être moindre, mais pour l'exécution je préfèrerais un INT.

Concernant les indices partiels, s'il s'agit d'une clé primaire ça veut dire que les n premiers caractères ne pourront être identiques, e.g. si l'index porte sur les 4 premiers caractères on ne pourra pas avoir "abcd1" et "abcd2".
Cela à t'il une incidence sur l'indexation du champ définit comme tel ? La rapidité d'accès aux données dans le cas de clés étrangères (jointures) ?
Cela a une très grande incidence et dépend étroitement du type de données/requêtes, mais comment répondre à ce genre de question très vague avec si peu d'informations. Pire encore, pourquoi répondre à une question si vague ? Si tu ne prends pas la peine d'expliquer ton problème je doute que ça motive quiconque de s'en occuper à ta place.

par Invité » 31 oct. 2007, 17:24

Merci bien pour cette info

par Sékiltoyai » 31 oct. 2007, 16:54

La doc mysql sur les index.

par Sékiltoyai » 31 oct. 2007, 16:50

Tu voudrais savoir de varchar par rapport à quel autre type ?
Si c'est par rapport à entier, varchar fera souvent des clés plus petites donc plus faciles à parcourrir. Si c'est par rapport au type char, je ne pense pas que la différence soit conséquente, il faut juste préciser lors de la création de l'index s'il y a une partie de l'index particulièrement intéressante à prendre en compte (plus représentative).

Varchar primary key

par Invité » 31 oct. 2007, 16:43

Bonjour @tous !

Je souhaitais simplement poser une question sur les primary key de type varchar ? Cela à t'il une incidence sur l'indexation du champ définit comme tel ? La rapidité d'accès aux données dans le cas de clés étrangères (jointures) ?

Merci d'avances pour vos réponses