www.matheraum.de
Das Matheforum.
Das Matheforum des MatheRaum.

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenDatenbankenMysql 5.0
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
Forum "Datenbanken" - Mysql 5.0
Mysql 5.0 < Datenbanken < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Datenbanken"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Mysql 5.0: Joints / Fremdschlüssel
Status: (Frage) beantwortet Status 
Datum: 09:15 Di 26.06.2007
Autor: Nicole1989

HI Leute

Wann brauche ich eigentlich Joints / wann Fremdschlüssel?

Ich habe jetzt zwei Tabellen erstellt. Die eine enhält den Fremdschlüssel der anderen. Nun möchte ich jedoch eine ANgabe, welche sich in der anderen Tabelle befindet auslesen. Also beispielsweise:

IDKunden      FKIDKunden
Name          ID Aufträge
Vornahme      Datum

Wie sieht die Abfrage aus, wenn ich die Namen der Kunden anzeigen möchte, die zum Datum....eingekauft haben?
Das ganze wird doch auch mit Joints realisiert, sehe ich das nicht richtig?:S
Aber was ist denn der Unterschied?

Vielen Dank.

Lg Nicole

        
Bezug
Mysql 5.0: Antwort
Status: (Antwort) fertig Status 
Datum: 21:51 Di 26.06.2007
Autor: piet.t


> HI Leute
>  
> Wann brauche ich eigentlich Joints / wann Fremdschlüssel?

Erstmal zur Ausdrucksweise: Meines Wissens verwendet man im Datenbankjargon nur "Join", also "Verbindung", auch wenn "joint" neben "Gelenk" oder was zum Rauchen ;-) auch "Nahtstelle" bedeuten kann.
Im Prinzip beschreibt beides den gleichen Sachverhalt aus unterschiedlichen Sichtweisen: zwei Datenbanktabellen werden über gemeinsame Feldinhalte in Beziehung gesetzt. "Fremdschlüssel" bezieht sich dabei nur auf die statische Struktur ("Feld X in Tabelle A verweist auf Feld Y in Tabelle B") wogegen "Join" sich auf den Vorgang des Abfragens bezieht, d.h. die Tabellen werden tatsächlich verbunden.

>  
> Ich habe jetzt zwei Tabellen erstellt. Die eine enhält den
> Fremdschlüssel der anderen. Nun möchte ich jedoch eine
> ANgabe, welche sich in der anderen Tabelle befindet
> auslesen. Also beispielsweise:
>  
> IDKunden      FKIDKunden
>  Name          ID Aufträge
>  Vornahme      Datum
>  
> Wie sieht die Abfrage aus, wenn ich die Namen der Kunden
> anzeigen möchte, die zum Datum....eingekauft haben?

Da gibt es zwei unterschiedliche Formulierungen, die aber letztlich auf das gleiche hinauslaufen:
1.) Als Join mit Schlüsselwort "JOIN":
SELECT A.Name
FROM KUNDE A
INNER JOIN AUFTRAG B
ON A.IDKunden = B.FKIDKunden
WHERE B.Datum = '2007-03-17'

oder 2.) als "Theta-Style-join" (frag mich jetzt nicht, ob es da auch ein deutsches Wort für gibt, das letzte Datenbankbuch was ich gelesen habe war leider auf Englisch):
SELECT A.Name
FROM KUNDE A,
         AUFTRAG B
WHERE A.IDKunden = B.FKIDKunden
    AND B.Datum = '2007-03-17'

>  Das ganze wird doch auch mit Joints realisiert, sehe ich
> das nicht richtig?:S

Abfragen, die sich auf zwei Tabellen beziehen werden in der Regel am besten über Joins realisiert. Es wäre im Prinzip auch möglich, das ganze über eine Subquery zu machen, allerdings ist das im allgemeinen langsamer.

> Aber was ist denn der Unterschied?

siehe oben....

>  
> Vielen Dank.
>  
> Lg Nicole

Reicht das erstmal? Sonst nochmal nachfragen...

Gruß

piet

Bezug
                
Bezug
Mysql 5.0: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:36 Do 28.06.2007
Autor: Nicole1989

Sorry, habe natürlich Join gemeint;)..Hehe...also das Problem, was ich habe ist einfach...wenn ich ja 2 Tabellen oder mehrere habe

dann kann ich ja bei der ersten Tabelle eine Spalte FK_IDKunde machen. Dort kann ich dann die ID hineinschreiben, welche sich dann auf die Tabelle Kunde bezieht.

Aber dann muss ich ja nicht unbedingt diese Spalte als Foreign Key definieren? Ich habe ja dann schon eine Spalte, die sich auf die ID der anderen Tabelle bezieht, welche ich dann per Join auslesen kann.

Für was sind denn diese Fremdschlüssel überhaupt? Es verwirrt mich momentan einfach...da ich, egal ob ich den Fremdschlüssel sezte, sowieso eine Joinabfrage machen muss.Da könnte ich ja einfach eine Spalte bei der ersten Tabelle hinzufügen und dort die ID's der 2. Spalte hineinsetzen.

Vielen lieben Dank für deine Antwort.

Grüsse Nicole


Bezug
                        
Bezug
Mysql 5.0: Fremdschlüssel
Status: (Antwort) fertig Status 
Datum: 14:32 Do 28.06.2007
Autor: rainerS

Hallo Nicole,

> Für was sind denn diese Fremdschlüssel überhaupt? Es
> verwirrt mich momentan einfach...da ich, egal ob ich den
> Fremdschlüssel sezte, sowieso eine Joinabfrage machen
> muss.Da könnte ich ja einfach eine Spalte bei der ersten
> Tabelle hinzufügen und dort die ID's der 2. Spalte
> hineinsetzen.

Fremdschlüssel dienen dazu, die referenzielle Integrität sicherzustellen.

Beispiel: 2 Tabellen, in einer stehen Lieferanten, in der anderen die gelieferten Artikel:

Lieferanten:
LID (integer)    Name(Text)     Adresse(Text)

Artikel:
AID (integer)    Bestellnummer(Text)  LieferantenID(integer)

Hier würde ich Lieferanten_ID in der Artikeltabelle als Fremdschlüssel deklarieren, der auf LID in der Lieferantentabelle verweist. Dadurch muss jeder Eintrag in der Spalte Lieferanten_ID auch in der Lieferantentabelle
vorhanden sein.

Das heisst insbesondere, dass es nicht möglich ist, eine Zeile in Lieferanten zu löschen, wenn es noch einen Artikel gibt, der darauf verweist.

Man kann auch bei der Definition des Fremdschlüssels angeben, dass automatisch Änderungen an der Artikeltabelle durchgeführt werden, wenn die Bedingung verletzt wird.

Beispiel: ON DELETE CASCADE bedeutet, dass beim Löschen eines Lieferanten automatisch alle zugehörigen Artikel gelöscht werden.

Zusammengefasst: Fremdschlüssel sorgen dafür, dass gewisse Beziehungen zwischen Tabellen eingehalten werden, wenn Einträge in der Datenbank hinzugefügt, geändert oder gelöscht werden.

In deiner Datenbank sorgt der Fremdschlüssel FKIDKunden dafür, dass es zu jedem Auftrag auch einen passenden Kunden gibt.

In der Wikipedia gibt es einen []Artikel zur Referenziellen Integrität.

Und zum Abschluss noch ein anderer Tipp: ich finde es nützlich, in jeder Tabelle eine ID-Spalte als Primärschlüssel vorzusehen. Dann kann ich immer mit einer Zahl auf meine Tabelleneinträge verweisen.

Grüsse Rainer


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Datenbanken"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheforum.net
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]