Lembro-me de aprender a fazer isso em um curso de DBMS para alunos do Master of Information Services. Para economizar um pouco de digitação, você pode digitar:
SELECT t1.id, t2.stuff
FROM
someTable t1
INNER JOIN otherTable t2
ON t1.id=t2.id
;
Mas... Por que isso é aceitável em stored procedures e tal? Parece que tudo o que faz é prejudicar a legibilidade da declaração, economizando uma quantidade extremamente pequena de tempo. Existe alguma razão funcional ou lógica para fazer isso? Parece adicionar ambiguidade em vez de removê-la; a única razão aceitável que posso ver para usar esse formato é se você estiver adicionando um alias semanticamente significativo - por exemplo, FROM someTable idsTable
- quando o nome da tabela não for descritivo o suficiente.
O aliasing de tabela é uma prática ruim ou é apenas um uso indevido de um sistema útil?
O aliasing de tabela é uma prática comum e útil.
O extrato de relatório a seguir ilustra bem todos os pontos acima:
Acho que o uso de aliases ajuda na legibilidade de uma consulta se os nomes das tabelas forem longos ou tão semelhantes entre si que alguém que os leia rapidamente possa confundi-los. Você acha que isso...
é mais legível do que isso?
Dependendo do que você usa como aliases de tabela, pode tornar a consulta muito mais simples para uma pessoa ler e entender.
O aliasing de tabela (por causa de nomes de tabela mais curtos) não é uma prática ruim.
Eu normalmente uso quando os nomes das tabelas são longos e só uso o alias que faz sentido:
Se você deseja melhorar a legibilidade, pode usar a
AS
palavra-chave:Mas, conforme você se acostuma com a sintaxe, ela não é necessária.
Esta é uma pergunta sobre "prática ruim". As respostas parecem ser sobre "Salvar pressionamentos de tecla".
Pessoalmente, minha velocidade de codificação é limitada pela velocidade do meu pensamento, não pela velocidade da minha digitação. Eu acho o código com muitos aliases de tabela muito mais difícil de ler do que o código que usa os próprios nomes de tabela. Os aliases de tabela adicionam outro nível de indireção.
No entanto, a maioria dos programadores usa aliases de tabela (embora eu não). Alguns "ambientes de desenvolvimento SQL" tornam isso muito fácil de fazer, e alguns professores ensinam aliases de tabelas automaticamente, especialmente como parte do aprendizado da sintaxe "Join".
Usar aliases de tabela não é uma prática ruim, mas às vezes tenho que passar pelo código e substituir os aliases pelos nomes originais da tabela para entender o que está acontecendo.
Você pode usar isso para aumentar significativamente a legibilidade de suas consultas. Em vez de usar um alias curto, use seu alias para descrever os dados aos quais você está unindo, por exemplo
Embora o uso de aliases extremamente curtos (como
a
out1
) possa dificultar a leitura de uma consulta, pois você precisa encontrar o alias para pesquisar o que o alias significa, um alias bem nomeado geralmente pode tornar uma consulta mais legível do que apenas usar a tabela nomes.Meu primeiro trabalho que exigia interação regular com SQL envolvia a migração de dezenas de milhares de linhas de consultas herdadas após dezenas de colunas e tabelas terem sido movidas e renomeadas. Este processo levou anos . Esse processo poderia ter levado no máximo alguns dias se ninguém usasse aliases de tabela (ou pelo menos os evitasse quando fossem desnecessários).
Como?
Considere a seguinte consulta.
Não pense muito sobre isso. Eu o inventei e o que ele faz não é importante. Imagine que você foi informado
transactions.first_name
etransactions.last_name
se mudou paratransactions_table.firstname
e,transactions_table.lastname
respectivamente. Enquanto isso,transactions_table
é indexado emtransaction_datetime_id
vez detransactionid
. Claro, você poderia gastar alguns minutos retrocedendo nessa nova consulta e trocandotransactions
portransactions_table
, a junção envolvendoc.transactionid
porc.transaction_datetime_id
, e finalmente porfirstname
elastname
porfirst_name
elast_name
respectivamente.Agora considere a seguinte consulta.
Agora imagine fazer as mesmas mudanças. Deve ficar imediatamente claro que você pode apenas executar algumas substituições baseadas em expressões regulares cegas na consulta.
transactions.transactionsid
=>transactions_table.transaction_datetime_id
transactions.first_name
=>transactions_table.firstname
transactions.last_name
=>transactions_table.lastname
(?<![A-Za-z0-9.])transactions(?![A-Za-z0-9])
=>transactions_table
Não sou a primeira pessoa a encontrar esse problema e não serei a última (o grupo que conheci em uma empresa da qual participei posteriormente passou pelo mesmo processo meticuloso).
Se você quiser me culpar por ser novo em SQL pesado na época, observe que meu predecessor era um veterano de SQL em tempo integral por 4 anos e era a mesma pessoa que escreveu essas consultas que precisavam ser atualizadas. Ele já estava há um ano no processo de migração quando saiu e eu assumi. Recursos enormes são desperdiçados por causa de aliases de tabela desnecessários. Seriamente.