faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform: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:normalisierung:2_normalform:start [25.11.2020 18:17] – [Grundsatz: Eine Entität - eine Tabelle] sbelfaecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:start [04.12.2024 11:39] (aktuell) Marco Kuemmel
Zeile 22: Zeile 22:
      - Lege die drei Tabellen mit den entsprechenden Attributen an, jedoch zunächst ohne Surrogatschlüssel (keine ''id'' Spalte!      - Lege die drei Tabellen mit den entsprechenden Attributen an, jedoch zunächst ohne Surrogatschlüssel (keine ''id'' Spalte!
      - Überführe die Inhalte aus der Universaltabelle in die jeweilige Tabelle, indem du das Ergebnis einer Abfrage direkt an eine INSERT INTO Statement weitergibst: ''INSERT INTO doktoren SELECT DISTINCT name, vorname, strasse, plz, wohnort, telefon, fax FROM `zahnarztbedarf`''. Du musst auf die Reihenfolge der Attribute bei der Abfrage achten, damit die Werte in die richtigen Felder eingefügt werden. Warum benötigt man das Schlüsselwort ''DISTINCT'' bei der Abfrage?      - Überführe die Inhalte aus der Universaltabelle in die jeweilige Tabelle, indem du das Ergebnis einer Abfrage direkt an eine INSERT INTO Statement weitergibst: ''INSERT INTO doktoren SELECT DISTINCT name, vorname, strasse, plz, wohnort, telefon, fax FROM `zahnarztbedarf`''. Du musst auf die Reihenfolge der Attribute bei der Abfrage achten, damit die Werte in die richtigen Felder eingefügt werden. Warum benötigt man das Schlüsselwort ''DISTINCT'' bei der Abfrage?
 +     - Wenn alle Werte überführt sind, fügst du jeder Tabelle noch eine Feld ''id'' als Surrogatschlüssel hinzu (Primary-Key, Auto-Increment).
   * Zwei Tabellenspalten der Universaltabelle können den Entitätstabellen nicht sinnvoll zugeordet werden - bei einer geht keine wesentliche Information verloren, wenn man sie weglässt, bei der anderen schon. Welche Attribute sind das? Lasse beide Attribute vorerst einfach aus - wir kommen später darauf zurück.   * Zwei Tabellenspalten der Universaltabelle können den Entitätstabellen nicht sinnvoll zugeordet werden - bei einer geht keine wesentliche Information verloren, wenn man sie weglässt, bei der anderen schon. Welche Attribute sind das? Lasse beide Attribute vorerst einfach aus - wir kommen später darauf zurück.
-  * Fügen nun den Datensatz für Frau Bohrgut ein aus den [[ faecher:informatik:oberstufe:datenbanken:normalisierung:vorueberlegungen:start |Vorüberlegungen]] ein - du siehst, nun ist ganz klar, welche Informationen in welche Tabelle eingefügt werden müssen.+  * Fügen nun den Datensatz für Frau Bohrgut aus den [[ faecher:informatik:oberstufe:datenbanken:normalisierung:vorueberlegungen:start |Vorüberlegungen]] ein - du siehst, nun ist ganz klar, welche Informationen in welche Tabelle eingefügt werden müssen. 
 + 
 + 
 +++++ Lösungshinweise Tabellenstrukturen:
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:struktur.png |}} 
 + 
 +++++ 
 + 
 +++++ SQL Befehle: | 
 + 
 +<code sql> 
 +INSERT INTO doktoren  
 +SELECT DISTINCT name, vorname, strasse, plz, wohnort, telefon, fax  
 +FROM `zahnarztbedarf` 
 + 
 +INSERT INTO hersteller  
 +SELECT DISTINCT firma, f_strasse, f_ort, f_plz  
 +FROM `zahnarztbedarf` 
 + 
 +INSERT INTO produkte  
 +SELECT DISTINCT produkt, preis, nummer  
 +FROM `zahnarztbedarf` 
 +</code> 
 + 
 +++++ 
 + 
 +++++ Ergebnis: | 
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:2nf.png |}} 
 + 
 +++++ 
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A2) === 
 + 
 +Was bei der Normalisierung nun dummerweise verloren gegangen ist, ist die Zuordnung der Bestellungen zu unseren Kunden, den Doktoren - deswegen hatte der Sekretär die Tabelle ja mal angelegt. Auch die Verbindung zwischen Herstellern und Prodkukten sucht man in den einzelnen Tabellen vergeblich?
 + 
 +Um die Verknüpfung zwischen den Entitäten nun wieder herzustellen, wird eine weitere Tabelle angelegt, die lediglich die Verknüpfung zwischen den anderen Entitäten herstellt. 
 + 
 +Erstelle eine Tabelle ''bestellungen'' mit den Feldern ''id'' (Primary-Key, Auto-Increment), ''produkt_id'', ''doktor_id'', ''hersteller_id'' und ''anzahl''
 + 
 +Nun schauen wir in unserer Universaltabelle nach den Bestellungen: 
 + 
 +{{ :faecher:informatik:oberstufe:datenbanken:normalisierung:vorueberlegungen:ausgangslage_normalisierung.png? }} 
 + 
 +Die dritte Zeile sagt uns, dass Viktoria Einsenfaust drei Kneifzangen  bestellt hat. 
 + 
 +Um das in unserer bestellungen-Tabelle abzubilden, müssen wir folgendes eintragen: 
 + 
 +   | id | anzahl | produkt_id | doktor_id | hersteller_id | 
 +   | 1  | 3      | 3          | 3         | 3             | 
 + 
 +**(i)** Was muss man für die Bestellung in der letzten Zeile der Universaltabelle eintragen? 
 + 
 +++++ Lösung | 
 +<code> 
 +| id | anzahl | produkt_id | doktor_id | hersteller_id | 
 +| 2  | 2      | 4          | 1         | 3             | 
 +</code> 
 +++++ 
 + 
 +**(ii)** Komplettiere die Bestellungstabelle in deiner Übungsdatenbank und führe dann die folgende Abfrage aus: 
 + 
 +<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 
 +</code> 
 + 
 +Erläutere, was bei dieser Abfrage passiert und interpretiere das Ergebnis. 
 + 
 + 
 +----  
 +<WRAP center  info 90%> 
 +Nun befinden sich alle Relationen unserer Datenbank in der 2. Normalform((In unserem speziellen Fall sogar zufällig bereits in der 3.)).  
 +</WRAP> 
 + 
 +Die normalisierte Datenbank: {{ :faecher:informatik:oberstufe:datenbanken:nm_beziehungen:zahnarztbedarf_2nf.zip |}} 
  
  • faecher/informatik/oberstufe/datenbanken/normalisierung/2_normalform/start.1606328260.txt.gz
  • Zuletzt geändert: 25.11.2020 18:17
  • von sbel