Ich hätte gerne eine Expertenmeinung zu Best Practices, wenn es um die Benennung von Spalten geht .
Hintergrund ist laut Wikipedia folgende Syntax:
SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);
ist effizienter als
SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);
Die JOIN ... USING
Syntax funktioniert jedoch nur für alle Primärschlüsselspalten, die global eindeutige Namen haben . Daher frage ich mich, ob dies als das Richtige angesehen wird.
Persönlich habe ich immer Tabellen mit PK-Spalte id
und Fremdschlüsselspalte erstellt othertable_id
. Aber auf diese Weise ist es nicht möglich, USING
oder zu verwenden NATURAL JOIN
.
Alle Links zu Designstilen oder Best-Practice-Anleitungen für die Tabellengestaltung sind ebenfalls willkommen!
database-design
join
naming-convention
Kerrek SB
quelle
quelle
Antworten:
Dies wurde schon vorher auf SO gefragt.
Wenn Sie gemeinsame und sehr mehrdeutige Namen haben, stellen Sie den Tabellennamen voran. Das heißt, alles, was Sie möglicherweise in fast jeder Abfrage als Alias angeben müssen.
Also für einen Mitarbeitertisch hätte ich
Und Wikipedia sagt tatsächlich:
Das ist eine Spalte weniger. Du würdest
SELECT *
sowieso nie verwenden, also ist der Punkt strittig ...quelle
Das folgende Buch befasst sich mit der Verwendung von ID als SQL-Antimuster, und ich stimme dem Autor zu, dass dies der Fall ist. http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1
Dies ist ein besonderes Problem, wenn Sie komplexe Berichte erstellen und mehr als eine ID benötigen, da Sie dann einen Alias erstellen müssen. Die Verwendung der Tabellennamen-ID erleichtert auch die Identifizierung der richtigen FK, zu der eine Verbindung hergestellt werden soll (da sie denselben Namen haben), und verringert die Wahrscheinlichkeit, dass Fehler beim Verbinden mit der falschen Sache auftreten.
Das heißt, viele Datenbanken unterstützen nicht die USING-Syntax, wodurch das von Ihnen angesprochene Problem für diese Datenbanken kein Problem darstellt. Viele Datenbanken unterstützen auch nicht die Verwendung eines natürlichen Joins wenn sich die Tabellenstrukturen ändern. Nehmen wir also an, Sie fügen beiden Tabellen ein Feld mit dem Namen modifieddate hinzu, und Sie möchten nicht daran teilnehmen, aber der natürliche Join würde dies tun.
quelle
Es ist besser, Tabellennamen und Spaltennamen wie Employees.EmployeeID mit Ausdrücken anzugeben, bei denen ein Join vorhanden ist
quelle