Sven Rautenberg: MySQL Fremdschlüssel und Tabellenstruktur Verständnisproblem

Beitrag lesen

Moin!

ZB. Ich habe 3 Tabellen jede Tabelle hat eine pnr-nummer
Ist es besser die Spalte in allen drei Tabellen gleich zu nennen oder besser
pnr_tab_a
pnr_tab_b
pnr_tab_c
?

Wo ist der Unterschied zwischen der Bezeichnung "pnr_tab_a" und "tab_a.pnr"?

Wenn tabellenverknüpfende Spalten identisch heißen, kann man JOINS netter gestalten, indem man "USING pnr" verwendet, anstatt "WHERE tab_1.pnr = tab_b.pnr" zu schreiben.

Effektiv gewinnst du mit unterschiedlichen Bezeichnern also absolut nichts.

Außerdem schreibt man SQL-Querys in der Regel nur einmal, liest sie danach aber noch häufiger - es ist also sehr sinnvoll, Tabellen- und Spaltenbezeichnungen zu verwenden, die den Sinn und die zugrundeliegenden Überlegungen transparent machen, falls man später nochmal Erweiterungen oder Änderungen vornehmen will. Aus dem Drang heraus, beim Tippen weniger Arbeit zu haben, kryptische Kurzbezeichnungen zu wählen spart am falschen Ende.

Ich müsste dann bei unterschiedlichen Bezeichnungen keine Tabelle in der Select- und Whereanweisung angeben. (Was ich bis jetzt immer so machte)

Effektiv sparst du nichts ein. Wenn dir die Tabellennamen zu lang zum Tippen sind, wähle je Query kürzere Aliasnamen, die du dann verwendest:

SELECT tabelle1.pnr, tabelle2.name FROM tabelle1, tabelle 2 ...
ist natürlich länger als
SELECT t1.pnr, t2.name FROM tabelle1 t1, tabelle2 t2 ...

Die nächste Frage, drei Tabellen
in der Tabelle A ist die pnr_id die eindeutige ID
in Tab B und C sind datensätze zu den pnr_id gespeichert.

Sollte ich das als Fremdschlüssel definieren?

Hängt davon ab, ob du den Vorteil der referentiellen Integrität und den Nachteil der damit verbundenen Performancereduktion haben willst.

In vielen Fällen ist sowas nicht notwendig.

- Sven Rautenberg

--
"Love your nation - respect the others."