Gostaria de receber uma opinião de especialistas sobre as melhores práticas quando se trata de nomeação de colunas .
O pano de fundo é que, de acordo com a Wikipedia , a seguinte sintaxe,
SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);
é mais eficiente que
SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);
No entanto, a JOIN ... USING
sintaxe funciona apenas de todas as colunas da chave primária com nomes exclusivos globalmente . Assim, eu me pergunto se isso é considerado a coisa certa a ser feita.
Pessoalmente, eu sempre costumava criar tabelas com coluna PK id
e coluna de chave estrangeira othertable_id
. Mas dessa forma não é possível usar USING
ou NATURAL JOIN
.
Quaisquer links para estilos de design ou guias de práticas recomendadas para design de tabelas também serão apreciados!
database-design
join
naming-convention
Kerrek SB
fonte
fonte
Respostas:
Isso já foi solicitado anteriormente no SO.
Onde você tiver nomes comuns e muito ambíguos, prefixe o nome da tabela. Ou seja, qualquer coisa que você precise alias em quase todas as consultas.
Então, para uma tabela de funcionários, eu teria
E a Wikipedia realmente diz:
Essa é uma coluna a menos. Você nunca usaria de
SELECT *
qualquer maneira, então o ponto é discutível ...fonte
O livro a seguir fala sobre o uso do ID como antipadrão do SQL e concordo com o autor. http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1
Esse é um problema específico quando você está gerando relatórios complexos e precisa de mais de um ID, pois precisa usar o alias. O uso do ID do nome da tabela também facilita a identificação do FK correto para ingressar (pois eles têm o mesmo nome) e torna menos provável a ocorrência de erros ao ingressar na coisa errada.
Dito isso, muitos bancos de dados não suportam a sintaxe USING, o que torna o problema que você trouxe à tona não um problema para esses bancos de dados.Nem muitos bancos de dados suportam o uso de uma junção natural que eu não recomendaria o uso de qualquer forma, pois eles podem mudar. se as estruturas da tabela mudarem. Então, suponha que você adicione um campo chamado data modificada às duas tabelas, não desejaria ingressar nisso, mas a associação natural o faria.
fonte
É melhor fornecer explicitamente o nome da tabela e o nome da coluna como Employees.EmployeeID com expressões em que existe uma associação
fonte