Postacie normalne

Projektowanie baz danych

Lis Sulmont

Curriculum Manager

Normalizacja

Identyfikuj powtarzające się grupy danych i twórz dla nich nowe tabele

Bardziej formalna definicja:

Cele normalizacji to:

  • Możliwość określenia poziomu redundancji w schemacie relacyjnym
  • Zapewnienie mechanizmów przekształcania schematów w celu usunięcia redundancji
1 Database Design, 2nd Edition by Adrienne Watt
Projektowanie baz danych

Postacie normalne (NF)

Od najmniej do najbardziej znormalizowanej:

  • Pierwsza postać normalna (1NF)
  • Druga postać normalna (2NF)
  • Trzecia postać normalna (3NF)
  • Elementarna kluczowa postać normalna (EKNF)
  • Postać normalna Boyce'a-Codda (BCNF)

$$

  • Czwarta postać normalna (4NF)
  • Zasadnicza krotna postać normalna (ETNF)
  • Piąta postać normalna (5NF)
  • Postać normalna klucza dziedziny (DKNF)
  • Szósta postać normalna (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Projektowanie baz danych

Zasady 1NF

  • Każdy rekord musi być unikalny – brak duplikatów
  • Każda komórka musi zawierać jedną wartość

Dane wejściowe

| 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        |
Projektowanie baz danych

W postaci 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  | 
Projektowanie baz danych

2NF

  • Musi spełniać 1NF ORAZ
    • Jeśli klucz główny to jedna kolumna
      • automatycznie spełnia 2NF
    • Jeśli klucz główny jest złożony
      • każda kolumna niebędąca kluczem musi zależeć od wszystkich kluczy

Dane wejściowe

| 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     |
Projektowanie baz danych

W postaci 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 |
Projektowanie baz danych

3NF

  • Spełnia 2NF
  • Brak zależności przechodnich: kolumny niebędące kluczem nie mogą zależeć od innych takich kolumn

Dane wejściowe

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

W postaci 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 |
Projektowanie baz danych

Anomalie danych

Co ryzykujemy, nie normalizując wystarczająco?

1. Anomalia aktualizacji

2. Anomalia wstawiania

3. Anomalia usuwania

Projektowanie baz danych

Anomalia aktualizacji

Niespójność danych spowodowana redundancją podczas aktualizacji

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

Aby zaktualizować e-mail studenta 520:

  • Trzeba zaktualizować więcej niż jeden rekord, inaczej pojawi się niespójność
  • Użytkownik musi wiedzieć o redundancji
Projektowanie baz danych

Anomalia wstawiania

Niemożność dodania rekordu z powodu brakujących atrybutów

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

Niemożność wstawienia studenta, który się zarejestrował, ale nie zapisał na żaden kurs

Projektowanie baz danych

Anomalia usuwania

Usunięcie rekordu powoduje niezamierzoną utratę danych

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

Jeśli usuniemy studenta 230, co stanie się z danymi dotyczącymi Cleaning Data in R?

Projektowanie baz danych

Anomalie danych

Co ryzykujemy, nie normalizując wystarczająco?

1. Anomalia aktualizacji

2. Anomalia wstawiania

3. Anomalia usuwania

Im bardziej znormalizowana baza danych, tym mniej podatna na anomalie danych

Nie zapomnij o wadach normalizacji omówionych w poprzednim filmie

Projektowanie baz danych

Czas na ćwiczenia!

Projektowanie baz danych

Preparing Video For Download...