Normalisierung von Datenbanken ... wie gehts?

hallo, liebe xxperten und www-community!

bis vor ein paar tagen dachte ich, die polynomdivision in der 12. und 13. klasse wäre das schlimmste, was einem menschen wie mir widerfahren könnte, allerdings bin ich durch die ersten drei normalformen von e.f.codd eines besseren belehrt worden.

also, ich hab dieses thema in der berufsschule, in zwei wochen steht die klausur an und ich habe keinen durchblick. hilfeschreiend wende ich mich daher an euch …

nehmen wir mal folgendes beispiel:

ich habe drei relationen, die den vorgang einer buchausleihe beschreiben sollen. tabelle 1 heißt „buch“ und enthält die attribute isbn (als primärschlüssel = ps), autor, titel und jahr. die zweite tabelle heißt „kunde“ und enthält folgende attribute: kundennr (wieder ps), name und anschrift (global, als ort und straße mit hausnummer). die letzte tabelle stellt die beziehung zwischen beiden tabellen dar, sie heißt „ausleihe“ und beinhaltet die attribute ausleihnummer (ps), kundennr, name, isbn, titel und ausleihdatum.

so, mittlerweile habe ich ja schon begriffen, dass das ganze nicht mal in der 1. normalform vorliegt. aber wie kriege ich das alles in die 3. nf?

als lösungsvorschlag habe ich folgende drei tabellen erhalten:

  1. tabelle „ausleihe“ mit folgenden attributen:
    ausleihnummer (ps), kundennr (fremdschlüssel, fs), isbn und ausleihdatum

  2. tabelle „buchtitel“ mit den attributen:
    isbn (ps) und titel

  3. tabelle „person“ mit den attributen
    kundennr (ps) und name

  4. tabelle „kunde“ mit den attributen:
    kundennr (ps), name, ort, straße

und

  1. tabelle „buch“ mit den attributen:
    isbn (ps), autor, titel, jahr

und jetzt versteh ich die welt nicht mehr … sind das nicht ein paar tabellen zu viel? wieso kommen manche nicht-schlüsselattribute doppelt vor (z.b. der name des kunden)?

bei dieser lösung handelt es sich um den vorschlag eines ebenso ahnungslosen kollegen …

tja, wie geht es richtig? gibt es irgendwelche step by step-anleitungen, wie man mit diesem thema zurecht kommt bzw. wie man vorgehen muss?
empfehlenswerte und verständliche websites, vielleicht mit übungen und deren lösungswegen?

ich hoffe, irh könnt mich aus meinem jetzigen stadium der totalen verpeiltheit erlösen

  • peace, ted

Hi,

bis vor ein paar tagen dachte ich, die polynomdivision in der
12. und 13. klasse wäre das schlimmste, was einem menschen wie
mir widerfahren könnte, allerdings bin ich durch die ersten
drei normalformen von e.f.codd eines besseren belehrt worden.

Genau so ist es. Aber wenn man es mal kapiert hat, wird man mit Jobangeboten und Geld in Unmengen überhäuft :smile:

also, ich hab dieses thema in der berufsschule, in zwei wochen
steht die klausur an und ich habe keinen durchblick.
hilfeschreiend wende ich mich daher an euch …

Du kannst hinterher noch schreien. Aber schau Dir den Kelz an (Link in der Brettbeschreibung, vor allem http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/cha…). Dort ist der Vorgang anschaulich und trotzdem wissenschaftlich genau erklärt. Das Beisspiel dort ist zwar keine Buchausleihe, kommt dem aber sehr nahe.

ich habe drei relationen, die den vorgang einer buchausleihe
beschreiben sollen. tabelle 1 heißt „buch“ und enthält die
attribute isbn (als primärschlüssel = ps), autor, titel und
jahr. die zweite tabelle heißt „kunde“ und enthält folgende
attribute: kundennr (wieder ps), name und anschrift (global,
als ort und straße mit hausnummer). die letzte tabelle stellt
die beziehung zwischen beiden tabellen dar, sie heißt
„ausleihe“ und beinhaltet die attribute ausleihnummer (ps),
kundennr, name, isbn, titel und ausleihdatum.

so, mittlerweile habe ich ja schon begriffen, dass das ganze
nicht mal in der 1. normalform vorliegt. aber wie kriege ich
das alles in die 3. nf?

als lösungsvorschlag habe ich folgende drei tabellen erhalten:

  1. tabelle „ausleihe“ mit folgenden attributen:
    ausleihnummer (ps), kundennr (fremdschlüssel, fs), isbn und
    ausleihdatum

  2. tabelle „buchtitel“ mit den attributen:
    isbn (ps) und titel

  3. tabelle „person“ mit den attributen
    kundennr (ps) und name

  4. tabelle „kunde“ mit den attributen:
    kundennr (ps), name, ort, straße

und

  1. tabelle „buch“ mit den attributen:
    isbn (ps), autor, titel, jahr

und jetzt versteh ich die welt nicht mehr … sind das nicht
ein paar tabellen zu viel? wieso kommen manche
nicht-schlüsselattribute doppelt vor (z.b. der name des
kunden)?

Die 2. und 3. Tabelle würde ich weglassen.
(die 2. Tabelle „buchtitel“ gehört auf jeden Fall entsorgt)

Es blieben tatsächlich Buch, Kunde und Ausleihe übrig, nur die Verteilung der Attribute wäre in diesem Lösungsvorschlag besser, nämlich „fast“ normalisiert.
Warum fast? Weil sowohl Kunden als auch Buchautoren Personen darstellen und sie insofern in eine eigene Tabelle verlagert werden könnten. Dann enthielten Buch und Kunde keinen Namen und Vornamen, sondern nur einen Verweis zur Person.

Dies ist ein Beispiel dafür, daß man eine Datenbank kaputtnormalisieren kann. Zwar stimmt es mit der Normalisierung, allerdings um den Preis einer komplizierten Datenhaltung und vor allem Abfrage. Man kann es so sehen: die Abstraktion auf „Person“ kommt in der Praxis nicht vor, man unterscheidet deutlich zwischen Buchautoren und Kunden - der eher unwahrscheinliche Fall, daß jemand gleichzeitig Buchautor und Kunde ist, kann getrost durch eine doppelte Dateneingabe abgebildet werden.

Wie gesagt, wenn Du nach der Kelz-Lektüre noch Fragen haben solltest, nur her damit.

Gruß

J.

hallo,

die von dir empfohlene seite ist echt gut, da hab ich das jetzt wohl endlich geschnallt.

jetzt kann die klausur kommen … und der reichtum! *juhu*

thank you very much.

  • peace, ted