Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:start [25.11.2020 17:59] – [Grundsatz: Eine Entität - eine Tabelle] sbel | faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:start [04.12.2024 11:39] (aktuell) – Marco Kuemmel | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
</ | </ | ||
+ | Die 2. Normalform entfernt Redundanzen: | ||
+ | {{ : | ||
+ | |||
+ | In der Tabelle in der 1NF tauchen zahlreiche Attributwerte mehrfach auf, z.B. Die Namen der Doktoren oder Hersteller. | ||
==== Grundsatz: Eine Entität - eine Tabelle ==== | ==== Grundsatz: Eine Entität - eine Tabelle ==== | ||
Zeile 16: | Zeile 20: | ||
* Überführe die Inhalte der " | * Überführe die Inhalte der " | ||
- | - Lege die drei Tabellen mit den entsprechenden Attributen an, lege jeweils auch einen Surrogatschlüssel '' | + | - Lege die drei Tabellen mit den entsprechenden Attributen an, jedoch zunächst ohne Surrogatschlüssel |
- | - Überführe die Inhalte aus der Universaltabelle in die jeweilige Tabelle, indem du das Ergebnis einer Abfrage direkt an eine INSERT INTO Statement weitergibst: | + | - Überführe die Inhalte aus der Universaltabelle in die jeweilige Tabelle, indem du das Ergebnis einer Abfrage direkt an eine INSERT INTO Statement weitergibst: |
+ | - Wenn alle Werte überführt sind, fügst | ||
* 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 | + | * Fügen nun den Datensatz für Frau Bohrgut aus den [[ faecher: |
+ | |||
+ | |||
+ | ++++ Lösungshinweise Tabellenstrukturen: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++ 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` | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++ Ergebnis: | | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (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, | ||
+ | |||
+ | Erstelle eine Tabelle '' | ||
+ | |||
+ | Nun schauen wir in unserer Universaltabelle nach den Bestellungen: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die dritte Zeile sagt uns, dass Viktoria Einsenfaust drei Kneifzangen | ||
+ | |||
+ | 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 | | ||
+ | < | ||
+ | | id | anzahl | produkt_id | doktor_id | hersteller_id | | ||
+ | | 2 | 2 | 4 | 1 | 3 | | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | **(ii)** Komplettiere die Bestellungstabelle in deiner Übungsdatenbank und führe dann die folgende Abfrage aus: | ||
+ | |||
+ | <code sql> | ||
+ | SELECT * FROM hersteller, | ||
+ | WHERE bestellungen.produkt_id = produkte.id | ||
+ | AND bestellungen.doktor_id = doktoren.id | ||
+ | AND bestellungen.hersteller_id = hersteller.id | ||
+ | </ | ||
+ | |||
+ | Erläutere, was bei dieser Abfrage passiert und interpretiere das Ergebnis. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | <WRAP center | ||
+ | Nun befinden sich alle Relationen unserer Datenbank in der 2. Normalform((In unserem speziellen Fall sogar zufällig bereits in der 3.)). | ||
+ | </ | ||
+ | |||
+ | Die normalisierte Datenbank: {{ : | ||