Formas normales

Diseño de bases de datos

Lis Sulmont

Curriculum Manager

Normalización

Identificar grupos de datos repetidos y crear nuevas tablas para ellos.

Una definición más formal:

Los objetivos de la normalización son:

  • Ser capaz de caracterizar el nivel de redundancia en un esquema relacional.
  • Proporcionar mecanismos para transformar esquemas con el fin de eliminar redundancias.
1 Database Design, 2.ª edición, por Adrienne Watt
Diseño de bases de datos

Formas normales (NF)

Ordenado de menos a más normalizado:

  • Primera forma normal (1NF)
  • Segunda forma normal (2NF)
  • Tercera forma normal (3NF)
  • Forma normal elemental (EKNF)
  • Forma normal de Boyce-Codd (BCNF)

$$

  • Cuarta forma normal (4NF)
  • Forma normal de tupla esencial (ETNF)
  • Quinta forma normal (5NF)
  • Forma normal de clave de dominio (DKNF)
  • Sexta forma normal (6NF)
1 https://en.wikipedia.org/wiki/Database_normalization
Diseño de bases de datos

Reglas 1NF

  • Cada registro debe ser único, sin filas duplicadas.
  • Cada celda debe contener un valor.

Datos iniciales

| 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        |
Diseño de bases de datos

En 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  | 
Diseño de bases de datos

2NF

  • Debe cumplir con 1NF AND
    • Si la clave principal es una columna
      • entonces cumple automáticamente con 2NF.
    • Si hay una clave primaria compuesta
      • entonces cada columna que no sea clave debe depender de todas las claves.

Datos iniciales

| 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     |
Diseño de bases de datos

En 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 |
Diseño de bases de datos

3NF

  • Cumple con 2NF
  • Sin dependencias transitivas: las columnas que no son clave no pueden depender de otras columnas que tampoco son clave.

Datos iniciales

| Course_id (PK) | Instructor_id | Instructor    | Tech   |
|----------------|---------------|---------------|--------|
| 2001           | 560           | Nick Carchedi | Python |
| 2345           | 658           | Ginger Grant  | SQL    |
| 6584           | 999           | Chester Ismay | R      |
Diseño de bases de datos

En 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 |
Diseño de bases de datos

Anomalías en los datos

¿Qué se arriesga si no hay una normalización suficiente?

1. Anomalía de actualización

2. Anomalía de inserción

3. Anomalía de eliminación

Diseño de bases de datos

Anomalía de actualización

Incoherencia de datos causada por la redundancia de datos al actualizar

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

Para actualizar el correo electrónico del estudiante 520:

  • Es necesario actualizar más de un registro; de lo contrario, habrá inconsistencias.
  • Los usuarios que realicen actualizaciones deben conocer la redundancia.
Diseño de bases de datos

Anomalía de inserción

No se puede añadir un registro debido a la falta de atributos.

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

No se puede insertar un estudiante que se ha inscrito pero no se ha matriculado en ningún curso.

Diseño de bases de datos

Anomalía de eliminación

La eliminación de registros provoca la pérdida involuntaria de datos.

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

Si eliminamos al estudiante 230, ¿qué ocurre con los datos de Cleaning Data in R?

Diseño de bases de datos

Anomalías en los datos

¿Qué se arriesga si no hay una normalización suficiente?

1. Anomalía de actualización

2. Anomalía de inserción

3. Anomalía de eliminación

Cuanto más normalizada esté la base de datos, menos propensa será a las anomalías en los datos.

No olvides las desventajas de la normalización del último vídeo.

Diseño de bases de datos

¡Vamos a practicar!

Diseño de bases de datos

Preparing Video For Download...