Normalformen verständnisfrage
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
album
attribut
auffrischung
aussehen
datum
dritte normalform
erinnerung
formulieren
formulierung
gewisse redundanz
interpret
lied
normalform
obige tabelle
positiven effekt
spalte
tabelle
url
verschiedene alben
wiederholen
-
Hey,
ich hab ein Frage zu den 3 Normalformen, zur auffrischung =)
...das sind jetzt meine Formulierungen und wahrscheinlich fachlich nicht ganz korrekt xD
Normalformen:
Beispieltabelle:
Die Tabelle ist nicht in der 1. Normalform da in einer Spalte der Tabelle mehrere Werte enthalten sind
id | Album | Lieder
1 | TestAlbum | Lied1, Lied2, Lied3
2 | TestAlbum2 | Lied4, Lied5, Lied6
So wäre die obige Tabelle in der 1. Normalform
id | Album | Lieder
1 | TestAlbum | Lied1
2 | TestAlbum | Lied2
3 | TestAlbum | Lied3
4 | TestAlbum2 | Lied4
5 | TestAlbum2 | Lied5
6 | TestAlbum2 | Lied6
2 Normalform
id | idAlbum | Lieder
1 | 1 | Lied1
2 | 1 | Lied2
3 | 2 | Lied4
3 Normalform:
idAlben | AlbenName
1 | TestAlbum
2 | TestAlbum2
Die Dritte Normalform besagt das nur der Primärschlüssel
(idAlben) und max. eine weitere spalte enthalten darf
wobei ich jetzt mal davon ausgehe das die liednamen eindeutig sind!
...habe ich das so noch richtig in Erinnerung? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
meiner Meinung nach schon, aber wo ist jetzt dein Problem?
-
...ich hab das vor 3 Jahren mal gelernt und habs seit dem immer ausm Gefühl heraus gemacht, aber ich schreibe bald eine Prüfung darüber und muss das ganze dann auch formulieren können ;)
-
Erst mal ist es wichtig keine Daten zu wiederholen. Zum Beispiel können Künstler verschiedene Alben machen, auf dem verschiedene Lieder sind. Das würde dann so aussehen:
- Kuenstler
id | Name
- Album
id | KuenstlerID | Name
- Lieder
id | AlbumId | Name
Anders würde das aussehen, wenn keine Alben sondern einfach CDs (also CDs auf denen Musik von verschiedenen Künstlern ist). Dann könnte man es so realisieren:
- CDs
id | Name
- Kuenstler
Id | Name
- Lieder
id | CDid | KuenstlerID | Name -
Ich denke in diesem Fall wäre es sinnvoll bei "Lieder" wie schon weiter unten von trueweb vorgeschlagen die ID vom Künstler mit zu führen. Dann kann man ohne 3 Tabellen joinen zu müssen direkt die Titel des Künstlers abfragen und kann mit einem einfachen 2 Tabellen join auch den Albumstitel zurückgeben.
Man hat dann zwar eine gewisse Redundanz, aber die ist in dem Fall zu vertreten. Schließlich hat sie einen positiven Effekt. -
Hallo,
in Prüfungen wollen die meist so Formulierungen wie im Wikipedia (jeweils der erste Satz bei den normalformen) http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
Demzufolge stimmen deine Normalformen nicht ganz.
1. Normalform: Jedes Attribut muß atomar sein (für sich alleine stehen)
aid | Album | lid | Lieder
1 | Album1 | 1 | Lied1
1 | Album1 | 2 | Lied2
1 | Album1 | 3 | Lied3
2 | Album2 | 4 | Lied4
2 | Album2 | 5 | Lied5
2 | Album2 | 6 | Lied6
d.h. aid und lid werden jeweils Schlüssel und der Primärschlüssel wäre (aid,lid)
2. Normalform: Jedes Nicht-Schlüsselattribut genau von einem Schlüssel (funktional) abhängig ist
Die Attribute Album und Lieder sind jetzt zwar von lid abhängig, aber nicht von aid - d.h. wir müssen in 2. NF umwandeln...
Alben
aid | Album
1 | Album1
2 | Album2
Lieder
aid | lid | Lieder
1 | 1 | Lied1
1 | 2 | Lied2
1 | 3 | Lied3
2 | 4 | Lied4
2 | 5 | Lied5
2 | 6 | Lied6
3.Normalform: jedes Nichtschlüsselattribut von keinem Schlüsselkandidaten transitiv abhängt
Hmm zwecks Datenmangel sind die Tabellen dann schon in der 3. Normalform
Allerdings wenn du in der Tabelle Album zum Bsp. noch Daten zum Interpreten oder so hättest, müsste man diese hier auslagern, weil die Daten zum Interpreten sich ja nicht bei jedem Album ändern - sondern wenn dann insgesamt.
Alben Lieder Interpret
aid | Album | Interpret
1 | Album1 | i1
2 | Album2 | i2
3 | Album3 | i1
Lieder
aid | lid | Lieder
1 | 1 | Lied1
1 | 2 | Lied2
1 | 3 | Lied3
2 | 4 | Lied4
2 | 5 | Lied5
2 | 6 | Lied6
Interpret
iid | Name | Gründung
i1 | Interp1 | 1980
i2 | interp2 | 1967
Hoffe das hilft ein wenig.
Grüßle
Beitrag zuletzt geändert: 25.5.2009 12:36:30 von scout -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage