begin process at 2010 07 29 22:33:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

Autre

 > 

Divers

 > 

Clés Primaire en VARCHAR


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Clés Primaire en VARCHAR

vendredi 16 juin 2006 à 14:24:34 | Clés Primaire en VARCHAR

ffert

Bonjour,

Je souhaite créer des clés primaires en VARCHAR(30), mais j'ai peur que ce soit plus lent qu'avec un INTEGER ou un INTEGER Autoincrémental.

surtout pour les références vers d'autres tables, les recherches ou les liens...

Quelqu'un pourrait t'il me dire de quoi il en retourne.

J'explique la raison : je gère une numéro incrémental unique pour ma base de donnée. mais je ne souhaite pas être limité par une integer à 11 digits par exemple, et également permettre d'ajouter des préfixes sur les valeurs de ces champs pour identifier par exemple, le lieux ou son saisie les données.
(utile pour la synchro multisite)...

Si vous voyez un inconvénient, ou des problèmes liésx à cela, ou bien d'autres solutions, merci de me tenir informé, avant que ma base de donnée ne soit terminée !!!.... ça m'aiderai beaucoup...

MERCI d'avance.

(Ps : Je travaille en MySQL pour modéliser la maquette, mais le final pourra être migré sur oracle ou Sqlserver ou postgrésql....)

Fabien FERT [:)] www.sigmadia.fr.fm
samedi 17 juin 2006 à 03:46:47 | Re : Clés Primaire en VARCHAR

crilun



crilun
salut,
un varchar sera toujours plus long sur une requete select qu'un integer,
sachant que tu veut identifier les lieux ou sont saisies les données je pense qu'il serait plus judicieux de mettre 2 clefs à ta table avec un colonne de plus, une contenant un numero et l'autre le lieu,meme si pour cela tu doit gerer l'autoincrement toi meme,
car d'apres ce que tu dis si tu ne veut pas etre limité à 11 digits c'est que ta table va contenir un nombre important d'enregistrements,
par consequent l'insert etant plus rare que le select il vaut mieux privilegier le select,
donc je pense que l'ajout d'une colonne en restant sur des champs integer sera plus judicieux,
j'ai eu moi meme à faire une requete sur une table dont la clef etait un varchar et ou le nombre d'enregistrements etaient nombreux et malgré la présence de blade relativement puissant cela prenait quand meme du temps depassant parfois le time out.
donc en résumé préfere la séparation de champs en restant sur des integer.

ci@o++
dimanche 18 juin 2006 à 11:20:17 | Re : Clés Primaire en VARCHAR

ffert

En fait, je veux gérer un identifiant unique pour l'ensemble de mes tables et de mes bases de données.
J'ai 4 bases de données de natures différentes (MySQL, FoxPRo, Access, MSSQL). La plus importante est FoxPro avec plusieurs de ces  tables pouvant avoir entre 400 000 à 500 000 nouveaux enrregistrement chaque années.
Si je prend un integer 11 et un préfix de 3 (999 lieu pour avoir plus de marge que 2 pour 99)... il ne me reste que 8 digits pour numéroté les enregistrements des 4 databases, ça me semble un peu juste dans la durée... (autonomie de 2 à 3 ans je pense).

Mais la structure de mon système impose un ID unique pour l'ensemble des 4 bases de données toutes tables confondues !!!!!!!
(Il se peut que dans un avenir proche je connecte de l'ORACLE)...

L'idée de prendre 2 champs n'est pas mauvaise, mais le problème c'est que d'autres utilisateurs pourront rajouter d'autres tables ou bien, pourront se connecter sur des tables existantes... ça obligerait alors à changer la structure de leur code en profondeur car, les ID ne serait plus sur un mais 2 champs.

Et si je prenais des CHAR(20) au lieu de VARCHAR(20) ? ça ne serait pas un peu plus rapide ?
Ou bien un autre type ?
Puis-je créer mes propres type (je crois que c'est faisable sur MySQL ? non mais je ne sais pas comment faire.)

Si vraiment je peux pas faire autrement je prendrais deux champs, mais ça ne m'arrange pas. Existe t'il des solutions pour permettre à des bases de données d'accepter des INTEGER de 20 digit  par exemple, en créant son propre type d'integer ?? (je ne pense pas car ça doit faire partie du code compilé du serveur de base de donnée.)

Merci d'avance pour vos réponses.

Fabien FERT [:)] www.sigmadia.fr.fm
dimanche 18 juin 2006 à 11:53:12 | Re : Clés Primaire en VARCHAR

crilun



crilun
pourrait tu expliquer dans quel mesure les utilisateurs accèdent à tel ou tel type de base?
par ce qe j'ai bien un truc à te proposer mais je ne suis pas sur que ca marche dans ton cas,
c'est de mettre toujours 2 champs integer mais cette fois tu en rajoutes un 3ieme que tu rempli avec un trigger et qui est la concatenation des 2 premiers et qui lui est un varchar, ce qui te permet d'avoir les 2 premiers champs si tu veut obtenir des requetes plus rapide, ainsi que le 3ieme champ unique qui te permet de conserver ta structure.

pour ce qui est de la difference entre le char et la varchar je ne sais pas si l'un est plu rapide ou non que l'autre,

pour ce qui est de la creation des types que veut tu dire par la? tu parles peut etre de contrainte qui impose à un champ de repondre à un expression reguliere? masi ce n'est pas une optimisation car ca oblige le system a tester l'expression systematiquement et l'expression reste toutjours un varchar quand meme.
lundi 19 juin 2006 à 01:34:17 | Re : Clés Primaire en VARCHAR

Malkuth

Membre Club
Réponse acceptée !
SALUT,
 
et si tu prenait un entier long 64 bit (bigint sur sqlserver)
2^64 =18446744073709551616

18446744073709551616 id Différent ca fais déjà beaucoup mais tu ne dis pas clairement de combien d'ID tu as besoin par an donc quand a savoir l'autonomie que ca te donnerai ...
lundi 19 juin 2006 à 10:13:07 | Re : Clés Primaire en VARCHAR

ffert

L'idée du BigInt me semble une trés trés bonne solution qui conviendrai à mes besoins je pense.
Mais qu'en est-il de l'utilisation des BIGINT en tant que clés primaire ?
à mon avis ça sera toujours plus rapide que les varchar. mais y a-t'il des contraintes particulières à utiliser des BigInt en tant que clé primaire ? (vue que nos serveurs ne sont  pas encore 64 bit... et que j'ai lu quelque part que faire traiter un objet 64 bits par un processeur 32 bit prenais plus de temps que le double (2 x 32)... Mais réflexion faite ça sera tout de même plus rapide qu'un varchar je pense...)

j'attend vos ultimes conseils. MERCI à tous d'avoir répondu. ça m'aide bien.
Merci

Fabien FERT [:)] www.sigmadia.fr.fm
lundi 19 juin 2006 à 10:42:43 | Re : Clés Primaire en VARCHAR

Malkuth

Membre Club
Le probléme du varchar c'est que tu vas utiliser les chiffres et (peut être les lettres) donc tu vas codé tes élément sur 30*8bits(240 bits) (et je parle pas d'un nvarchar) alors que tous ces bits ne seront pas des bit utiles, il sera toujours plus rapide de faire une recherche sur un element de 64bit que 240.

Enfin se sera plus long qu'un entier certe mais l'entier ne répondant pas a tes attente il faut bien accepter le sacrifice. Et de plus tous les clients n'auront que des int a changer par des long ca devrait pas être trop problèmatique ;)
lundi 19 juin 2006 à 15:26:41 | Re : Clés Primaire en VARCHAR

ffert

MERCI BEAUCOUP.

Je vais tester la solution avec les BIGINT.

Vue que les ID sont unique sur l'ensemble de chaque base de donnée, les requêtes multitables (avec jointure) devrais être un petit peu plus rapide. Il me semble.

En tout cas merci à tous. pour les tuyaux...

Fabien FERT [:)] www.sigmadia.fr.fm


Cette discussion est classée dans : souhaite, integer, primaire, clés, varchar


Répondre à ce message

Sujets en rapport avec ce message

requete MySQL [ par xactise ] Bonjour et d'avance merci a ceux qui lisent mon post.j'ai un petit souci avec une requete SQL.j'explique ce que je souhaite faire : admetons qu'on est Sélectionner le max d'une VarChar [ par PatBlarg ] Bonjour, j'ai un gros problème de requête SQL. Plutôt 2 même...J'ai un logiciel qui écrit des donnée numérique dans une base de donnée SQL.Dépendant d Probleme clés etrangere Oracle [ par Cormega92 ] Bonjour, Je souhaiterais savoir comment définir des clés étrangères sur des tables déja créées (le nom du champ de la future clé étrangère est déjà cr probleme pour creer le contenu de ma base de donne [ par laloire33150 ] voici mon soucis, je travail avec phpmyadmin et je rentre ma requete dans une fenetre sql et voici l'erreur qu'elle me sort : requête SQL: -- ----- je ne comprend pas ou est le probleme [ par laloire33150 ] Erreur requête SQL: CREATE TABLE annu( id int NOT NULL AUTO_INCREMENT , date varchar( 20 ) NOT NULL , auteur varchar( 50 ) NOT NULL , ns varchar( 5 Contrainte bizarre [ par arpala ] Bonjour à tous,Alors voila, pour m'entrainer je m'amuse à créer des tables dans une base de donnée.Mais la je tombe sur un os.Primo mon fichier texte Correction de Trigger [ par 4rocky4 ] Bonjour tout le monde,Je voudrai créer des triggers qui permettent de mettre à jour des tables sous Oracle.Par exemple, si on modifie la clef primaire problème de requête [ par suethi75 ] Bonjour tout le monde,Je n'arrive pas à faire une requête. J'ai 3 tables, une s'appelle "produit" avec comme clef primaire "numBijoux", j'ai une autre besoin d'aide pour generer un cle primaire [ par zied86 ] bonjour;j'ai un table contenu (cle,id client,nom client,....)je veux que le cle se génère automatiquement de la forme suivante n° puis id puis anneec'


Nos sponsors


Sondage...

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales