faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

faecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:start [25.11.2020 19:59] – [Grundsatz: Eine Entität - eine Tabelle] sbelfaecher:informatik:oberstufe:datenbanken:normalisierung:2_normalform:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== 2. Normalform (2NF) ====== 
-<WRAP center important 90%> 
-Ein Relationstyp (Tabelle) befindet sich in der zweiten Normalform (2NF), wenn die erste Normalform erfüllt ist und für jeden Primärschlüssel eindeutige Attributwerte vorhanden sind. 
-</WRAP> 
  
-Die 2. Normalform entfernt Redundanzen: 
- 
-{{ :faecher:informatik:oberstufe:datenbanken:normalisierung:1_normalform:1nf.png |}} 
- 
-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 ==== 
- 
-Wenn man den **Grundsatz** -- den unser Sekretär mit seinem an die Tabellenkalkulation angelehnten Vorgehen bereits verletzt hat, den wir aber eigentlich kennen -- befolgt: **Jede Entität bekommt ihre eigene Relation, die Attribute sind die Tabellenspalten**((Erinnerung: Relation ist nur ein anderer Name für Tabelle...)) und die Attribute entsprechend der Miniwelt atomar wählt erhält man relativ direkt die 2NF. 
- 
-Hier sieht man nochmal, dass die **Normalisierung beim Design der Datenbank stattfinden sollte**, nicht wie wir das hier machen, nachdem man bereits ein schlechtes Design implementiert hat. 
- 
----- 
-{{:aufgabe.png?nolink  |}} 
-=== (A1) === 
- 
-  * Überführe die Inhalte der "Universaltabelle" in der 1NF in drei Tabellen: ''doktoren'', ''hersteller'', ''produkte''. Verteile die Attribute auf die Tabellen der Entitäten. Gehe wie folgt vor: 
-     - 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? 
-     - 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. 
-  * 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. 
- 
- 
-++++ 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             | 
- 
-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> 
-++++ 
  • faecher/informatik/oberstufe/datenbanken/normalisierung/2_normalform/start.1606330796.txt.gz
  • Zuletzt geändert: 25.11.2020 19:59
  • von sbel