Spaltenbenennung

Tommy57

Erfahrenes Mitglied
Hallo,

ich bin gerade an einer neuen Datenbank und überlege, wie ich die Spalten am Besten betiteln sollte:

1. Variante:
Code:
continent:
id, name

country:
id, name, continent_id

factory:
id, name, continent_id, country_id

2. Variante:
Code:
continent:
id_continent, continent

country:
id_country, country, id_continent

factory:
id_factory, factory, id_continent, id_country

Kann mir vielleicht jemand sagen, welches die bessere Variante ist und auch warum?

Falls es wichtig ist, ich verwende MySQL und Doctrine 2 ORM.

Gruß, Tommy
 
Zuletzt bearbeitet:
Die 1. Variante ist meiner Meinung nach am besten. Man muss in der Tabelle ja nicht wissen, dass es die Id der Tabelle ist (id_factory). Und name ist auch ein besserer Spaltenname als country, continent oder factory. Das sagt ja schon die Tabelle aus.
 
Hi Leute,

ich hatte diesen Thread mal vor nem Jahr aufgemacht, wegen der Spaltenbenennung. Ihr hattet mir die erste Variante empfohlen.

Bin gestern auf was interessantes gestoßen, weswegen ich nun Variante 2 bevorzuge:

Bei Variante 2 kann man perfekt mit NATURAL JOIN arbeiten. Ich kann dann Tabellen direkt miteinander verknüpfen:

Code:
SELECT
    *
FROM
    continent
NATURAL JOIN
    country
NATURAL JOIN
    factory;

Das würde mit Variante 1 nicht gehen. Auch bei komplexeren SQL-Statements kann man sich mit dem NATURAL JOIN das ON sparen, da er automatisch mit den Spalten joined, die die gleiche Bennenung haben.

Gruß
 
Ich kann dir gar nicht sagen wie sehr ich dir von NATURAL JOIN abrate!
Wenn man sich die Query anschaut, hat man keine Idee wie der join stattfindet. Dieses 'feature' gibt es z.B. nicht auf MSSQL oder DB2, sprich falls du mal die DB wechseln musst, kannst du gleich auch jede Query neu schreiben. Zudem wenn du deine Tabellen erweiterst und es sich dabei dummerweise um eine weitere _id Spalte handelt, bringt dir deine Query plötzlich andere Resultate als vorher und du hast keine Ahnung warum. Du kannst auch im Internet nachlesen, praktisch jeder rät von NATURAL JOIN ab, z.B. auch AskTom. Wenn ich Queries schreibe, folge ich immer dem Grundsatz "making the implicit explicit" und ich kann dir nur empfehlen dies auch zu tun.
 
Hi BaseBallBatBoy,

danke für deine Antwort. Ehrlich gesagt sehe ich das so wie du. Hatte gestern nur im Studium (Vorlesung in Datenbank Systeme) ne Unterhaltung mit dem Prof, der meint, dass kurze Statements besser zu lesen sind. Er hatte mich eigentlich überzeugt. Aber die Statements werden in Wahrheit komplizierter. Und wie du schon gesagt hast, es könnte zu unerwünschten Ergebnissen führen.
 
Dein Prof hat insofern recht, als dass man mit SQL bei joins aliases verwenden sollte. Das macht dann das ganze lesbarer. aka:
SQL:
select a.name, b.name from tbla a inner join tblb b on a.id = b.id;
 

Neue Beiträge

Zurück