Accueil > Forum > > > > Clés Primaire en VARCHAR
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
|
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
|
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'
Livres en rapport
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|