Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung Nächste ÜberarbeitungBeide Seiten, nächste Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:nm_beziehungen:start [25.11.2020 20:15] – angelegt sbel | faecher:informatik:oberstufe:datenbanken:nm_beziehungen:start [08.12.2020 08:50] – [Tabelle] sbel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== n-m Beziehungen ====== | ====== n-m Beziehungen ====== | ||
- | In normalisierten | + | In normalisierten |
+ | herstellen. | ||
- | | + | ===== Beispiel ===== |
+ | |||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | Die Struktur der Beziehungstabelle sieht so aus: | ||
+ | |||
+ | '' | ||
+ | |||
+ | Das vollständige Schema sieht also so aus: | ||
+ | |||
+ | '' | ||
+ | '' | ||
+ | '' | ||
+ | |||
+ | |||
+ | |||
+ | 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 | ||
+ | |||
+ | |||
+ | eingefügt werden. Der Umstand, dass John Belushi eine Rolle in Blues Brothers spielt, führt zu einer weiteren Zeile: | ||
+ | |||
+ | ^ id ^ sid | fid | | ||
+ | | 1 | 4 | 2 | | ||
+ | | 2 | 6 | 1 | | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Ergänze die Beziehungstabelle unter Verwendung entsprechenden Ressourcen. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | <WRAP center round box 90%> | ||
+ | Importiere | ||
+ | </ | ||
+ | |||
+ | |||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | Erstelle ein ER-Diagramm für die Datenbank. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A3) === | ||
+ | |||
+ | - Gib ein SQL-Statement an, das alle Produkte der Firma mit Hilfe des Filters '' | ||
+ | - 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 | | ||
+ | |||
+ | <code sql> | ||
+ | SELECT * FROM hersteller, | ||
+ | WHERE bestellungen.produkt_id = produkte.id | ||
+ | AND bestellungen.doktor_id = doktoren.id | ||
+ | AND bestellungen.hersteller_id = hersteller.id | ||
+ | AND hersteller.firma = " | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung 2 | | ||
+ | <code sql> | ||
+ | SELECT * FROM hersteller, | ||
+ | WHERE bestellungen.produkt_id = produkte.id | ||
+ | AND bestellungen.doktor_id = doktoren.id | ||
+ | AND bestellungen.hersteller_id = hersteller.id | ||
+ | AND doktoren.vorname = " | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung 3 | | ||
+ | <code sql> | ||
+ | SELECT sum(preis*anzahl) AS rechnung, doktoren.name FROM hersteller, | ||
+ | WHERE bestellungen.produkt_id = produkte.id | ||
+ | AND bestellungen.doktor_id = doktoren.id | ||
+ | AND bestellungen.hersteller_id = hersteller.id | ||
+ | AND doktoren.name = " | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ++++ Lösung 5 | | ||
+ | <code sql> | ||
+ | SELECT sum(preis*anzahl) AS rechnung, doktoren.name FROM hersteller, | ||
+ | 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: | ||
+ | |||
+ | <code sql> | ||
+ | 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 = " | ||
+ | </ | ||
+ | |||
+ | Was wird hier abgefragt? Experimentiere mit der WHERE BEdingung und mit den angezeigten Feldern. |