Normalformen

Datenbankdesign

Lis Sulmont

Curriculum Manager

Normalisierung

Identifiziere sich wiederholende Datengruppen und erstelle dafür neue Tabellen.

Eine etwas formellere Definition:

Die Ziele der Normalisierung sind:

  • Das Ausmaß der Redundanz in einem relationalen Schema beschreiben können
  • Mach Mechanismen zum Umwandeln von Schemata bereit, um Redundanzen zu vermeiden.
1 Datenbankdesign, 2. Auflage von Adrienne Watt
Datenbankdesign

Normalformen (NF)

Sortiert von am wenigsten bis am meisten normalisiert:

  • Erste Normalform (1NF)
  • Zweite Normalform (2NF)
  • Dritte Normalform (3NF)
  • Elementare Normalform (EKNF)
  • Boyce-Codd-Normalform (BCNF)

$$

  • Vierte Normalform (4NF)
  • Essentielle Tupel-Normalform (ETNF)
  • Fünfte Normalform (5NF)
  • Domänen-Schlüssel-Normalform (DKNF)
  • Sechste Normalform (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Datenbankdesign

1NF-Regeln

  • Jeder Datensatz muss einzigartig sein – keine doppelten Zeilen.
  • Jede Zelle muss einen Wert haben.

Anfangsdaten

| Student_id | Student_Email   | Courses_Completed                                        | 
|------------|-----------------|----------------------------------------------------------|
| 235        | [email protected]   | Introduction to Python, Intermediate Python              |
| 455        | [email protected] | Cleaning Data in R                                       | 
| 767        | [email protected] | Machine Learning Toolbox, Deep Learning in Python        |
Datenbankdesign

In 1NF-Form

| Student_id | Student_Email   | 
|------------|-----------------|
| 235        | [email protected]   | 
| 455        | [email protected] | 
| 767        | [email protected] | 
| Student_id | Completed                |
|------------|--------------------------|
| 235        | Introduction to Python   | 
| 235        | Intermediate Python      | 
| 455        | Cleaning Data in R       | 
| 767        | Machine Learning Toolbox | 
| 767        | Deep Learning in Python  | 
Datenbankdesign

2NF

  • Muss 1NF erfüllen AND
    • Wenn der Primärschlüssel eine Spalte ist
      • dann erfüllt automatisch 2NF
    • Wenn es einen zusammengesetzten Primärschlüssel gibt
      • Dann muss jede Spalte, die kein Schlüssel ist, von allen Schlüsseln abhängen.

Anfangsdaten

| Student_id (PK) | Course_id (PK) | Instructor_id | Instructor    | Progress |
|-----------------|----------------|---------------|---------------|----------|
| 235             | 2001           | 560           | Nick Carchedi | .55      |
| 455             | 2345           | 658           | Ginger Grant  | .10      |
| 767             | 6584           | 999           | Chester Ismay | 1.00     |
Datenbankdesign

In 2NF-Form

| Student_id (PK) | Course_id (PK) | Percent_Completed |
|-----------------|----------------|-------------------|
| 235             | 2001           | .55               |
| 455             | 2345           | .10               |
| 767             | 6584           | 1.00              |
| Course_id (PK) | Instructor_id | Instructor    |
|----------------|---------------|---------------|
| 2001           | 560           | Nick Carchedi |
| 2345           | 658           | Ginger Grant  |
| 6584           | 999           | Chester Ismay |
Datenbankdesign

3NF

  • Erfüllt 2NF
  • Keine transitiven Abhängigkeiten: Nicht-Schlüsselspalten dürfen nicht von anderen Nicht-Schlüsselspalten abhängig sein.

Anfangsdaten

| Course_id (PK) | Instructor_id | Instructor    | Tech   |
|----------------|---------------|---------------|--------|
| 2001           | 560           | Nick Carchedi | Python |
| 2345           | 658           | Ginger Grant  | SQL    |
| 6584           | 999           | Chester Ismay | R      |
Datenbankdesign

In 3NF

| Course_id (PK) | Instructor    | Tech   |
|----------------|---------------|--------|
| 2001           | Nick Carchedi | Python |
| 2345           | Ginger Grant  | SQL    |
| 6584           | Chester Ismay | R      |
| Instructor_id | Instructor    | 
|---------------|---------------|
| 560           | Nick Carchedi | 
| 658           | Ginger Grant  | 
| 999           | Chester Ismay |
Datenbankdesign

Datenanomalien

Was riskieren wir, wenn wir nicht genug normalisieren?

1. Anomalie aktualisieren

2. Einfügungsanomalie

3. Löschungsanomalie

Datenbankdesign

Anomalie aktualisieren

Dateninkonsistenz wegen doppelter Daten beim Aktualisieren

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

Um die E-Mail-Adresse von Student 520 zu ändern:

  • Du musst mehr als einen Datensatz aktualisieren, sonst gibt's Unstimmigkeiten.
  • Benutzer, die Aktualisierungen vornehmen, müssen über Redundanz Bescheid wissen.
Datenbankdesign

Einfügungsanomalie

Kann keinen Datensatz hinzufügen, weil Attribute fehlen

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

Ich kann keinen Schüler hinzufügen, der sich angemeldet hat, aber noch in keinen Kurs eingeschrieben ist.

Datenbankdesign

Löschungsanomalie

Das Löschen von Datensätzen kann zu einem unbeabsichtigten Datenverlust führen.

| Student_ID | Student_Email   | Enrolled_in             | Taught_by           |
|------------|-----------------|-------------------------|---------------------|
| 230        | [email protected]  | Cleaning Data in R      | Maggie Matsui       |
| 367        | [email protected] | Data Visualization in R | Ronald Pearson      |
| 520        | [email protected]   | Introduction to Python  | Hugo Bowne-Anderson |
| 520        | [email protected]   | Arima Models in R       | David Stoffer       |

Wenn wir den Schüler „ 230 ” löschen, was passiert dann mit den Daten auf „ Cleaning Data in R ”?

Datenbankdesign

Datenanomalien

Was riskieren wir, wenn wir nicht genug normalisieren?

1. Anomalie aktualisieren

2. Einfügungsanomalie

3. Löschungsanomalie

Je normalisierter die Datenbank ist, desto weniger anfällig ist sie für Datenanomalien.

Vergiss nicht die Nachteile der Normalisierung aus dem letzten Video.

Datenbankdesign

Lass uns üben!

Datenbankdesign

Preparing Video For Download...