J'aimerais avoir un avis d'expert sur les meilleures pratiques en matière de dénomination des colonnes .
L'arrière-plan est que, selon Wikipedia , la syntaxe suivante,
SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);
est plus efficace que
SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);
Cependant, la JOIN ... USING
syntaxe ne fonctionne que pour toutes les colonnes de clé primaire qui ont des noms globalement uniques . Je me demande donc si cela est considéré comme la bonne chose à faire.
Personnellement, je créais toujours des tables avec une colonne PK id
et une colonne de clé étrangère othertable_id
. Mais de cette façon, il n'est pas possible d'utiliser USING
ou NATURAL JOIN
.
Tout lien vers des styles de conception ou des guides de bonnes pratiques pour la conception de tables serait également apprécié!
database-design
join
naming-convention
Kerrek SB
la source
la source
Réponses:
Cela a déjà été demandé sur SO.
Lorsque vous avez des noms communs et très ambigus, puis préfixez le nom de la table. Autrement dit, tout ce que vous êtes susceptible d'avoir à alias dans presque toutes les requêtes.
Donc, pour une table des employés, j'aurais
Et Wikipedia dit en fait:
C'est une colonne de moins. Vous n'utiliseriez jamais de
SELECT *
toute façon, donc le point est sans objet ...la source
Le livre suivant parle de l'utilisation de l'ID comme antipattern SQL et je suis d'accord avec l'auteur que c'est. http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1
Il s'agit d'un problème particulier lorsque vous effectuez des rapports complexes et que vous avez besoin de plusieurs identifiants, car vous devez alors créer un alias. L'utilisation de l'ID de nom de table facilite également l'identification du FK correct auquel se joindre (car ils ont le même nom) et rend les erreurs de connexion à la mauvaise chose moins probables.
Cela dit, de nombreuses bases de données ne prennent pas en charge la syntaxe USING, ce qui fait que le problème que vous avez soulevé n'est pas un problème pour ces bases de données. si les structures de table changent. Supposons donc que vous ajoutiez un champ appelé modifieddate aux deux tables, vous ne voudriez pas vous y joindre mais la jointure naturelle le ferait.
la source
Il est préférable de donner explicitement le nom de la table et le nom de la colonne comme Employees.EmployeeID avec des expressions où une jointure existe
la source