Informatik Normalisierung?
Hallo, ich weiss das es sehr aufwendig ist aber ich bin in einer sehr hilfslosen situation. Kann jemand für mich diese Aufgabe lösen und ein bild schicken von der Lösung? Ich wäre auch bereit einen kleinen Geldbetrag zu bezahlen. Bitte nur sachliches
Bis wann? Ich würde den Aufwand auf 10-20 Minuten Einschätzen, habe die Zeit aber gerade nicht.
Hallo,am besten bis morgen spätestens. Eine erklärung für die einzelnen Tabellen und für das Erreichen der einzelnen Normalformen wäre mega nett.
1 Antwort
Du musst das einfach nur in vier Tabellen aufteilen.
Tabelle Schauspieler
-----------------------------------
| SchauspielerNr | Name |
|---------------------------------|
| 1 | Emma Mehrend |
| 2 | Uwe Reinland |
| 3 | Bastian Xeller |
-----------------------------------
Tabelle Film
--------------------------------------------
| FilmNr | Film | KategorieNr |
| -----------------------------------------|
| 1 | Schlacht um Tomba | 2 |
| 2 | Reise ins Glück | 1 |
| 3 | Mann liebt dich | 3 |
| 4 | Herr der Ketten | 3 |
--------------------------------------------
Tabelle Kategorie
---------------------------
| KategorieNr | Kategorie |
|-------------------------|
| 1 | Fantasy |
| 2 | Action |
| 3 | Komödie |
---------------------------
Tabelle FilmSchauspieler
-------------------------------------------
| FilmNr | SchauspielerNr | Rolle |
|-----------------------------------------|
| 1 | 1 | Eve Blung |
| 2 | 2 | Peter Pan |
| 1 | 2 | Warlord Membo |
| 3 | 3 | James Bunt |
| 4 | 3 | Meister Tuck |
-------------------------------------------
Ja, stimmt. Wenn man die erste Normalform wirklich streng auslegt, müsste man die Namen der Schauspieler noch in Vor- und Nachname aufteilen. Im "echten Leben" ist das ein Punkt, der mal so, mal so gehandhabt wird. Also manche Datenbankadministratoren teilen das auf, manche nicht. Und dann gibt es Probleme, wenn jemand, der es nicht aufteilt, Daten an jemanden schickt, der es aufgeteilt hat.
Also die erste Normalform ist, dass alles atomar ist. Also quasi die Tabelle aus der Aufgabe, nur dass die Namen der Schauspieler in Vor- und Nachname aufgeteilt sind und bei den Schauspielern, die in mehreren Filmen stehen, für jeden Film ein eigener Datensatz in der Tabelle steht.
Die zweite Normalform ist ein eigenartiger Zwischenschritt, den man normalerweise einfach überspringt und dann direkt in der dritten Normalform landet. In diesem Beispiel wäre die zweite Normalform, dass du eine Tabelle mit Schauspielern und eine Tabelle mit allen anderen Daten hättest.
In der dritten Normalform löst du dann alle Redundanzen auf. Also alles, was mehrfach in einer Tabelle vorkommen könnte, kriegt eine eigene Tabelle, in der es dann jeder unterschiedliche Wert eine eigene Nummer kriegt.
Ich will Ihnen auch nicht auf den Keks gehen, aber leider habe ich Schwierigkeiten manches nachzuvollziehen. Würde es vielleicht gehen, wenn sie wie vorher Tabellen erstellen, jedoch Schritt für Schritt von der ersten bis zu Dritten Normalform? Falls sie genervt von meinen Wünschen sind, einfach ignorieren😂. Wenn sie es aber tun sollten, wäre eine Beschriftung mit der jeweiligen Normalform und eine knappe Erklärung für den Grund der Erstellung der einzelnen Tabelle sehr hilfreich.Warum ich das so genau brauche ist, da ich einen Vortrag halten muss, der meine Note stark beeinflusst. Grüsse
Ich hab's jetzt extra mal in einer Datenbank nachgebaut. Also die erste Normalform wäre, dass du den Schauspielernamen in Vor- und Nachname aufteilst und pro Film einen Datensatz machst:
+----------------+---------+----------+---------------+--------+-------------------+-------------+-----------+
| SchauspielerNr | Vorname | Nachname | Rolle | FilmNr | Film | KategorieNr | Kategorie |
+----------------+---------+----------+---------------+--------+-------------------+-------------+-----------+
| 1 | Emma | Mehrend | Eve Blung | 1 | Schlacht um Tomba | 2 | Action |
| 2 | Uwe | Reinland | Warlord Membo | 1 | Schlacht um Tomba | 2 | Action |
| 2 | Uwe | Reinland | Peter Pan | 2 | Reise ins Glück | 1 | Fantasy |
| 3 | Bastian | Xeller | James Bunt | 3 | Mann liebt dich | 3 | Komödie |
| 3 | Bastian | Xeller | Meister Tuck | 4 | Herr der Ketten | 3 | Komödie |
+----------------+---------+----------+---------------+--------+-------------------+-------------+-----------+
Die zweite Normalform (die wie gesagt üblicherweise übersprungen wird) ist, dass du eine Tabelle mit den Schauspielern und eine Tabelle mit dem Rest hast:
select * from schauspieler;
+----------------+---------+----------+
| SchauspielerNr | Vorname | Nachname |
+----------------+---------+----------+
| 1 | Emma | Mehrend |
| 2 | Uwe | Reinland |
| 3 | Bastian | Xeller |
+----------------+---------+----------+
Der Rest:
+----------------+---------------+--------+-------------------+-------------+-----------+
| SchauspielerNr | Rolle | FilmNr | Film | KategorieNr | Kategorie |
+----------------+---------------+--------+-------------------+-------------+-----------+
| 1 | Eve Blung | 1 | Schlacht um Tomba | 2 | Action |
| 2 | Warlord Membo | 1 | Schlacht um Tomba | 2 | Action |
| 2 | Peter Pan | 2 | Reise ins Glück | 1 | Fantasy |
| 3 | James Bunt | 3 | Mann liebt dich | 3 | Komödie |
| 3 | Meister Tuck | 4 | Herr der Ketten | 3 | Komödie |
+----------------+---------------+--------+-------------------+-------------+-----------+
und in der dritten Normalform teilst du halt alles in einzelne Tabellen auf:
select * from schauspieler;
+----------------+---------+----------+
| SchauspielerNr | Vorname | Nachname |
+----------------+---------+----------+
| 1 | Emma | Mehrend |
| 2 | Uwe | Reinland |
| 3 | Bastian | Xeller |
+----------------+---------+----------+
select * from film;
+--------+-------------------+-------------+
| FilmNr | Film | KategorieNr |
+--------+-------------------+-------------+
| 1 | Schlacht um Tomba | 2 |
| 2 | Reise ins Glück | 1 |
| 3 | Mann liebt dich | 3 |
| 4 | Herr der Ketten | 3 |
+--------+-------------------+-------------+
select * from kategorie;
+-------------+-----------+
| KategorieNr | Kategorie |
+-------------+-----------+
| 1 | Fantasy |
| 2 | Action |
| 3 | Komödie |
+-------------+-----------+
select * from film_schauspieler;
+--------+----------------+---------------+
| FilmNr | SchauspielerNr | Rolle |
+--------+----------------+---------------+
| 1 | 1 | Eve Blung |
| 1 | 2 | Warlord Membo |
| 2 | 2 | Peter Pan |
| 3 | 3 | James Bunt |
| 4 | 3 | Meister Tuck |
+--------+----------------+---------------+
Ich habe jetzt so gut wie alles verstanden. Ich wünsche Ihnen das Beste im Leben. Wirklich vom Herzen ein Dankeschön. Nicht jeder würde sich diese Mühe für eine unbekannte Person machen. Ich hätte da noch eine letzte Frage, dann lass ich sie auch in Frieden. Was genau ist die Begründung dafür, das ich bei der zweiten Form eine extra tabelle mit den Schauspielern machen muss und was ist die Begründung dafür das ich bei der dritten Form in genau diese 4 Tabellen aufteilen muss?
Die Darstellung der zweiten Form hab ich so gewählt, weil die Tabelle in der Aufgabenstellung so aufgebaut war, dass du drei Schauspieler hast und jedem davon waren 1-2 Filme zugeordnet. Datenbanken können keine verbundenen Zellen darstellen, wie z.B. bei Excel (und bei Excel ist es auch keine gute Idee, Daten in verbundenen Zellen darzustellen), daher brauchst du halt eine Tabelle mit den Stammdaten der Schauspieler (also in diesem Fall nur Vor- und Nachname in richtigen Datenbanken würden wahrscheinlich noch Dinge, wie Geburtstag und Geburtsort dazukommen) und eine Tabelle in der du die Daten aus der Aufgabenstellung mit den jeweiligen Schauspielern verknüpfen kannst. Wie gesagt, die zweite Normalform ist eher theoretisch. Ich hab noch nie gesehen, dass jemand die wirklich baut.
Bei der dritten Normalform ergeben sich die ersten drei Tabellen (Schauspieler, Film und Kategorie) daraus, dass in der Aufgabe schon Nummern für die jeweiligen Einträge vergeben wurden. Ansonsten ergibt sich das aus den Überlegungen: Ein Schauspieler kann in mehreren Filmen mitspielen, also brauche ich eine Tabelle um Schauspieler zu verwalten. Ein Film kann mit mehreren Schauspielern gedreht werden, also brauche ich eine Tabelle, um die Filme zu verwalten. Eine Kategorie kann für mehrere Filme gelten, also brauche ich eine Tabelle, um die Kategorien zu verwalten. Dabei geht es einerseits darum, Speicherplatz zu sparen (eine Zahl braucht weniger Platz als ein Wort) und andererseits kann man so Schreibfehler vermeiden und Änderungen auf alle verknüpften Elemente anwenden (z.B. wenn Emma Mehrend heiratet und sich in Emma Watson umbenennt, braucht man die Änderung nur einmal in der Schauspielertabelle vornehmen und sie wird bei allen Abfragen mit dem neuen Namen angezeigt)
Die vierte Tabelle film_schauspieler ergibt sich daraus, dass man hier eine M:N Beziehung braucht. Ein Schauspieler kann in mehreren Filmen mitspielen und ein Film kann mehrere Schauspieler haben. Daher brauchen wir eine Tabelle, in der beides verknüpft wird. Dass die Spalte "Rolle" da mit drinsteht, hat nur praktische Gründe, weil die Rolle eindeutig durch Film und Schauspieler definiert wird (theoretisch könnte man für die Rollen auch noch eine extra Tabelle anlegen, aber das ist hier nicht zwingend nötig). Oft kriegt so eine M:N Tabelle auch nochmal eine zusätzliche Spalte mit einer fortlaufenden Nummer, damit man keinen zusammengesetzten Primary Key aus zwei Spalten braucht. Das würde in diesem Beispiel auch die Möglichkeit schaffen, dass ein Schauspieler in einem Film mehrere Rollen übernimmt.
Die voraussetzung für die zweite form ist ja das die datenfelder von einem schlüssel funktional abhängig sind, bzw. Jedes nicht schlüssel attribut vom gesamten Schlüssel abhängt. Sind diese Voraussetzungen in den tabellen der 2 ten form dann auch gegeben?
Kann auch sein, dass ich die 2NF falsch verstanden habe. Ich hab die in meinen 18 Jahren als DB-Admin halt noch nie gebraucht. Laut den Infos, die ich bisher finden konnte ist der Unterschied zwischen der zweiten und dritten Normalform, dass man in der dritten Normalform auch "transitive" Abhängigkeiten auflösen soll. Das heißt, um die zweite Normalform zu kriegen, müsste man von der dritten Normalform irgendwo rückwärts gehen und absichtlich eine transitive Abhängigkeit einbauen. Also irgendein Attribut, was über zwei Ecken von einem Schlüssel abhängig ist.
In dem Beispiel finde ich das nur bei den Filmkategorien, weil die von der KategorieNr abhängig sind und die wiederum ist von der FilmNr abhängig. Wahrscheinlich ist die 2NF dann das gleiche, wie die 3NF, nur dass die Tabelle "Kategorie" fehlt und die Kategorie dafür direkt in der Tabelle "Film" steht:
+--------+-------------------+-----------+
| FilmNr | Film | Kategorie |
+--------+-------------------+-----------+
| 2 | Reise ins Glück | Fantasy |
| 1 | Schlacht um Tomba | Action |
| 3 | Mann liebt dich | Komödie |
| 4 | Herr der Ketten | Komödie |
+--------+-------------------+-----------+
Oder vielleicht ist es auch so, dass die Kategorie nicht in der Tabelle "Film" sondern in "FilmSchauspieler" stehen müsste, damit es die 2NF ist:
select FilmNr, Film from film;
+--------+-------------------+
| FilmNr | Film |
+--------+-------------------+
| 1 | Schlacht um Tomba |
| 2 | Reise ins Glück |
| 3 | Mann liebt dich |
| 4 | Herr der Ketten |
+--------+-------------------+
film_schauspieler:
+----------------+---------------+--------+-------------+
| SchauspielerNr | Rolle | FilmNr | KategorieNr |
+----------------+---------------+--------+-------------+
| 2 | Peter Pan | 2 | 1 |
| 1 | Eve Blung | 1 | 2 |
| 2 | Warlord Membo | 1 | 2 |
| 3 | James Bunt | 3 | 3 |
| 3 | Meister Tuck | 4 | 3 |
+----------------+---------------+--------+-------------+
Meinst du in der letzten Variante, die ich gepostet hab? Da geht es darum, dass die KategorieNr transient vom Schlüssel (SchauspielerNr + FilmNr) abhängig ist. Das bedeutet, er ist nicht direkt vom Primärschlüssel abhängig, sondern die FilmNr ist vom Primärschlüssel abhängig und die KategorieNr ist über die FilmNr vom Primärschlüssel abhängig und könnte daher zur Überführung in die 3NF einfach in der Film-Tabelle gespeichert werden.
Wirklich vielen dank. Könnten sie mir eventuell noch erklären, welche tabellen für die erste, zweite und dritte Normalform sorgen und weshalb man genau diese Tabellen braucht? (Die Bedingungen für die Normalformen kenne ich.)Noch eine Frage, müsste ich die Anfangstabelle nicht in Name und Vorname aufteilen, da das Attribut Name unatomar ist? Nochmals viel en dank, sie helfen mir damit wirklich unglaublich.