Normální formy

Database Design

Lis Sulmont

Curriculum Manager

Normalizace

Identifikujte opakující se skupiny dat a vytvořte pro ně nové tabulky

Formálnější definice:

Cíle normalizace jsou:

  • Umožnit charakterizovat úroveň redundance v relačním schématu
  • Poskytnout mechanismy pro transformaci schémat za účelem odstranění redundance
1 Database Design, 2nd Edition by Adrienne Watt
Database Design

Normální formy (NF)

Seřazeno od nejméně po nejvíce normalizované:

  • První normální forma (1NF)
  • Druhá normální forma (2NF)
  • Třetí normální forma (3NF)
  • Elementární klíčová normální forma (EKNF)
  • Boyce-Coddova normální forma (BCNF)

$$

  • Čtvrtá normální forma (4NF)
  • Normální forma podstatných n-tic (ETNF)
  • Pátá normální forma (5NF)
  • Normální forma doménových klíčů (DKNF)
  • Šestá normální forma (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Database Design

Pravidla 1NF

  • Každý záznam musí být jedinečný – žádné duplicitní řádky
  • Každá buňka musí obsahovat jednu hodnotu

Počáteční data

| 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        |
Database Design

Ve formě 1NF

| 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  | 
Database Design

2NF

  • Musí splňovat 1NF A ZÁROVEŇ
    • Pokud je primární klíč tvořen jedním sloupcem
      • automaticky splňuje 2NF
    • Pokud je primární klíč složený
      • každý neklíčový sloupec musí záviset na všech klíčích

Počáteční data

| 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     |
Database Design

Ve formě 2NF

| 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 |
Database Design

3NF

  • Splňuje 2NF
  • Žádné tranzitivní závislosti: neklíčové sloupce nesmí záviset na jiných neklíčových sloupcích

Počáteční data

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

Ve formě 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 |
Database Design

Datové anomálie

Co se riskuje při nedostatečné normalizaci?

1. Anomálie při aktualizaci

2. Anomálie při vkládání

3. Anomálie při mazání

Database Design

Anomálie při aktualizaci

Nekonzistence dat způsobená redundancí při aktualizaci

| 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       |

Pro aktualizaci e-mailu studenta 520:

  • Je nutné aktualizovat více záznamů, jinak dojde k nekonzistenci
  • Uživatel musí být obeznámen s redundancí
Database Design

Anomálie při vkládání

Nelze přidat záznam kvůli chybějícím atributům

| 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       |

Nelze vložit studenta, který se zaregistroval, ale není zapsán do žádného kurzu

Database Design

Anomálie při mazání

Smazání záznamu způsobí neúmyslnou ztrátu dat

| 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       |

Pokud smažeme studenta 230, co se stane s daty o kurzu Cleaning Data in R?

Database Design

Datové anomálie

Co se riskuje při nedostatečné normalizaci?

1. Anomálie při aktualizaci

2. Anomálie při vkládání

3. Anomálie při mazání

Čím více je databáze normalizovaná, tím méně je náchylná k datovým anomáliím

Nezapomeňte na nevýhody normalizace z předchozího videa

Database Design

Pojďme si procvičit!

Database Design

Preparing Video For Download...