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:49] – 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 106: | Zeile 104: | ||
Nun haben wir alles zusammen: | Nun haben wir alles zusammen: | ||
<code sql > | <code sql > | ||
- | UPDATE zahnarztbedarf | + | UPDATE zahnarztbedarf SET firma = SUBSTRING_INDEX(hersteller, |
- | t1.firma = (SELECT | + | UPDATE zahnarztbedarf SET f_strasse = SUBSTRING_INDEX(SUBSTRING_INDEX(hersteller, |
- | t1.f_strasse = (SELECT | + | UPDATE |
- | t1.temp = (SELECT | + | UPDATE |
- | WHERE t1.firma | + | UPDATE zahnarztbedarf SET f_ort = SUBSTRING_INDEX(TRIM(ort), |
</ | </ | ||
- | Jetzt noch analog zu oben PLZ und Ort aufteilen, TRIM nicht vergessen: | + | Jetzt kann man '' |
- | + | ||
- | <code sql> | + | |
- | UPDATE zahnarztbedarf t1 SET | + | |
- | t1.f_ort = (SELECT SUBSTRING_INDEX(TRIM(temp), | + | |
- | t1.f_plz = (SELECT SUBSTRING_INDEX(TRIM(temp), | + | |
- | WHERE t1.f_plz = '' | + | |
- | </ | + | |
- | + | ||
- | Jetzt kann man '' | + | |
++++ | ++++ | ||
Zeile 129: | Zeile 118: | ||
{{ : | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <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 '' | ||
+ | </ | ||
+ | |||