Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zwei Tabellen mit einander Verknüpfen (https://www.delphipraxis.net/39492-zwei-tabellen-mit-einander-verknuepfen.html)

Luckie 3. Feb 2005 14:15


Zwei Tabellen mit einander Verknüpfen
 
Datenbaksystem: mySQL
Zugriff über: mysql.pas

Gegeben sei eine fiktive Lagerverwaltung eines Supermarktes. In diesem Lager gibt es nun verschiedene Produkte. Diese Produkte werden von verschiednen Lieferanten geliefert. Wobei ein Lieferant auch mehrere Produkte liefern kann. Ich habe mir das so überlegt, dass ich zwei Tabellen anlege, eine für die Lieferanten und eine für die Produkte:

Lieferanten:
Code:
LieferantenID
Firma
Strasse
PLZ
Ort
Telefon
Ansprechpartner
Durchwahl
Produkt:
Code:
ProduktID
Produktbezeichnung
Stückpreis
Menge_auf_Lager
Meine Frage jetzt: Wie bekomme ich diese Tabellen miteinander verknüpft? Was muss ich noch für ein Feld einführen oder sonst an den Tabellen ändern, dass ich jedem Produkt einen Lieferanten zu ordnen kann?

Wie gesagt, alles nur fiktiv. Soll lediglich für mich als Übung und zum Verständnis dienen.

mikhal 3. Feb 2005 14:20

Re: Zwei Tabellen mit einander Verknüpfen
 
Über eine dritte Tabelle - einer Treffertabelle. Sie enthält möglicherweise nur die PK's der beiden Tabellen.

Grüße
Mikhal

ibp 3. Feb 2005 14:21

Re: Zwei Tabellen mit einander Verknüpfen
 
Zitat:

Zitat von Luckie
Meine Frage jetzt: Wie bekomme ich diese Tabellen miteinander verknüpft? Was muss ich noch für ein Feld einführen oder sonst an den Tabellen ändern, dass ich jedem Produkt einen Lieferanten zu ordnen kann?

der Tabelle Produkt das Feld LieferantenID

alcaeus 3. Feb 2005 14:21

Re: Zwei Tabellen mit einander Verknüpfen
 
Hallo Luckie,

nehmen wir an, der Artikel wird von einem bestimmten (und nur von dem) Lieferanten geliefert. Also führst du in der Produkt-Tabelle noch ein Feld ein, welches die ID des Lieferanten speicherst. Dieses Feld bezeichnen wir nun einfach mal als LieferantenID. Willst du nun die Daten des Lieferanten haben, welcher ein Produkt mit einer bestimmten ID geliefert hat, schreibst du folgendes:
SQL-Code:
SELECT L.* FROM Lieferanten L, Produkte P
WHERE L.LieferantenID=P.LieferantenID AND P.ProduktID=12345
Sollte so funktionieren (jedenfalls hat es das bei mir immer ;))

Greetz
alcaeus

shmia 3. Feb 2005 14:26

Re: Zwei Tabellen mit einander Verknüpfen
 
Du musst in der Produkt-Tabelle noch einen Fremdschlüssel aufnehmen:
Tabelle Produkt:
Code:
ProduktID
LieferantenID  <= Foreign KEY
Produktbezeichnung
Stückpreis
Menge_auf_Lager
Mit einem INNER JOIN greifst du dann auf die Daten zu:
// suche alle Produkte mit Lieferanten, von denen weniger als 10 am Lager sind
SQL-Code:
SELECT Lieferanten.Firma, Lieferanten.Ort, Produkt.Produktbezeichnung FROM
Lieferanten INNER JOIN Produkt ON Lieferanten.LieferantenID=Produkt.LieferantenID
WHERE Produkt.Menge_auf_Lager < 10
Mag sein, dass MySQL die INNER JOIN Syntax nicht kann; dann gibt es eine andere (schlechtere) Schreibweise:
SQL-Code:
SELECT Lieferanten.Firma, Lieferanten.Ort, Produkt.Produktbezeichnung FROM
Lieferanten, Produkt
WHERE
(Lieferanten.LieferantenID=Produkt.LieferantenID) AND
(Produkt.Menge_auf_Lager < 10)

Luckie 3. Feb 2005 14:26

Re: Zwei Tabellen mit einander Verknüpfen
 
Also müsste das ganze dann so aussehen:
Lieferanten:
Code:
LieferantenID
Firma
Strasse
PLZ
Ort
Telefon
Ansprechpartner
Durchwahl
Produkt:
Code:
ProduktID
LieferantID
Produktbezeichnung
Stückpreis
Menge_auf_Lager
Muss dieses zusätzliche Feld irgend eine besondere Eigenschaft aufweisen bis auf die tatsache, dass es vom glöeichen datentyp sein muss? Also muss es indiziert sein oder sonst irgendwas?

mikhal 3. Feb 2005 14:27

Re: Zwei Tabellen mit einander Verknüpfen
 
Expliziter:

1:n-Verknüpfung: Ein Artikel wird von einem (und genau nur einem Lieferanten) geliefert: Die LieferantenID als Foreign Key in die Tabelle Artikel integrieren. Dieser Fall wird aber leider selten auftreten.

n:m-Verknüpfung: Ein Artikel kann von mehreren Lieferanten geliefert werden: eine solche Problematik ist nur über eine dritte Tabelle aufzulösen. Kleiner Nebeneffekt: ich kann die gleiche Treffertabelle auch für dfolgende Fälle verwenden: welche Lieferanten liefern mir denn den Artikel überhaupt und welche Artikel liefert mit der Lieferant.

Grüße
Mikhal

alcaeus 3. Feb 2005 14:29

Re: Zwei Tabellen mit einander Verknüpfen
 
Zitat:

Zitat von shmia
Mag sein, dass MySQL die INNER JOIN Syntax nicht kann; dann gibt es eine andere (schlechtere) Schreibweise:
SQL-Code:
SELECT Lieferanten.Firma, Lieferanten.Ort, Produkt.Produktbezeichnung FROM
Lieferanten, Produkt
WHERE
(Lieferanten.LieferantenID=Produkt.LieferantenID) AND
(Produkt.Menge_auf_Lager < 10)

Nur weil es mich interessiert: ist die Abfrage ohne INNER JOIN langsamer oder so, oder warum ist sie schlechter? Ich verwende nämlich fast nie INNER JOINs, sondern immer die "schlechtere" Variante.

Greetz
alcaeus

Zottel 3. Feb 2005 14:30

Re: Zwei Tabellen mit einander Verknüpfen
 
jep. wenn du das so machst, kannst du beliebig viele produkte an einen lieferanten hängen.

was mich jetzt mal interressiert:
ist das ein standartmäßiger aufbau von tabellen, oder gibt es da ausser den normalformen noch andere richtlinien?
denn wie Lukie die tabellen jetzt aufgebaut hat, baue ich meine auch auf. Gibt es noch andere alternativen?

btw.: ich arbeite mit MSSQL.

Luckie 3. Feb 2005 14:30

Re: Zwei Tabellen mit einander Verknüpfen
 
@mikhal: Ja das ist mir klar, aber ich will erstmal von dem einfachen Fall 1:n ausgehen. Ich fange ja gerade damit an mich mit Datenbakne und SQL zu beschäftigen. Und ich pflege etwas in kleinen, überschaubaren Schritten zu lernen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz