Skip to main content

Normalisierung

Normalformen

  • 1. Normalform
    • nur atomare Attribute
  • 2. Normalform
    • 1NF und
    • Jedes nicht zum Primärschlüssel gehörende Attribut ist vom Primärschlüssel voll funktional abhängig
    • nicht in 2NF ist also:
      • Schlüssel: AB
      • FD: A -> C
      • weil C nur von A, also nicht dem gesamten Schlüssel abhängt
  • 3. Normalform
    • 2NF und
    • Keine transitiven Abhängigkeiten zwischen einem Schlüssel und Nicht-Schlüsselattributen
    • nicht in 3NF ist also:
      • Schlüssel: A
      • FDs: A -> B und B -> C
      • weil C kein Schlüsselattribut ist und transitiv von A abhängt
  • Boyce-Codd-Normalform
    • 3NF und
    • auch keine transitiven Abhängigkeiten über Schlüsselattribute
    • R1 = {C, D, E}, F1 = {DE → C, C → D}, K1 = {CE, DE} erfüllt die 3NF, aber nicht die BCNF
    • R2 = {D, A, C, F }, F2 = {D → ACF, AC → D}, K2 = {{D}, {A, C}} erfüllt die BCNF, aber nicht die 4NF
    • Was ist der Unterschied zwischen diesen beiden? Warum erfüllt die eine die BCNF und die andere nicht???
      • In R1 ist C kein Superkey, in R2 sind dies D und AC jedoch schon. Für die BCNF muss die linke Seite jedes FDs ein Superkey sein.

Syntheseverfahren

  • dient zur Erreichung der 3NF
  • garantiert Verbundtreue und Abhängigkeitstreue
    • Verbundtreue heißt, dass wenn man alle Relationen JOINt, man wieder die Ausgangsrelation erhält
  • Vorgehen
    • Sortiere die FDs
      • absteigend nach Anzahl der beteiligten Attribute
      • absteigend nach der länge der linken Seite
    • führe für jede FD folgende Schritte durch
      • gibt es eine Relation, die bereits alle Attribute der FD enthält?
        • ja: füge die FD zu dieser Relation hinzu
        • nein: erstelle eine neue Relation mit der FD und all seinen Attributen
    • gibt es eine Relation, die den gesamten Schlüssel enthält?
      • wenn nein, erstelle eine solche

Dekompositionsverfahren

  • dient zur Erreichung der BCNF
  • garantiert Verbundtreue, nicht aber Abhängigkeitstreue
  • Vorgehen
    • Wähle eine FD, die die BCNF verletzt (weil die linke Seite kein Superkey ist)
    • Teile die Relation auf in
      • alle Attribute außer der, der rechten Seite der FD
      • alle Attribute der FD
    • füge die betrachtete FD der zweiten Relation und alle anderen FDs der transitiven Hülle, deren Attribute in der ersten Relation enthalten sind, der ersten Relation hinzu
    • wiederhole dies solange, bis alle Relationen die BCNF erfüllen
  • abhängig von der Reihenfolge der betrachteten FDs ergeben sich unterschiedliche Ergebnisse