MySQL Fremdschlüssel und Tabellenstruktur Verständnisproblem
Andy89
- datenbank
0 Hopsel0 Jaroslav Jablonski0 Andy89
0 Sven Rautenberg
Guten Morgen,
ich habe ein paar Fragen für mein allgemeines Verständnis und Herangehen.
Ich muss meine Arbeit etwas besser strukturieren.
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
?
Ich müsste dann bei unterschiedlichen Bezeichnungen keine Tabelle in der Select- und Whereanweisung angeben. (Was ich bis jetzt immer so machte)
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?
Muss ich in dem Fall einen Fremdschlüssel definieren?
(Die Daten werden nur über den Browser eingegeben und bearbeitet)
Wann und wie definiert man Fremdschlüssel?
Vielen Dank für die Hilfe.
Hi Andy89!
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
?
Weder noch. Haben die Spalten identische Inhalte?
Vielleicht solltest du das Datenbankdesign nochmal überdenken.
Dieser Artikel zur Normalisierung sollte recht interessant für dich sein.
Ich müsste dann bei unterschiedlichen Bezeichnungen keine Tabelle in der Select- und Whereanweisung angeben. (Was ich bis jetzt immer so machte)
Du solltest generell mit Aliasnamen arbeiten und diese auch in der Selektion verwenden.
Sollte ich das als Fremdschlüssel definieren?
Natürlich. Stichwort: Referenzielle Integrität
Muss ich in dem Fall einen Fremdschlüssel definieren?
Geschenke wirst du zu Weihnachten schon noch bekommen, wenn du es nicht tust... ;-)
(Die Daten werden nur über den Browser eingegeben und bearbeitet)
Was hat das denn damit zu tun?
Wann und wie definiert man Fremdschlüssel?
Wann? Genau dann, wenn du die referenzielle Integrität gewährleisten willst.
Wie? Das steht im MySQL-Handbuch.
MfG H☼psel
Ist es besser die Spalte in allen drei Tabellen gleich zu nennen oder besser
Weder noch. Haben die Spalten identische Inhalte?
Vielleicht solltest du das Datenbankdesign nochmal überdenken.
Nö, nicht pauschal, denn es könnte sich auch um verknüpfte Spalten handeln.
~JJ
Hi Jaroslav!
Ist es besser die Spalte in allen drei Tabellen gleich zu nennen oder besser
Weder noch. Haben die Spalten identische Inhalte?
Vielleicht solltest du das Datenbankdesign nochmal überdenken.
Nö, nicht pauschal, denn es könnte sich auch um verknüpfte Spalten handeln.
Deshalb ja die Nachfrage und das Wörtchen "vielleicht".
MfG H☼psel
Danke, für die Hilfe.
Andy
Ist es besser die Spalte in allen drei Tabellen gleich zu nennen oder besser
Weder noch. Haben die Spalten identische Inhalte?
Vielleicht solltest du das Datenbankdesign nochmal überdenken.
Nö, nicht pauschal, denn es könnte sich auch um verknüpfte Spalten handeln.~JJ
Hallo,
Sorry ich habe mich falsch ausgedrückt,
Besser wäre:
Ist es besser die Spalte in allen drei Tabellen gleich zu nennen, wenn sie den gleichen Inhalt haben?
Danke für die Infos.
Andy
Ist es besser die Spalte in allen drei Tabellen gleich zu nennen, wenn sie den gleichen Inhalt haben?
Wenn es sich um verknüpfte Spalten handelt, ja. Bspw.:
Tabelle Personal
pnr | Name | Vorname | Strasse | PLZ | Ort
Tabelle Umsatz
pnr | Monat | Umsatz
Tabelle Urlaub
pnr | Urlaub_anfang | Urlaub_ende
Ansonsten siege Hopsel`s Hinweis auf Normalisierung.
Hi!
Ansonsten siege Hopsel`s Hinweis auf Normalisierung.
Ja bitte, dieser möge unbedingt siegen;)
off:PP
Vielleicht solltest du das Datenbankdesign nochmal überdenken.
Dieser Artikel zur Normalisierung sollte recht interessant für dich sein.
Hallo H☼psel,
im Prinzip habe ich meine Tabellen so wie in der 3. Normalform aufgebaut, obwohl ich nicht wusste, dass sie so heißt ;)
Nur hatte ich unterschiedliche Spaltenbezeichnungen.
Bei mir hätte es geheißen anstatt PersNr - PersNr_Pers PersNr_Firma usw.
Ist es nicht immer besser eine Tabelle wie die Tabelle Abteilungen anzulegen?
Wenn aus Abteilung Einkauf, mal Abteilung Beschaffung wird, dann muss ich es doch nur an einer Stelle ändern?
Oder (ist zwar eine doofes Beispiel) wenn ein Mitarbeiter für zwei Abteilungen tätig ist, dann kann ich eine Referenztab. anlegen
PersNr Abteilung
1 2
1 3
1 5
usw.
Wann würde ich die 2, Form verwenden?
Danke
Andy
Hi Andy89!
im Prinzip habe ich meine Tabellen so wie in der 3. Normalform aufgebaut, obwohl ich nicht wusste, dass sie so heißt ;)
Nur hatte ich unterschiedliche Spaltenbezeichnungen.
Bei mir hätte es geheißen anstatt PersNr - PersNr_Pers PersNr_Firma usw.
Wie du die Spalten nennst ist ja irrelevant. Die Beziehung untereinander ist wichtig.
Ist es nicht immer besser eine Tabelle wie die Tabelle Abteilungen anzulegen?
Also die dritte Normalform zu verwenden?
Ob das *immer* besser ist, kann ich schlecht beurteilen. Ich bin ja selbst kein Datenbankexperte.
Für deinen Fall würde ich es aber schon raten.
Oder (ist zwar eine doofes Beispiel) wenn ein Mitarbeiter für zwei Abteilungen tätig ist, dann kann ich eine Referenztab. anlegen
Richtig. Das nennt sich eine n:m-Relation.
Wann würde ich die 2, Form verwenden?
Keine Ahnung. ;-)
Ich hoffe, ich konnte dir ein wenig helfen. =)
MfG H☼psel
Mahlzeit Andy89,
Nur hatte ich unterschiedliche Spaltenbezeichnungen.
Das ist eigentlich relativ irrelevant.
Bei mir hätte es geheißen anstatt PersNr - PersNr_Pers PersNr_Firma usw.
Es spielt keine Rolle, wie Spalten heißen - sie sollten nur so benannt sein, dass jemand, der damit arbeiten soll/muss/kann/darf, eindeutlich erkennen kann, dass sie zueinander in Beziehung stehen.
IMHO ist es sinnvoll, Spalten, die gleiche Werte enthalten, auch gleich zu benennen - insbesondere, wenn es sich um IDs handelt. Dem Problem, dass Du dann bei Abfragen mit JOINs mehrere Felder gleichen Namens hast, kannst Du dadurch abhelfen, dass Du eindeutlich benannte Aliase nutzt.
MfG,
EKKi
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