faecher:informatik:oberstufe:datenbanken:nm_beziehungen:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:nm_beziehungen:start [25.11.2020 20:33] sbelfaecher:informatik:oberstufe:datenbanken:nm_beziehungen:start [11.11.2022 11:47] (aktuell) Frank Schiebel
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**. 
 + 
 +===== 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: 
 + 
 +^ sfid  ^ sid  | fid  | 
 +| 1     | 4    | 2    | 
 +| 2     | 6    | 1    | 
 ---- ----
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
 === (A1) === === (A1) ===
  
-Teste das folgende SQL Statement:+Ergänze die Beziehungstabelle unter Verwendung entsprechenden Ressourcen. 
 + 
 + 
 +---- 
 + 
 +<WRAP center round box 90%> 
 +Importiere für die folgenden Übungen die Tabellen der normalisierten 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> <code sql>
-SELECT DISTINCT produkt, firma FROM produkte p +SELECT FROM hersteller,doktoren, produkte, bestellungen  
-INNER JOIN bestellungen b ON p.id=b.produkt_id +WHERE bestellungen.produkt_id produkte.id 
-INNER JOIN hersteller h ON h.id=b.hersteller_id +AND bestellungen.doktor_id doktoren.id 
-WHERE h.firma = "Eisen-Karl"+AND bestellungen.hersteller_id = hersteller.id 
 +AND hersteller.firma = "Eisen-Karl"
 </code> </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  |}} {{:aufgabe.png?nolink  |}}
-=== (A1) ===+=== (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>
  
-  * Importiere die Tabellen der normalisierte Zahnarztbedarfsdatenbank in deine Übungsdatenbank. ({{ :faecher:informatik:oberstufe:datenbanken:nm_beziehungen:zahnarztbedarf_2nf.zip |}}) +Was wird hier abgefragt? Experimentiere mit der WHERE Bedingung und mit den angezeigten Feldern.
-  * Erstelle ein ER-Diagramm für die Datenbank +
-  * Gib ein SQL-Statement an, das alle Produkte der Firma Eisen-Karl mit Hilfe des Filters ''WHERE hersteller.firma = 'Eisen Karl' '' auflistet. +
-  * Gib ein SQL-Statement an, das alle Bestellungen von Viktoria auflistet. +
-  * Gib ein SQL-Statement an, das den Rechungsbetrag von Dr. Blutgesicht ausgibt.+
  • faecher/informatik/oberstufe/datenbanken/nm_beziehungen/start.txt
  • Zuletzt geändert: 11.11.2022 11:47
  • von Frank Schiebel