www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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.vorhilfe.de