Gostaria da opinião de alguns especialistas sobre as práticas recomendadas quando se trata de nomenclatura de coluna .
O pano de fundo é que , de acordo com a Wikipedia , a seguinte sintaxe,
SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);
é mais eficiente do que
SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);
No entanto, a JOIN ... USING
sintaxe só funciona se todas as colunas de chave primária tiverem nomes globalmente exclusivos . Assim, eu me pergunto se isso é considerado a coisa certa a fazer.
Pessoalmente, sempre criei 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!
Isso já foi perguntado antes no SO.
Onde você tiver nomes comuns e muito ambíguos, prefixe com o nome da tabela. Ou seja, qualquer coisa que você possa ter como alias em quase todas as consultas.
Então, para uma tabela de funcionários, eu teria
E a Wikipedia realmente diz:
É uma coluna a menos. Você nunca usaria
SELECT *
de qualquer maneira, então o ponto é discutível ...O livro a seguir fala sobre o uso de ID como um antipadrão SQL e concordo com o autor que é. 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á fazendo relatórios complexos e precisa de mais de um ID, pois precisa criar um alias. O uso do ID tablename também facilita a identificação do FK correto para ingressar (já que eles têm o mesmo nome) e torna menos provável que erros de associação à coisa errada.
Dito isso, muitos bancos de dados não suportam a sintaxe USING, o que faz com que o problema que você mencionou não seja um problema para esses bancos de dados. se as estruturas da tabela mudarem. Portanto, suponha que você adicione um campo chamadomodifieddate a ambas as tabelas, você não gostaria de se juntar a isso, mas a junção natural faria isso.
É melhor fornecer explicitamente o nome da tabela e o nome da coluna como Employees.EmployeeID com expressões onde existe uma junção