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:1_normalform:start [25.11.2020 17:40] – sbel | faecher:informatik:oberstufe:datenbanken:normalisierung:1_normalform:start [08.02.2024 07:45] (aktuell) – alte Version wiederhergestellt (08.02.2024 08:40) Frank Schiebel | ||
---|---|---|---|
Zeile 27: | Zeile 27: | ||
</ | </ | ||
- | Mit Hilfe von Subquerys | + | Jetzt kann man die am Komma aufgesplitteten Werte in die neuen Felder übertragen: |
<code sql> | <code sql> | ||
- | UPDATE zahnarztbedarf | + | UPDATE zahnarztbedarf SET name = SUBSTRING_INDEX(doktor, |
- | t1.vorname | + | UPDATE |
- | t1.name = (SELECT | + | |
- | WHERE t1.name='' | + | |
</ | </ | ||
- | |||
- | Subquerys sind die in Klammern gesetzten SQL Abfragen, mit denen die Werte ermittelt werden, die für '' | ||
Deine Tabelle sollte jetzt so aussehen: | Deine Tabelle sollte jetzt so aussehen: | ||
Zeile 50: | Zeile 46: | ||
++++ Lösung | | ++++ Lösung | | ||
<code sql> | <code sql> | ||
- | UPDATE zahnarztbedarf | + | UPDATE zahnarztbedarf SET telefon |
- | t1.fax | + | UPDATE |
- | t1.telefon = (SELECT | + | |
- | WHERE t1.fax='' | + | |
</ | </ | ||
++++ | ++++ | ||
---- | ---- | ||
- | **(iii)** Zerlege das Feld '' | + | **(iii)** Zerlege das Feld '' |
- | Überführe dann den Inhalt des temporären | + | Überführe dann den Inhalt des Felds '' |
- | <wrap hi> | + | <wrap hi> |
++++ Lösung Schritt 1 | | ++++ Lösung Schritt 1 | | ||
<code sql> | <code sql> | ||
- | UPDATE zahnarztbedarf | + | UPDATE zahnarztbedarf SET strasse |
- | t1.plzwo | + | UPDATE |
- | t1.strasse = (SELECT | + | |
- | WHERE t1.plzwo = '' | + | |
</ | </ | ||
++++ | ++++ | ||
++++ Lösung Schritt 2 | | ++++ Lösung Schritt 2 | | ||
+ | <wrap hi> | ||
<code sql> | <code sql> | ||
- | UPDATE zahnarztbedarf | + | UPDATE zahnarztbedarf SET plz = SUBSTRING_INDEX(TRIM(wohnort), ' ', 1) |
- | t1.wohnort | + | UPDATE |
- | t1.plz = (SELECT | + | |
- | WHERE t1.plz = '' | + | |
</ | </ | ||
+ | ++++ | ||
+ | |||
+ | ++++ In einem (komplizierteren) Schritt | | ||
+ | Man kann das auch direkt machen, indem man die folgende Anweisung entsprechend für alle 4 Informationen anpasst: | ||
+ | <code sql> | ||
+ | UPDATE zahnarztbedarf SET ort=SUBSTRING_INDEX(TRIM(SUBSTRING_INDEX(adresse, | ||
+ | </ | ||
++++ | ++++ | ||
---- | ---- | ||
- | **(iv)** Jetzt wirds langweilig... Nun muss man das ganze nochmal für das wilde Durcheinander im Feld Hersteller wiederholen - das ist freiwillig und birgt keine neuen Erkenntnisse mehr, du kannst also auch gleich die Lösung bemühen oder das Ergebnis herunterladen. | + | **(iv)** Jetzt wirds langweilig... Nun muss man das ganze nochmal für das wilde Durcheinander im Feld Hersteller wiederholen - das ist freiwillig und birgt keine wesentlichen |
++++ Lösung | | ++++ Lösung | | ||
- | 4 neue Tabellenfelder | + | 4 neue Tabellenfelder: |
<code sql> | <code sql> | ||
Zeile 97: | Zeile 95: | ||
</ | </ | ||
- | Problem. Wie bekommt man das mittlere Feld raus? | + | Problem. Wie bekommt man das mittlere Feld raus? Probiere mal folgendes aus: |
<code sql > | <code sql > | ||
Zeile 104: | Zeile 102: | ||
</ | </ | ||
+ | Nun haben wir alles zusammen: | ||
+ | <code sql > | ||
+ | UPDATE zahnarztbedarf SET firma = SUBSTRING_INDEX(hersteller, | ||
+ | UPDATE zahnarztbedarf SET f_strasse = SUBSTRING_INDEX(SUBSTRING_INDEX(hersteller, | ||
+ | UPDATE zahnarztbedarf SET f_ort = SUBSTRING_INDEX(hersteller, | ||
+ | UPDATE zahnarztbedarf SET f_plz = SUBSTRING_INDEX(TRIM(ort), | ||
+ | UPDATE zahnarztbedarf SET f_ort = SUBSTRING_INDEX(TRIM(ort), | ||
+ | </ | ||
+ | |||
+ | Jetzt kann man '' | ||
++++ | ++++ | ||
+ | |||
+ | ==== Ergebnis: Die Universaltabelle in der 1NF ==== | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <WRAP center info 90%> | ||
+ | An diesen Übungen kann man gut erkennen, wie wichtig es ist, bereits beim **Datenbankdesign** an die Normalisierung zu denken - man will sich gar nicht vorstellen, was man für Knoten ins Hirn bekommt, wenn man das hier gezeigte mit einer großen, schlecht designten Datenbank machen muss. | ||
+ | |||
+ | Ausserdem kann man an den Beispielen mit '' | ||
+ | </ | ||
+ | |||
+ | |||
+ |