![]() |
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:
Produkt:
LieferantenID
Firma Strasse PLZ Ort Telefon Ansprechpartner Durchwahl
Code:
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?
ProduktID
Produktbezeichnung Stückpreis Menge_auf_Lager Wie gesagt, alles nur fiktiv. Soll lediglich für mich als Übung und zum Verständnis dienen. |
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 |
Re: Zwei Tabellen mit einander Verknüpfen
Zitat:
|
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:
Sollte so funktionieren (jedenfalls hat es das bei mir immer ;))
SELECT L.* FROM Lieferanten L, Produkte P
WHERE L.LieferantenID=P.LieferantenID AND P.ProduktID=12345 Greetz alcaeus |
Re: Zwei Tabellen mit einander Verknüpfen
Du musst in der Produkt-Tabelle noch einen Fremdschlüssel aufnehmen:
Tabelle Produkt:
Code:
Mit einem INNER JOIN greifst du dann auf die Daten zu:
ProduktID
LieferantenID <= Foreign KEY Produktbezeichnung Stückpreis Menge_auf_Lager // suche alle Produkte mit Lieferanten, von denen weniger als 10 am Lager sind
SQL-Code:
Mag sein, dass MySQL die INNER JOIN Syntax nicht kann; dann gibt es eine andere (schlechtere) Schreibweise:
SELECT Lieferanten.Firma, Lieferanten.Ort, Produkt.Produktbezeichnung FROM
Lieferanten INNER JOIN Produkt ON Lieferanten.LieferantenID=Produkt.LieferantenID WHERE Produkt.Menge_auf_Lager < 10
SQL-Code:
SELECT Lieferanten.Firma, Lieferanten.Ort, Produkt.Produktbezeichnung FROM
Lieferanten, Produkt WHERE (Lieferanten.LieferantenID=Produkt.LieferantenID) AND (Produkt.Menge_auf_Lager < 10) |
Re: Zwei Tabellen mit einander Verknüpfen
Also müsste das ganze dann so aussehen:
Lieferanten:
Code:
Produkt:
LieferantenID
Firma Strasse PLZ Ort Telefon Ansprechpartner Durchwahl
Code:
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?
ProduktID
LieferantID Produktbezeichnung Stückpreis Menge_auf_Lager |
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 |
Re: Zwei Tabellen mit einander Verknüpfen
Zitat:
Greetz alcaeus |
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. |
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 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz