# 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