{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# Normalisierung: Aufgaben (Lösungen)\n", "\n", "In diesem Tutorium behandeln wir das Thema Normalisierung." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 1: Hülle, Armstrong-Axiome, Schlüssel, Basis\n", "Es sind folgende funktionale Abhängigkeiten für die Relation `R(A,B,C,D,E,F,G)` gegeben.\n", "\n", "+ A → B\n", "+ B → D\n", "+ {B, D} → C\n", "+ F → E,F\n", "+ {A, F} → G\n", "+ G → A,B,C,D,E,F\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.1: Hülle\n", "Geben Sie die Hülle {A}+ an." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "Der Algorithmus ist auf Folie 16/17 der Vorlseung 4 zu finden.\n", "1. {A}+ = {A}\n", " + A → B\n", "2. {A}+ = {A,B}\n", " + B → D\n", "3. {A}+ = {A,B,D}\n", " + {B,D} → C\n", "4. {A}+ = {A,B,C,D}\n", "5. Es gibt keine funktinalen Abhängigkeiten, die auf der linken Seite Attribute der Menge {A}+ besitzen und Attribute funktional bestimmen, die noch nicht in der Menge {A}+ vorkommen. Somit ist {A}+ Final.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.2: Hülle\n", "Welche der folgenden funktionalen Abhängigkeiten können abgeleitet werden?\n", " + A → C\n", " + A → E" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ A → C, da C in der Hülle vorkommt.\n", "+ A → E nicht, da E nicht in der Hülle vorkommt.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.3: Armstrong-Axiome\n", "Leite aus den gegebenen funktionalen Abhängigkeiten weitere funktionale Abhängigkeiten mit Hilfe der Armstrong-Axiome ab." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ Aus B → D und {B, D} → C kann B → C abgeleitet werden und somit auch B → C, D (Transitivität).\n", "+ Aus B → C, D und A → B kann A → C, D abgeleitet werden und somit auch A → B, C, D (Transitivität und Vereinigung).\n", "+ Aus {A, F} → G und G → A, B, C, D, E, F kann {A, F} → A, B, C, D, E, F abgeleitet werden und somit auch {A, F} → A, B, C, D, E, F, G (Vereinigung).\n", "+ (Es gibt noch viel mehr Kombinationen, aber das sind die wichtigsten für die nächste Aufgabe)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.4: Schlüssel\n", "+ Geben Sie 3 **Superschlüssel** für die Relation an.\n", "\n", "+ Geben Sie alle **Schlüsselkandidaten** an. Welche Beziehung besteht zwischen den Schlüsselkandidaten und den Superschlüsseln?\n", "\n", "+ Welcher der Schlüsselkandidaten eignet sich als **Primärschlüssel**?" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ Alle Attribut-Mengen, in denen G oder {A, F} vorkommen, sind Superschlüssel.\n", "+ Nur die Attribut-Mengen {G} und {A, F} sind Schlüsselkandidaten, da sie die minimalen Superschlüssel sind.\n", "+ Beide sind geeignet, jedoch kann G präferiert werden, da diese Menge nur aus einem Attribut besteht.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.5: Basis\n", "Geben Sie eine minimale Basis an." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "Mögliche Lösung mittels Algorithmus:\n", "+ Start mit allen gegebenen funktionalen Abhängigkeiten: {A → B; B → D; {B, D} → C; F → E, F; {A, F} → G; G → A, B, C, D, E, F}\n", "+ alle trivialen funktionalen Abhängigkeiten löschen:\n", " + F → F wird eliminiert.\n", " + {A → B; B → D; {B, D} → C; F → E; {A, F} → G; G → A, B, C, D, E, F}\n", "+ wiederholtes Vereinigungs-Axiom, Vereinfachung rechter/linke Seite anwenden\n", "+ Vereinigungs-Axiom anwenden:\n", " + es ändert sich nichts, keine 2 gleiche linke Seiten.\n", " + Ergebnis: {A → B; B → D; {B, D} → C; F → E; {A, F} → G; G → A, B, C, D, E, F}\n", "+ rechte Seite vereinfachen:\n", " + G → A, B, C, D, E, F ist die einzige funktionale Abhängigkeit, wo die rechte Seite vereinfacht werden kann.\n", " + G → A wird benötigt.\n", " + G → B wird nicht benötigt, da G → A und A → B zusammen G → B ergeben.\n", " + Analoge Anwendung für die restlichen funktionalen Abhängigkeiten G → ...\n", " + Ergebnis nach Vereinfachung: {A → B; B → D; {B, D} → C; F → E; {A, F} → G; G → A, F}\n", "+ linke Seite vereinfachen:\n", " + {B, D} → C hat 2 Attribute auf der linken Seite und es gilt B → D, somit kann {B, D} → C vereinfacht werden zu B → C.\n", " + {A, F} → G kann nicht vereinfacht werden, da weder A → F noch F → A gegeben ist noch abgeleitet werden kann\n", " + Ergebnis: {A → B; B → C, D; F → E; {A, F} → G; G → A, F }\n", "+ Es kann nichts mehr vereinfacht und/oder vereinigt werden, somit haben wir eine minimale Basis:\n", " + {A → B ; B → C,D ; F → E ; G → A,F ; {A,F} → G }\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 2: Funktionale Abhängigkeiten verletzen\n", "\n", "Gegeben sei das Relationenschema S(W, X, Y), wobei alle Attribute atomar und vom Typ CHAR sind." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 2.1\n", "\n", "Betrachten Sie folgende funktionale Abhängigkeiten: W → X und {X, Y} → W. Geben Sie eine möglichst kleine Instanz der Relation S an, die beide funktionale Abhängigkeiten gleichzeitig **verletzt**." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung 2.1\n", "\n", "|W|X|Y|\n", "|-|-|-|\n", "|a|x|y|\n", "|a|y|z|\n", "|b|x|y|\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 2.2\n", "\n", "Zeigen Sie mit einer möglichst kleinen Instanz der Relation S, dass die folgende Regel nicht gilt: wenn {W, X} → Y, dann W → Y oder X → Y." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung 2.2\n", "\n", "|W|X|Y|\n", "|-|-|-|\n", "|a|b|c|\n", "|a|e|d|\n", "|b|b|e|\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 3: Verlustfrei, Abhängigkeitstreu" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "Gegeben sei die folgende Relation:\n", "Beamter (PersonalKennziffer, Tel-Nr., Name)\n", "\n", "Dabei gelten die folgenden funktionalen Abhängigkeiten:\n", "+ PersonalKennziffer → Tel-Nr.\n", "+ PersonalKennziffer → Name\n", "+ Tel-Nr. → Name\n", "\n", "Die Relation soll nun normalisiert werden. Der Datenbank-Designer denkt dabei über verschiedene Alternativen der Zerlegung nach:\n", "\n", "\n", "+ a) Erreichbar(PersonalKennziffer, Tel-Nr.) und Beamter(PersonalKennziffer, Name)\n", "+ b) Erreichbar(PersonalKennziffer, Tel-Nr.) und Beamter(Tel-Nr., Name)\n", "+ c) Erreichbar(PersonalKennziffer, Name) und Beamter(Tel-Nr., Name)\n", "\n", "\n", "Begründen Sie, in welcher Normalform die Ausgangsrelation und die Relationen in a) bis c) jeweils stehen. Welche der gezeigten Zerlegungsalternativen würden Sie wählen und warum? Gehen Sie bei der Begründung insbesondere auf Eigenschaften der Zerlegung ein: Verlustfreiheit und Abhängigkeitserhaltung." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung 3. Verlustfrei, Abhängigkeitstreu\n", "\n", "| Name | NF | Begründung |\n", "|-------------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------|\n", "| Ausgangsrelation | 2. NF | Dritte NF wird verletzt durch Tel-Nr. → Name |\n", "| a) | BCNF | Verlustfrei, aber nicht abhängigkeitstreu, da Tel-Nr. → Name verloren geht. |\n", "| b) | BCNF | Verlustfrei und Abhängigkeitstreu |\n", "| c) | BCNF | Nicht verlustfrei, denn bei Join auf Name lassen sich Tupel generieren, die es vorher nicht gab. Auch nicht Abhängigkeitstreu, da es nicht mehr PersonalKennziffer → Tel-Nr. gibt. |\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 4: Normalisierung\n", "\n", "Gegeben sind die Relationen:\n", "+ R1 (A, B, C, D, E)\n", "+ R2 (A, C, F)\n", "\n", "Und die funktionalen Abhängigkeiten:\n", "+ A → B, E\n", "+ A → D\n", "+ F → A\n", "+ {A, C} → F\n", "+ {B, C} → E\n", "+ C → A" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 4.1\n", "Bestimmen Sie alle Schlüsselkandidaten." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung Aufgabe 4.1\n", "\n", "+ Da C nie auf der rechten Seite einer funktionalen Abhängigkeit vorkommt, muss jeder Schlüssel C enthalten. Nach Bestimmung der Hülle von {C}+ = {CABDEF} und C minimal ist, ist C der einzige Schlüsselkandidat.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 4.2\n", "In welcher Normalform befinden sich die Relationen? Begründen Sie Ihre Antwort." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung Aufgabe 4.2\n", "\n", "+ R1 und R2 befinden sich in der 1. Normalform, da alle Attribute atomar sind.\n", "+ R1 und R2 befinden sich auch automatisch in 2. NF, da der Schlüsselkandidat nur aus einem Attribut besteht.\n", "+ R1 und R2 befinden sich nicht in 3. NF. Transitive Abhängigkeit, da R1: C → A und A → BE. Transitive Abhängigkeit bei R2: C → F und F → A.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 4.3\n", "Überführen Sie die Relationen in die dritte Normalform und geben Sie die Schlüsselkandidaten an." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung Aufgabe 4.3\n", "\n", "+ `R1`: Da eine transitive Abhängigkeit besteht, müssen die verletzenden funktionalen Abhängigkeiten `A → D` und `A → B, E` in eine eigene Relation `R1a (A, B, E, D)`. Schlüsselkandidat dafür ist A.\n", "+ `R2`: Da eine transitive Abhängigkeit besteht, muss die verletzende funktionale Abhängigkeit `F → A` in eine eigene Relation `R2a (F, A)`. Schlüsselkandidat dafür ist F.\n", "\n", "- R1 (C, A)\n", "- R1a (A, B, D, E)\n", "- R2 (C, F)\n", "- R2a (F, A)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 4.4\n", "Sind die resultierenden Relationen in BCNF? Ist dies nicht der Fall, überführen Sie sie in BCNF." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung Aufgabe 4.4\n", "\n", "Die BCNF ist nicht verletzt, da alle Relationen bereits nur aus zwei Attributen bestehen oder (im Falle von `R1a`) nur aus einer FD bestehen (`A → B, D, E`).\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 5: Schlüssel und Normalformen\n", "\n", "Gegeben sei die Relation S(B, C, D, E) mit den atomaren Attributen B, C, D und E. Es gelten folgende und nur folgende funktionale Abhängigkeiten:\n", "\n", "+ {B, C} → D\n", "+ D → B\n", "+ D → E\n", "\n", "\n", "Überprüfen und begründen Sie die folgenden Aussagen:\n", "\n", "1. D ist der Primärschlüssel für diese Relation.\n", "2. {B, C} ist ein Schlüsselkandidat (für einen Primärschlüssel!).\n", "3. D ist ein Fremdschlüssel, weil er auf B verweist.\n", "4. S ist in der 1. NF (1. Normalform)\n", "5. Welche Abhängigkeiten müssten gelten (ein Beispiel!), wenn diese Relation nicht der 2. NF genügen soll.\n", "6. Die Relation S befindet sich in der 3. NF.\n", "7. S genügt der BCNF.\n", "8. Überführen Sie die Relation S in die BCNF." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung Aufgabe 5\n", "\n", "1. Nein, der Primärschlüssel ist {B, C}, da D nicht C bestimmt.\n", "2. Ja!\n", "3. Nein, es sind funktionale Abhängigkeiten angegeben.\n", "4. Ja, da alle Attribute atomar sind.\n", "5. z.B. {C, D} → E, damit eine partielle Abhängigkeit existiert.\n", "6. Nein. (Die Transitivität D → E ist verletzt)\n", "7. Nein. Da S sich sogar nicht in der 3. Normalform befindet, ist BCNF unmöglich.\n", "8. Zerlegung:\n", " + 1NF: S(B, C, D, E)\n", " + 2NF: S(B, C, D, E)\n", " + 3NF: S1(B, C, D) S3(D, E)\n", " + BCNF: S1(D, C), S2(D, B), S3(D, E)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 6: Anomalien\n", "\n", "\n", "Gegeben sei folgende Tabelle:\n", "\n", "| MatNo | Name | BirthDate | IName | IProfessor | IVehicle | IVSize | CName | CStreet | CZipCode |\n", "| ------ | ----------------- | ---------- | -------- | ----------------- | ------------ | ------- | -------- | ------------- | -------- |\n", "| 368251 | Peter Smith | 25.04.1993 | Phys | Werner Heisenberg | Electron | 2.8E-15 | Berlin | Hertzallee | 10623 |\n", "| 105472 | Margaret Hamilton | 17.08.1936 | Orbit | Walter Hohmann | Ariane VI | 63 | Houston | Avenue East | TX 77058 |\n", "| 105472 | Margaret Hamilton | 17.08.1936 | Phys | Werner Heisenberg | Electron | 2.8E-15 | Houston | Avenue East | TX 77058 |\n", "| 105472 | Margaret Hamilton | 17.08.1936 | ILR | Wernher von Braun | Ariane VI | 63 | Houston | Avenue East | TX 77058 |\n", "| 65821 | Hedy Lamarr | 09.11.1914 | HighFreq | Guglielmo Marconi | Electron | 2.8E-15 | New York | Avenue East | NY 10019 |\n", "| 65821 | Hedy Lamarr | 09.11.1914 | Math | Etienne Emmrich | Bezier-Curve | 0 | New York | Avenue East | NY 10019 |\n", "| 254798 | Markus Kavka | 27.06.1967 | ModLit | Günter Grass | tin drum | 0,15 | Munich | Gollierstraße | 80807 |\n", "| 168410 | Gene Cernan | 14.03.1934 | Orbit | Walter Hohmann | Ariane VI | 63 | KSC | Titan Road | FL 32899 |\n", "| 168410 | Gene Cernan | 14.03.1934 | ILR | Wernher von Braun | Ariane VI | 63 | KSC | Titan Road | FL 32899 |\n", "| 215439 | Margaret Hamilton | 25.04.1941 | ModLit | Günter Grass | tin drum | 0,15 | Berlin | Berlin | 28759 |\n", "| 179547 | Katherine Johnson | 26.08.1918 | Orbit | Walter Hohmann | Ariane VI | 63 | Houston | Titan Road | TX 77058 |\n", "| 179547 | Katherine Johnson | 26.08.1918 | Math | Etienne Emmrich | Bezier-Curve | 0 | Houston | Titan Road | TX 77058 |\n", "| 179547 | Katherine Johnson | 26.08.1918 | Phys | Werner Heisenberg | Electron | 2.8E-15 | Houston | Titan Road | TX 77058 |\n", "| 345871 | Linh | 25.04.1993 | DIMA | Volker Markl | bicycle | 2 | Berlin | Einsteinufer | 10623 |\n", "\n", "Zeige anhand verschiedener auch selbstgewählter Tupel, wie Einfüge-, Update- oder Löschanomalien auftreten können. Begründe deine Entscheidung!" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung Aufgabe 6\n", "\n", "\n", "| Anomalien | MatNo | Name | BirthDate | IName | IProfessor | IVehicle | IVSize | CName | CStreet | CZipCode |\n", "| ---- | ------ | ----------------- | ---------- | -------- | ----------------- | ------------ | ------- | -------- | ------------- | -------- |\n", "| U | 368251 | Peter Smith | 25.04.1993 | Phys | Werner Heisenberg | Electron | 2.8E-15 | Berlin | Hertzallee | 10623 |\n", "| U | 105472 | Margaret Hamilton | 17.08.1936 | Orbit | Walter Hohmann | Ariane VI | 63 | Houston | Avenue East | TX 77058 |\n", "| U | 105472 | Margaret Hamilton | 17.08.1936 | Phys | Werner Heisenberg | Electron | 2.8E-15 | Houston | Avenue East | TX 77058 |\n", "| U | 105472 | Margaret Hamilton | 17.08.1936 | ILR | Wernher von Braun | Ariane VI | 63 | Houston | Avenue East | TX 77058 |\n", "| D |65821 | Hedy Lamarr | 09.11.1914 | HighFreq | Guglielmo Marconi | Electron | 2.8E-15 | New York | Avenue East | NY 10019 |\n", "| U | 65821 | Hedy Lamarr | 09.11.1914 | Math | Etienne Emmrich | Bezier-Curve | 0 | New York | Avenue East | NY 10019 |\n", "| U | 254798 | Markus Kavka | 27.06.1967 | ModLit | Günter Grass | tin drum | 0,15 | Munich | Gollierstraße | 80807 |\n", "| U | 168410 | Gene Cernan | 14.03.1934 | Orbit | Walter Hohmann | Ariane VI | 63 | KSC | Titan Road | FL 32899 |\n", "| U | 168410 | Gene Cernan | 14.03.1934 | ILR | Wernher von Braun | Ariane VI | 63 | KSC | Titan Road | FL 32899 |\n", "| U | 215439 | Margaret Hamilton | 25.04.1941 | ModLit | Günter Grass | tin drum | 0,15 | Berlin | Berlin | 28759 |\n", "| U | 179547 | Katherine Johnson | 26.08.1918 | Orbit | Walter Hohmann | Ariane VI | 63 | Houston | Titan Road | TX 77058 |\n", "| U | 179547 | Katherine Johnson | 26.08.1918 | Math | Etienne Emmrich | Bezier-Curve | 0 | Houston | Titan Road | TX 77058 |\n", "| U | 179547 | Katherine Johnson | 26.08.1918 | Phys | Werner Heisenberg | Electron | 2.8E-15 | Houston | Titan Road | TX 77058 |\n", "| D | 345871 | Linh | 25.04.1993 | DIMA | Volker Markl | bicycle | 2 | Berlin | Einsteinufer | 10623 |\n", "\n", "\n", "+ UPDATE-Anomalien (U)\n", " + z.B. falls Werner Heisenberg sein Vehicle ändert, muss man dies an mehreren Stellen ändern.\n", "+ DELETE-Anomalien (D)\n", " + beim Löschen gehen mehr Informationen verloren als gewünscht.\n", " + z.B. falls Volker Markl gelöscht werden würde, gingen auch die Informationen über Linh verloren.\n", "+ INSERT-Anomalien (I):\n", " + neues Tupel erzeugt Ambivalenz z.B. Guglielmo Marconi hat nun plotzlich zwei verschiedene Autos: (65821, Hedy Lamarr, 09.11.1914, HighFreq, Guglielmo Marconi, **LINT**, **54**, New York, Avenue East, NY 10019)\n", " + oder neues Tupel hat NULL-Werte z.B. könnte ein Vehicle ohne Person hinzugefügt werden: (NULL, NULL, NULL, NULL, NULL, **EasyMile**, **8**, NULL, NULL, NULL)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 7: Normalisierung Lieferant (Zusatzaufgabe)\n", "Gegeben sei die folgende Ausgangsrelation:\n", "\n", "### Lieferant\n", "\n", "
\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", "
LieferantNrOrtEntf(km)Lieferung
BteilNrBteilBezAnzahlBearbeiter
L1London600T1Schrauben100Meier
T2Zangen200Müller
T3Hammer50Oheim
L2Paris1000T1Schrauben200Meier
T4Muttern500Schmidt
L3London600T4Muttern1000Busse
L4Stockholm600T5Muttern800Leicher
\n", "\n", "Die funktionalen Abhängigkeiten sind die Folgenden:\n", "+ LieferantNr → Ort, Entf\n", "+ BteilNr → BteilBez\n", "+ LieferantNr, BteilNr → Anzahl, Bearbeiter\n", "+ Bearbeiter → BteilNr\n", "+ Ort → Entf\n", "\n", "\n", "### Aufgabe\n", "\n", "+ Normalisieren Sie die Relationen bis zur BCNF.\n", "+ Protokollieren Sie dabei funktionalen Abhängigkeiten, die zu einer Zerlegung der Tabellen geführt haben.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "##### 1. Normalform\n", "+ Lieferant(LNr, Ort, Entf)\n", "+ Lieferung(LNr, BteilNr, BteilBez, Anzahl, Bearbeiter)\n", "\n", "Normalisiert wurde anhand der funktionalen Abhängigkeit: `LieferantNr → Ort, Entf`\n", "\n", "**oder**\n", "\n", "+ Lieferung(LNr, BteilNr, Ort, Entf, BteilBez, Anzahl, Bearbeiter)\n", "\n", "\n", "##### 2. Normalform\n", "+ Lieferant (LNr, Ort, Entf)\n", "+ Lieferung (LNr, BteilNr, Anzahl, Bearbeiter)\n", "+ Bauteil (BteilNr, BteilBez)\n", "\n", "Normalisiert wurde anhand der funktionalen Abhängigkeit: `BteilNr → BteilBez` und falls nicht im ersten Schritt geschehen (`LieferantNr → Ort, Entf`)\n", "\n", "\n", "##### 3. Normalform\n", "+ Lieferant (LNr, Ort)\n", "+ Entfernung (Ort, Entf)\n", "+ Lieferung (LNr, BteilNr, Anzahl, Bearbeiter)\n", "+ Bauteil (BteilNr, BteilBez)\n", "\n", "Normalisiert wurde anhand der funktionalen Abhängigkeit: `Ort → Entf`\n", "\n", "\n", "##### BCNF\n", "+ Lieferant (LNr, Ort)\n", "+ Entfernung (Ort, Entf)\n", "+ Bauteil (BteilNr, BteilBez)\n", "+ Lieferung (LNr, Bearbeiter, Anzahl)\n", "+ Bearbeitung (Bearbeiter, BteilNr)\n", "\n", "Normalisiert wurde anhand der funktionalen Abhängigkeit: `Bearbeiter → BteilNr`\n", "\n", "```\n" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 4 }