Beziehungen zwischen Tabellen

Der MySQL Datenbank-Server für Internet- und Intranet-Lösungen.

Beziehungen zwischen Tabellen

Beitragvon Xerubin » Mo 03 Feb, 2003 20:29

Hallo,

ich wollte fragen, ob es möglich ist in MySQL Tabellen mit Beziehungen zu versehen und diese dann auszulesen.

Also ich hab ezwei Tabellen:

eine heiĂźt "schueler"
name, vorname, str. plz.... usw. ohne (ort!!)

eine heiĂźt "plz"
plz, ort

Nehmen wir an, ich hätte in plz alle PLZs gepeichert, dann möchte ich, dass er mir die Ortnamen hinter die PLZ des Schülers schreibt. Unsere Lehrerin möchte nämlich mit dieser Auslagerung Redundanz vermeiden... *rolleye*

also ungefähr so:

kunz, heinz, egidienstr. 91055 Musterstadt

ich wĂĽrde gerne wissen wie dann die Abfrage ausschauen wĂĽrde.

Vielen Dank im Voraus!

Xerubin
Xerubin
 

RE: Beziehungen zwischen Tabellen

Beitragvon mad » Mo 03 Feb, 2003 21:45

<HTML>> Unsere Lehrerin möchte nämlich mit dieser Auslagerung Redundanz vermeiden... *rolleye*

... das mag dir im moment vielleicht "schwachsinnig" vorkommen, die vermeidung
von redundanzen innerhalb von datenbanken ist aber ziemlich wichtig ..

stell dir mal eine db vor mit mehreren 100GB, oder einen table mit mehreren millionen
eintraegen?! da machts durchaus 'nen unterschied ob da bei jedem eintrag wieder der komplette ortsname drinsteht oder nur jeweils ein "verweis" (plz) auf den namen
des ortes.

ausserdem was ist, wenn sich ploetzlich die schreibweise eines ortes aendert?
dann muesstest du tausende von eintraegen (die halt dem ort zugehoeren) aendern!
so, mit dem zusaetzlichen table, brauchst du nur einen eintrag anpassen und schon
stimmen auch die anderern eintraege wieder ..

die vermeidung von redundanzen ist also schon ne gute sache ;-)
und zum query ... ein simpler equality-join reicht in dem fall

select s.name, s.vorname, s.strasse, p.plz, p.ort from schueler s, plz p where s.plz=p.plz

mfg,
mad.

</HTML>
mad
 

RE: Beziehungen zwischen Tabellen

Beitragvon Xerubin » Di 04 Feb, 2003 17:31

Klar, wir lernen das in der Schule. Aber ne Datenbank mit nicht mehr als 30 Einträgen, braucht sowas eigentlich nicht.

vielen Dank erstmal fĂĽr die Hilfe!

Ich verusch mir jetzt mal die Abfrage zu erschließen, ich hab das nämlcih noch nie mit sowas gemacht.
Also erst wird aufgezählt, was wir brauchen, dann wird irgendwie festgelegt, dass wir aus schueler (welche mit s bezeichnet wird) und aus plz (welches mit p bezeichnet wird) auslesen. Soweit
Dann dahinter dieser "equality-join" hast du ihn glaub ich genannt, sagt quasi nur dass wenn s.plz = p.plz ist der Ort aus dieser Zeile ausgegeben werden soll, oder? Mir ist das letzte nämlich nich ganz schlüsig.

Tut mir leid, wenn ich so dumme Fragen stellen, aber hab ich das richtig verstanden? Ich will ja daraus auch was lernen ;)

Hat jetzt eigentlich wie bei Access es eine Bedeutung dass der eine sekundärschlüssel in der anderen Tabelle der Primärschlüssel ist?

Vielen Dank nochmal fĂĽr die Antwort!!

viele GrĂĽĂźe Xerubin
Xerubin
 

RE: Beziehungen zwischen Tabellen

Beitragvon mad » Di 04 Feb, 2003 21:06

<HTML>hi,

> Aber ne Datenbank mit nicht mehr als 30 Einträgen, braucht sowas eigentlich nicht.

da magst schon recht haben, aber grundprinzipien lassen sich halt vermutlich mit
ner ueberschaubaren "spielzeug"-db leichter erklaeren als mit nem 100gig monster ;-)


> Ich verusch mir jetzt mal die Abfrage zu erschließen, ich hab das nämlcih noch nie mit sowas gemacht.

bissler info zum thema sql findest hier btw ..
http://ffm.junetz.de/members/reeg/DSP/n ... 0000000000


> Also erst wird aufgezählt, was wir brauchen, dann wird irgendwie festgelegt, dass wir
> aus schueler (welche mit s bezeichnet wird) und aus plz (welches mit p bezeichnet
> wird) auslesen. Soweit
> Dann dahinter dieser "equality-join" hast du ihn glaub ich genannt, sagt quasi nur
> dass wenn s.plz = p.plz ist der Ort aus dieser Zeile ausgegeben werden soll, oder?
> Mir ist das letzte nämlich nich ganz schlüsig.

ja im im prinzip stimmt das eigentlich so wies'd es erklaert hast...

"join"'s verknuepfen halt zwei oder mehr tabellen miteinander - in der einen
oder anderen weise (wirst schon sehen, da gibts jede menge schrullige varianten ;)

d.h. wennst zb zwei tabllen hast, und die beide join'st (ohne die where klausel)
dann erhaeltst alle kombinationen zwischen den beiden tables (spalte mal spalte
gibt halt sowas wie ein feld von moeglichen ergbnissen);

mit dem "s.plz=p.plz" sagst nur, dass du von all den moeglichen kombinationen die
der join als loesungmenge ergibt, nur jene sehen willst, bei denen die bedingung
"s.plz=p.plz" erfuellt ist ..

kannst ja mal probieren ...

select s.name, s.vorname, s.strasse, p.plz, p.ort from schueler s, plz p

ohne die where klausel solltest alle moeglichen kombinationen zwischen plz und schueler bekommen ..


> Hat jetzt eigentlich wie bei Access es eine Bedeutung dass der eine sekundärschlüssel in der anderen Tabelle der Primärschlüssel ist?

fuer dein select statement wohl kaum;

was du da beschreibst sind fremdschluessel-beziehungen; das hat mehr mit
datenbankdesign - insbesondere was die datenkonsistenz angeht - zu tun ...
durch fremdschluessel-beziehung (foreign keys) kannst du zb verhindern, dass jemand einen schueler in der db anlegt der in einem ort wohnt, der in der db
im plz-table noch gar nicht erfasst wurde... etc.
(stichwort: referential integrity & constrains)

mfg,
mad.
</HTML>
mad
 


ZurĂĽck zu MySQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste