Est-il possible d'utiliser les valeurs de caractères pour les clés primaires?
Est-il un gain de performance ou de meilleure pratique quand il s'agit de l'aide unique, IDENTIFIANT numérique des champs dans une table de base de données par rapport à l'utilisation des personnages?
Par exemple, si j'avais deux tables:
athlète
id ... 17, nom ... Rickey Henderson, teamid ... 28
équipe
teamid ... 28, teamname ... Oakland
L'athlète de la table, avec des milliers de joueurs, serait plus facile à lire si l' teamid était, disons, "CHÊNE" ou "SD" au lieu de "28" ou "31". Prenons pour acquis la teamid valeurs restent propres et cohérente dans le formulaire de caractère.
Je sais que vous POUVEZ utiliser des caractères, mais est-ce une mauvaise idée pour l'indexation, filtrage, etc pour n'importe quelle raison?
S'il vous plaît ignorer la normalisation argument que ces tableaux sont plus complexes que l'exemple.
Il est intéressant de noter que vous parlez des champs de caractère, pas MSSQL du "texte" type de, ce qui je crois est non-indexable.
OriginalL'auteur Randy Burgess | 2009-01-15
Vous devez vous connecter pour publier un commentaire.
Je préfère rester loin de l'aide de texte comme votre clé - ce qui se passe dans le futur, quand vous voulez changer l'équipe d'ID pour la partie de l'équipe? Vous auriez à la cascade de changement de clé de tous par le biais de vos données, lorsque c'est la chose exacte d'une clé primaire peut l'éviter. Aussi, bien que je n'ai pas de preuve empirique, je pense que l'INT clé serait nettement plus rapide que le texte.
Peut-être vous pouvez créer des vues de vos données qui le rendent plus facile à consommer, tout en continuant d'utiliser un numérique de la clé primaire.
OriginalL'auteur SqlRyan
- Je trouver des clés primaires qui sont vides de sens numéros de causer moins de maux de tête dans le long terme.
+1 pour le sens des clés primaires!
OriginalL'auteur brian
Texte est très bien, pour toutes les raisons que vous avez mentionnées.
Si la chaîne est à seulement quelques caractères, puis elle sera presque aussi petit un un entier de toute façon. Le plus grand inconvénient potentiel à l'aide de cordes est la taille: base de données de performance est liée à la façon dont de nombreux accès disque sont nécessaires. Faire l'index de deux fois plus grand, par exemple, pourrait créer de disque-cache de pression, et d'augmenter le nombre de recherches disque.
OriginalL'auteur Doug Currie
Je vais juste rouler avec votre exemple. Doug a raison quand il dit que le texte est très bien. Même pour un de taille moyenne (~50gig) de la base de données ayant un 3 la lettre de code est une clé primaire ne tuent pas la base de données. Si elle facilite le développement, réduit rejoint sur l'autre table et c'est un domaine que les utilisateurs seraient en tapant...je dis aller pour elle. Ne pas le faire si c'est juste une abréviation que vous afficher sur une page ou parce qu'il rend les athlètes de la table de regarder assez. Je pense que la clé est la question "Est-ce un code que l'utilisateur va taper dans et pas juste choisir dans une liste?"
Laissez-moi vous donner un exemple de quand j'ai utilisé une colonne de texte pour une clé. J'ai été faire un logiciel de traitement des réclamations médicales. Après que la demande a obtenu tous numérisés de l'homme eu à examiner la demande et ensuite choisissez un code qui désigne ce genre de revendication qu'il était. Il y avait des centaines de codes...et ces gars avaient tous appris ou lit d'enfant draps pour les aider. Ils avaient été à l'aide de ces mêmes codes pendant des années. À l'aide d'un 3 touche de la lettre laissez-les juste de voler à travers le traitement des réclamations.
OriginalL'auteur Al W
Je recommande d'utiliser des entiers ou bigints pour les clés primaires. Les avantages incluent:
Vous pouvez toujours avoir une autre colonne de tenir team_code ou quelque chose pour "CHÊNE" et "SD". Aussi
OriginalL'auteur Brian Fisher
La réponse standard est d'utiliser des numéros, car ils sont plus rapides à l'index; pas besoin de calculer une valeur de hachage ou quoi que ce soit.
Si vous utilisez une valeur raisonnable comme clé primaire, vous devez mettre à jour tous les travers que vous êtes à la base de données si le nom de l'équipe modifications.
Pour satisfaire les besoins, mais encore de rendre la base de données directement lisible,
utiliser un numéro de champ comme clé primaire
immédiatement créer une vue Athlete_And_Team qui rejoint l'Athlète et de l'Équipe de tables
Ensuite, vous pouvez utiliser la vue lorsque vous allez à travers les données à la main.
OriginalL'auteur
Parlez-vous de votre clé primaire ou votre index cluster? Votre index cluster doit être la colonne que vous souhaitez utiliser pour identifier de manière unique cette ligne en plus souvent. Il définit également la logique de commande de lignes de votre table. L'index cluster sera presque toujours votre clé primaire, mais il y a des circonstances où elles peuvent être différentes.
OriginalL'auteur Charles Graham