Forme normale

Proiectarea bazelor de date

Lis Sulmont

Curriculum Manager

Normalizarea

Identificați grupurile repetitive de date și creați tabele noi pentru acestea

O definiție mai formală:

Obiectivele normalizării sunt:

  • Caracterizarea nivelului de redundanță într-o schemă relațională
  • Furnizarea de mecanisme pentru transformarea schemelor în vederea eliminării redundanței
1 Database Design, 2nd Edition by Adrienne Watt
Proiectarea bazelor de date

Forme normale (NF)

Ordonate de la cel mai puțin la cel mai normalizat:

  • Prima formă normală (1NF)
  • A doua formă normală (2NF)
  • A treia formă normală (3NF)
  • Forma normală cu cheie elementară (EKNF)
  • Forma normală Boyce-Codd (BCNF)

$$

  • A patra formă normală (4NF)
  • Forma normală cu tuplu esențial (ETNF)
  • A cincea formă normală (5NF)
  • Forma normală domeniu-cheie (DKNF)
  • A șasea formă normală (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Proiectarea bazelor de date

Regulile 1NF

  • Fiecare înregistrare trebuie să fie unică - fără rânduri duplicate
  • Fiecare celulă trebuie să conțină o singură valoare

Date inițiale

| 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        |
Proiectarea bazelor de date

În forma 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  | 
Proiectarea bazelor de date

2NF

  • Trebuie să satisfacă 1NF ȘI
    • Dacă cheia primară este o singură coloană
      • atunci satisface automat 2NF
    • Dacă există o cheie primară compusă
      • atunci fiecare coloană non-cheie trebuie să depindă de toate cheile

Date inițiale

| 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     |
Proiectarea bazelor de date

În forma 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 |
Proiectarea bazelor de date

3NF

  • Satisface 2NF
  • Fără dependențe tranzitive: coloanele non-cheie nu pot depinde de alte coloane non-cheie

Date inițiale

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

În forma 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 |
Proiectarea bazelor de date

Anomalii de date

Ce riscăm dacă nu normalizăm suficient?

1. Anomalie de actualizare

2. Anomalie de inserare

3. Anomalie de ștergere

Proiectarea bazelor de date

Anomalie de actualizare

Inconsistență cauzată de redundanța datelor la actualizare

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

Pentru a actualiza e-mailul studentului 520:

  • Este necesar să se actualizeze mai multe înregistrări, altfel apare inconsistența
  • Utilizatorul trebuie să fie conștient de redundanță
Proiectarea bazelor de date

Anomalie de inserare

Imposibilitatea de a adăuga o înregistrare din cauza atributelor lipsă

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

Impossibil de inserat un student înregistrat, dar neînscris la niciun curs

Proiectarea bazelor de date

Anomalie de ștergere

Ștergerea unor înregistrări cauzează pierderea neintenționată de date

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

Dacă ștergem studentul 230, ce se întâmplă cu datele despre Cleaning Data in R?

Proiectarea bazelor de date

Anomalii de date

Ce riscăm dacă nu normalizăm suficient?

1. Anomalie de actualizare

2. Anomalie de inserare

3. Anomalie de ștergere

Cu cât baza de date este mai normalizată, cu atât este mai puțin susceptibilă la anomalii de date

Nu uitați dezavantajele normalizării din videoclipul anterior

Proiectarea bazelor de date

Lass uns üben!

Proiectarea bazelor de date

Preparing Video For Download...