Normale vormen

Databaseontwerp

Lis Sulmont

Curriculum Manager

Normalisatie

Herken herhalende gegevensgroepen en maak er aparte tabellen voor

Een formelere definitie:

Doelen van normalisatie:

  • De mate van redundantie in een relationeel schema bepalen
  • Mechanismen bieden om schema’s te transformeren en redundantie te verwijderen
1 Database Design, 2nd Edition by Adrienne Watt
Databaseontwerp

Normale vormen (NF)

Van minst naar meest genormaliseerd:

  • Eerste normale vorm (1NF)
  • Tweede normale vorm (2NF)
  • Derde normale vorm (3NF)
  • Elementary key normal form (EKNF)
  • Boyce-Codd normal form (BCNF)

$$

  • Fourth normal form (4NF)
  • Essential tuple normal form (ETNF)
  • Fifth normal form (5NF)
  • Domain-key Normal Form (DKNF)
  • Sixth normal form (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Databaseontwerp

1NF-regels

  • Elke record is uniek: geen dubbele rijen
  • Elke cel bevat één waarde

Initiële 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        |
Databaseontwerp

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

2NF

  • Moet aan 1NF voldoen EN
    • Als de primaire sleutel één kolom is
      • dan voldoet het automatisch aan 2NF
    • Bij een samengestelde primaire sleutel
      • moet elke niet-sleutelkolom afhangen van alle sleutels

Initiële 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     |
Databaseontwerp

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

3NF

  • Voldoet aan 2NF
  • Geen transitieve afhankelijkheden: niet-sleutelkolommen mogen niet van andere niet-sleutelkolommen afhangen

Initiële data

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

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

Data-anomalieën

Wat riskeren we als we niet genoeg normaliseren?

1. Update-anomalie

2. Invoeg-anomalie

3. Verwijderingsanomalie

Databaseontwerp

Update-anomalie

Inconsistentie door redundantie bij het updaten

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

Om e-mail van student 520 te wijzigen:

  • Meerdere records updaten, anders ontstaat inconsistentie
  • De gebruiker moet de redundantie kennen
Databaseontwerp

Invoeg-anomalie

Geen record kunnen toevoegen door ontbrekende attributen

| 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 kunt geen student invoeren die zich heeft aangemeld maar nog geen cursus heeft

Databaseontwerp

Verwijderingsanomalie

Verwijderen van record(s) leidt tot onbedoeld dataverlies

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

Als we student 230 verwijderen, wat gebeurt er met de data over Cleaning Data in R?

Databaseontwerp

Data-anomalieën

Wat riskeren we als we niet genoeg normaliseren?

1. Update-anomalie

2. Invoeg-anomalie

3. Verwijderingsanomalie

Hoe meer genormaliseerd, hoe minder gevoelig voor anomalieën

Vergeet de nadelen van normalisatie uit de vorige video niet

Databaseontwerp

Laten we oefenen!

Databaseontwerp

Preparing Video For Download...