n-m Beziehungen

In normalisierten Datenbanken kommen häufig "Beziehungstabellen" zum Einsatz, welche die Verbindung zwischen den Entitäten A herstellen. n-m-Beziehungen benötigen immer eine solche Beziehungstabelle.

Beispiel

(A1)

Die Struktur der Beziehungstabelle sieht so aus:

schauspieler_film(sfid, sid↑ , fid↑)

Eine kurze Recherche ergibt (unter anderem), dass Meg Ryan in "Harry And Sally" mitspielt. Um diese Beziehung abzubilden, muss in unserer schauspieler_film-tabelle eie Zeile der Form

id	sid	fid
1	2	4

eingefügt werden.

—- Importiere für die folgenden Übungen die Tabellen der normalisierte Zahnarztbedarfsdatenbank in deine Übungsdatenbank. (zahnarztbedarf_2nf.zip)

(A2)

Erstelle ein ER-Diagramm für die Datenbank.

(A3)

Gib ein SQL-Statement an, das alle Produkte der Firma mit Hilfe des Filters WHERE hersteller.firma = 'Eisen Karl' auflistet1) Du sollst also nicht "von Hand" zuerst die Hersteller ID nachschauen… .

Gib ein SQL-Statement an, das alle Bestellungen von Viktoria auflistet.

Gib ein SQL-Statement an, das den Rechnungsbetrag von Dr. Blutgesicht ausgibt.

Gib ein SQL-Statement an, das alle Doktoren ausgibt, die Zement gekauft haben

Gib ein SQL-Statement an, deren Rechnungsbetrag über 100EUR liegt

Lösung 1

SELECT * FROM hersteller,doktoren, produkte, bestellungen WHERE bestellungen.produkt_id = produkte.id AND bestellungen.doktor_id = doktoren.id AND bestellungen.hersteller_id = hersteller.id AND hersteller.firma = "Eisen-Karl"

Lösung 2

SELECT * FROM hersteller,doktoren, produkte, bestellungen WHERE bestellungen.produkt_id = produkte.id AND bestellungen.doktor_id = doktoren.id AND bestellungen.hersteller_id = hersteller.id AND doktoren.vorname = "Viktoria"

Lösung 3

SELECT SUM(preis*anzahl) AS rechnung, doktoren.name FROM hersteller,doktoren, produkte, bestellungen WHERE bestellungen.produkt_id = produkte.id AND bestellungen.doktor_id = doktoren.id AND bestellungen.hersteller_id = hersteller.id AND doktoren.name = "Blutgesicht"

Lösung 5

SELECT SUM(preis*anzahl) AS rechnung, doktoren.name FROM hersteller,doktoren, produkte, bestellungen WHERE bestellungen.produkt_id = produkte.id AND bestellungen.doktor_id = doktoren.id AND bestellungen.hersteller_id = hersteller.id GROUP BY doktoren.name HAVING rechnung >100

(Bonus 1)

Teste das folgende SQL Statement:

SELECT DISTINCT produkt, firma FROM produkte p INNER JOIN bestellungen b ON p.id=b.produkt_id INNER JOIN hersteller h ON h.id=b.hersteller_id WHERE h.firma = "Eisen-Karl"

Was wird hier abgefragt? Experimentiere mit der WHERE BEdingung und mit den angezeigten Feldern.