Question

Quels sont les avantages et les inconvénients de l’utilisation d’alias de table en SQL ?Personnellement, j'essaie de les éviter, car je pense qu'ils rendent le code moins lisible (surtout lors de la lecture de grandes instructions Where/and), mais je serais intéressé d'entendre des contre-points à cela.Quand est-il généralement judicieux d’utiliser des alias de table et avez-vous des formats préférés ?

Était-ce utile?

La solution

Les alias de table sont un mal nécessaire lorsqu’il s’agit de schémas hautement normalisés.Par exemple, et je ne suis pas l'architecte de cette base de données, alors soyez indulgents avec moi, cela peut prendre 7 jointures pour obtenir un enregistrement propre et complet comprenant le nom, l'adresse, le numéro de téléphone et l'affiliation à l'entreprise d'une personne.

Plutôt que les alias à caractère unique quelque peu standard, j'ai tendance à privilégier les alias de mots courts, de sorte que le SQL de l'exemple ci-dessus finit par ressembler à :

select person.FirstName
      ,person.LastName
      ,addr.StreetAddress
      ,addr.City
      ,addr.State
      ,addr.Zip
      ,phone.PhoneNumber
      ,company.CompanyName
from tblPeople person
left outer join tblAffiliations affl on affl.personID = person.personID
left outer join tblCompany company on company.companyID = affl.companyID

...etc.

Autres conseils

Eh bien, il y a des cas où doit utilisez-les, comme lorsque vous devez vous joindre à la même table deux fois en une seule requête.

Cela dépend également si vous avez des noms de colonnes uniques dans les tables.Dans notre base de données existante, nous avons des préfixes à 3 lettres pour toutes les colonnes, provenant d'une forme abrégée de la table, simplement parce qu'un ancien système de base de données avec lequel nous étions autrefois compatibles ne prenait pas très bien en charge les alias de table.

Si vous avez des noms de colonnes qui apparaissent dans plusieurs tables, il est indispensable de spécifier le nom de la table dans la référence de la colonne, et donc un alias de table permettra une syntaxe plus courte.

Suis-je la seule personne ici à les détester vraiment ?

En général, je ne les utilise pas sauf si j'y suis obligé.Je déteste vraiment devoir lire quelque chose comme

select a.id, a.region, a.firstname, a.blah, b.yadda, b.huminahumina, c.crap
from table toys as a
inner join prices as b on a.blah = b.yadda
inner join customers as c on c.crap = something else
etc

Quand je lis SQL, j'aime savoir exactement ce que je sélectionne lorsque je le lis ;les alias me confondent davantage parce que je dois parcourir des lignes de colonnes avant d'arriver au nom de la table, qui représente généralement des informations sur les données que l'alias ne représente pas.Ce n'est peut-être pas grave si vous créez les alias, mais je lis souvent des questions sur StackOverflow avec du code qui semble utiliser des alias sans raison valable.(De plus, parfois, quelqu'un crée un alias dans une déclaration et ne l'utilise tout simplement pas.Pourquoi?)

Je pense que les alias de table sont tellement utilisés parce que beaucoup de gens sont réticents à taper.Je ne pense cependant pas que ce soit une bonne excuse.Cette excuse est la raison pour laquelle nous nous retrouvons avec des noms de variables épouvantables, des acronymes de fonctions épouvantables, un mauvais code... Je prendrais le temps de taper le nom complet.Cependant, je suis un dactylographe rapide, alors peut-être que cela a quelque chose à voir avec ça.(Peut-être que dans le futur, quand j'aurai le canal carpien, je reconsidérerai mon opinion sur les pseudonymes.:P ) Je déteste particulièrement parcourir les alias de table dans le code PHP, où je pense qu'il n'y a absolument aucune raison de devoir le faire - vous ne devez le saisir qu'une seule fois !

J'utilise toujours des qualificatifs de colonne dans mes déclarations, mais je ne suis pas opposé à en taper beaucoup, je serai donc heureux de taper le nom complet plusieurs fois.(Certes, j'abuse de la complétion des onglets de MySQL.) À moins que ce ne soit une situation où je dois utiliser un alias (comme certains décrits dans d'autres réponses), je trouve la couche supplémentaire d'abstraction encombrante et inutile.

Modifier: (Plus d'un an plus tard) J'ai affaire à des procédures stockées qui utilisent des alias (je ne les ai pas écrites et je suis nouveau dans ce projet), et elles sont plutôt douloureuses.Je me rends compte que la raison pour laquelle je n'aime pas les alias est la façon dont ils sont définis.Vous savez qu'il est généralement recommandé de déclarer des variables en haut de votre champ d'application ?(Et généralement en début de ligne ?) Les alias en SQL ne suivent pas cette convention, ce qui me fait grincer des dents.Ainsi, je dois rechercher dans tout le code un seul alias pour savoir où il se trouve (et ce qui est frustrant, c'est que je dois lire la logique avant de trouver la déclaration d'alias).Sans cela, honnêtement, je préférerais peut-être mieux le système.

Si jamais j'écris une procédure stockée que quelqu'un d'autre devra gérer, je mets mes définitions d'alias dans un bloc de commentaires au début du fichier, à titre de référence.Honnêtement, je ne comprends pas comment vous ne devenez pas fous sans cela.

L'optimiseur de requêtes de Microsoft SQL bénéficie de l'utilisation de noms complets ou d'alias.

Personnellement, je préfère les alias, et à moins d'avoir beaucoup de tableaux, ils ont tendance à être constitués d'une seule lettre.

--seems pretty readable to me ;-)
select a.Text
from Question q
    inner join Answer a
        on a.QuestionId = q.QuestionId

Il existe également une limite pratique quant à la durée d'exécution d'une chaîne SQL - les alias permettent d'éviter cette limite plus facilement.

Bien

Comme cela a été mentionné à plusieurs reprises auparavant, c'est une bonne pratique de préfixer tous noms de colonnes pour voir facilement quelle colonne appartient à quelle table - et les alias sont plus courts que les noms de tables complets afin que la requête soit plus facile à lire et donc à comprendre.Si vous utilisez un bon schéma d'alias bien sûr.

Et si vous créez ou lisez le code d'une application qui utilise des noms de table stockés en externe ou générés dynamiquement, alors sans alias, il est vraiment difficile de dire au premier coup d'œil ce que représentent tous ces "%s" ou autres espaces réservés.Il ne s'agit pas d'un cas extrême, par exemple de nombreuses applications Web permettent de personnaliser le préfixe du nom de la table au moment de l'installation.

Si j'écris une requête moi-même (en la tapant dans l'éditeur et sans utiliser de concepteur), j'utilise toujours des alias pour le nom de la table afin de ne devoir saisir le nom complet de la table qu'une seule fois.

Je déteste vraiment lire les requêtes générées par un concepteur avec le nom complet de la table comme préfixe à chaque nom de colonne.

Je suppose que la seule chose qui parle vraiment contre eux est une abstraction excessive.Si vous avez une bonne idée de ce à quoi fait référence l'alias (un bon nom aide ;"a", "b", "c" peuvent être assez problématiques, surtout lorsque vous lisez la déclaration des mois ou des années plus tard), je ne vois rien de mal à créer un alias.

Comme d'autres l'ont dit, rejoint exiger Si vous utilisez la même table (ou vue) plusieurs fois, mais même en dehors de cette situation, un alias peut servir à clarifier l'objectif d'une source de données dans un contexte particulier.Au nom de l'alias, essayez de répondre pourquoi vous accédez à des données particulières, non quoi les données sont.

J'ADORE les pseudos !!!!J'ai fait quelques tests en les utilisant vs.pas et j'ai constaté des gains de traitement.Je suppose que les gains de traitement seraient plus élevés lorsque vous traitez des ensembles de données plus volumineux et des requêtes imbriquées complexes que sans.Si je peux tester cela, je vous le ferai savoir.

Vous en avez besoin si vous souhaitez joindre une table à elle-même ou si vous utilisez à nouveau la colonne dans une sous-requête...

Les alias sont parfaits si l'on considère que mon organisation a des noms de table tels que :SchemaName.DataPointName_SubPoint_Sub-SubPoint_Sub-Sub-SubPoint...Mon équipe utilise un ensemble d'abréviations assez standard, ce qui minimise les conjectures.Nous dirons que ProgramInformationDataPoint sera raccourci en pidp et les soumissions en simplement sub.

La bonne nouvelle est qu'une fois que vous avez commencé de cette manière et que les gens sont d'accord, cela rend ces fichiers HAYUGE un peu plus petits et plus faciles à gérer.Au moins pour moi, moins de caractères pour transmettre la même information semble être un peu plus facile pour mon cerveau.

J'aime les noms de table longs et explicites (il n'est pas rare qu'ils contiennent plus de 100 caractères) car j'utilise de nombreuses tables et si les noms ne sont pas explicites, je pourrais ne pas savoir ce que chaque table stocke.

Ainsi, lorsque j'écris une requête, j'ai tendance à utiliser des alias plus courts qui ont du sens dans le cadre de la requête et qui rendent le code beaucoup plus lisible.

J'utilise toujours des alias dans mes requêtes et cela fait partie du guide de code de mon entreprise.Tout d'abord, vous avez besoin d'alias ou de noms de table lorsqu'il y a des colonnes avec des noms identiques dans les tables jointes.À mon avis les alias améliorent la lisibilité dans les requêtes complexes et me permettent de voir rapidement l'emplacement de chaque colonne.Nous utilisons même des alias avec les requêtes à table unique, car l'expérience a montré que les requêtes à table unique ne restent pas longtemps sur une seule table.

À mon humble avis, cela n'a pas vraiment d'importance avec les noms de table courts qui ont du sens, j'ai parfois travaillé sur des bases de données où le nom de la table pourrait être quelque chose comme VWRECOFLY ou une autre chaîne aléatoire (dictée par la politique de l'entreprise) qui représente réellement les utilisateurs, donc dans dans ce cas, je trouve que les alias aident vraiment à rendre le code BEAUCOUP plus lisible.(users.username a beaucoup plus de sens que VWRECOFLY.username)

J'utilise toujours des alias, car pour obtenir des performances appropriées sur MSSQL, vous devez toujours préfixer le schéma.Vous verrez donc beaucoup de

Sélectionnez Person.Name à partir
dbo.Person en tant que personne

J'utilise toujours des alias lors de l'écriture de requêtes.Généralement, j'essaie d'abréger le nom de la table en 1 ou 2 lettres représentatives.Ainsi, les utilisateurs deviennent u et débiteur_transactions devient dt etc...

Cela évite la saisie et a toujours un sens.

Les noms plus courts le rendent également plus lisible pour moi.

Si vous n'utilisez pas d'alias, c'est un bug dans votre code qui ne demande qu'à se produire.

SELECT Description -- actually in a
 FROM
 table_a a,
 table_b b
 WHERE
 a.ID = b.ID

Que se passe-t-il lorsque vous faites une petite chose comme ajouter une colonne appelée Description à Table_B.C'est vrai, vous obtiendrez une erreur.L’ajout d’une colonne ne nécessite rien de casser.Je ne vois jamais écrire du bon code, sans bug, comme un mal nécessaire.

Les alias sont requis lors de la jointure de tables avec des colonnes portant des noms identiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top