# PostgreSQL Normalización
Conozcamos como normalizar nuestra base de datos.
# Normalización
- fuente #01 (opens new window)
- La normalización es el proceso de seguir una serie de reglas (formas normales), para asegurar que nuestras relaciones estén ordenadas y regularizadas con el fin de mejorar dichas relaciones.
- Están enfocadas en evitar la redundancia de datos e inconsistencias en el diseño de nuestras tablas.
# ¿Por qué normalizar?
- Evitar redundancia de datos
- Proteger la integridad de los datos
- Evitar problemas de actualiación.
¿Cómo normalizar una DB?
- Se siguen en un proceso ordenado las formas normales (FN).
- Por ende partimos con 1FN, 2FN... hasta la 6FN.
- Lo tradicional es llegar hasta la 3FN. :::
# Ejemplo
# 1FN (primera forma normal)
- Cada campo o atributo deben ser atómicos, es decir debe contener un único valor.
- No pueden haber grupos repetitivos.
- Existir una llave primaria.
# Solución 1
- Todos los datos son atómicos
- Pero telefono 1 y telefono 2 es un grupo repetitivo, esto genera:
- Pérdida de espacios de memoría.
- Limitar a solo dos teléfonos nuesta DB.
# Solución 2
# Redundancia solución 2
- Podemos notar que si un paciente pide otra hora médica genera redundancia en nuestra tabla. Por ende tenemos que separar en una nueva relación:
TIP
Antes de pasar a 2FN, conozcamos los tipos de dependencia.
# Tipos de dependencia
- Dependencia Funcional: Los atributos dependen de la clave primaria.
- B y C dependen funcionalmente de A (clave primaria).
- Para que exista B debe existir A. y lo mismo para C.
- Dependencia Transitiva:
- B depende funcionalmente de A.
- C depende de B, pero como B depende de A, C tiene una dependencia transitiva de A.
# 2FN (segunda forma normal)
- Debe cumplir con 1FN.
- Cada atributo debe depender de la llave primaria, y no solo una parte de ella.
- Los atributos que dependen de manera parcial de la llave primaria deben ser eliminados o almacenados en una nueva entidad.
# Llave primaria compuesta
- compuesta de "idpaciente", "especialidad" y "fecha atencion"
- si analizamos "area" esta depende exclusivamente de la especilidad y no del id del paciente, por ende no cumple con la 2FN (Cada atributo debe depender de la llave primaria, y no solo una parte de ella.)
# 3FN (tercera forma normal)
- Debe cumplir con 2FN.
- Eliminar toda dependencia transitiva.
# ¿Desnormalizar?
- Dependerá de cada caso, si es más factible duplicar datos que realizar múltiples relaciones que pueden ser complejas.