Diseño de bases de datos
Lis Sulmont
Curriculum Manager
Identifica grupos de datos repetidos y crea 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.
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)
Cada registro debe ser único, sin filas duplicadas. Cada celda debe contener un valor.
{{1}}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 |
| 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 |
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.
{{1}}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 |
| 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 |
Cumple con 2NF Sin dependencias transitivas: las columnas que no son clave no pueden depender de otras columnas que tampoco son clave.
{{1}}Datos iniciales
| Course_id (PK) | Instructor_id | Instructor | Tech |
|----------------|---------------|---------------|--------|
| 2001 | 560 | Nick Carchedi | Python |
| 2345 | 658 | Ginger Grant | SQL |
| 6584 | 999 | Chester Ismay | R |
| 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 |
¿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
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.
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.
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?
¿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