faecher:informatik:oberstufe:datenbanken:nm_beziehungen:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

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 sbelfaecher:informatik:oberstufe:datenbanken:nm_beziehungen:start [05.04.2022 12:18] – [Tabelle] Anni Theil
Zeile 1: Zeile 1:
 ====== n-m Beziehungen ====== ====== n-m Beziehungen ======
  
-In normalisierten Datenbanklen kommen häufig "Beziehungstabellen" zum Einsatz, welche die Verbindung zwischen den Entitäten herstellen. n-m-Beziehungen benötigen immer eine solche Beziehungstabelle.+In normalisierten Datenbanken kommen häufig "Beziehungstabellen" zum Einsatz, welche die Verbindung zwischen den Entitäten 
 +herstellen. **n-m-Beziehungen benötigen immer eine solche Beziehungstabelle**.
  
-  Importiere die Tabellen der normalisierte Zahnarztbedarfsdatenbank in deine Übungsdatenbank. ({{ :faecher:informatik:oberstufe:datenbanken:nm_beziehungen:zahnarztbedarf_2nf.zip |}})+===== Beispiel ===== 
 + 
 + 
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:nm_beziehungen:erfilme.png |}} 
 + 
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:nm_beziehungen:tabellen.png?300 |}} 
 + 
 + 
 +Die Struktur der Beziehungstabelle sieht so aus: 
 + 
 +''schauspieler_film(__sfid__, sid↑ , fid↑)'' 
 + 
 +Das vollständige Schema sieht also so aus: 
 + 
 +''schauspieler_film(__sfid__, sid↑ , fid↑)''\\ 
 +''schauspieler(__sid__, SVorname, SNachname)''\\ 
 +''filme(__fid__, titel)'' 
 + 
 + 
 + 
 +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  
 + 
 +^ sfid  ^ sid  | fid  | 
 +| 1     | 4    | 2    | 
 +  
 + 
 +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    | 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A1) === 
 + 
 +Ergänze die Beziehungstabelle unter Verwendung entsprechenden Ressourcen. 
 + 
 + 
 +---- 
 + 
 +<WRAP center round box 90%> 
 +Importiere für die folgenden Übungen die Tabellen der normalisierte Zahnarztbedarfsdatenbank in deine Übungsdatenbank. ({{ :faecher:informatik:oberstufe:datenbanken:nm_beziehungen:zahnarztbedarf_2nf.zip |}}) 
 +</WRAP> 
 + 
 + 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A2) === 
 + 
 +Erstelle ein ER-Diagramm für die Datenbank. Überführe das ER Modell in ein relationales Datenbankschema. 
 + 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A3) === 
 + 
 +  - Gib ein SQL-Statement an, das alle Produkte der Firma  mit Hilfe des Filters ''WHERE hersteller.firma = 'Eisen Karl' '' auflistet((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 | 
 + 
 +<code sql> 
 +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" 
 +</code> 
 + 
 +++++ 
 + 
 +++++ Lösung 2 | 
 +<code sql> 
 +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" 
 +</code> 
 +++++ 
 + 
 +++++ Lösung 3 | 
 +<code sql> 
 +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" 
 +</code> 
 +++++ 
 + 
 +++++ Lösung 5 | 
 +<code sql> 
 +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 
 +</code> 
 +++++ 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (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 = "Eisen-Karl" 
 +</code> 
 + 
 +Was wird hier abgefragt? Experimentiere mit der WHERE Bedingung und mit den angezeigten Feldern.
  • faecher/informatik/oberstufe/datenbanken/nm_beziehungen/start.txt
  • Zuletzt geändert: 11.11.2022 11:47
  • von Frank Schiebel