# MySQL/Optimización/Normalización

La Teoría de Normalización se basa en desordenar o reordenar las relaciones existentes en otras más sencillas y cuya principal propiedad sea la ausencia de fallos en la inserción, borrado o modificación de datos; este proceso se realiza mediante el proceso de transformar datos complejos de nuestra Base de Datos a un conjunto de estructuras de datos más pequeñas, que además de ser mas simples y estables, son más fáciles de mantener.
La Teoría de la Normalización se basa en las dependencias funcionales y en las formas normales.

## Objetivos de la Normalización

* Organizar los datos en grupos lógicos de tal manera que cada grupo describa una pequeña parte del todo.
* Minimizar la cantidad de datos duplicados almacenados en una base de datos.
* Mejorar la organización de los datos de tal manera que, cuando se necesite introducir modificaciones, el cambio solo deba aplicarse en un lugar.
* Construir una base de datos a la que se pueda acceder de forma rápida y donde sea posible manipular los datos con la máxima eficiencia y sin comprometer su integridad.

## Dependencia funcional

La Dependencia funcional se puede denominar como la conexión existente entre uno o más atributos. Por ejemplo si se conoce le valor de DNI tiene una conexión con Apellido o Nombre. Las dependencias funcionales del sistema se escribe utilizando una flecha, de la siguiente manera:
FechaDeNacimiento->Edad
De la normalización (lógica) a la implementación (física o real) puede ser sugerible tener estas dependencias funcionales para lograr la eficiencia en las tablas.
* Dependencia funcional completa o plena: Sobre un descriptor compuesto X (X1, X2) podremos afirmar que y posee dependencia tiene dependencia funcional completa o plena de X si sólo depende funcionalmente de X pero no depende de ningún subgrupo de éste. Se representaría mediante el grafo X->y
* Dependencia funcional transitiva: Si tenemos una correspondencia M (X, y, z) en la que existen dependencias funcionales entre los elementos del interior del paréntesis, de manera que, X tiene una dependencia funcional con Y e y con Z pero Y no tiene dependencia funcional con X. Por tanto decimos que Z tiene una dependencia transitiva respecto de X a través de Y.

## Formas Normales

Denominaremos como Formas Normales a una serie de reglas que sirven para ayudar a los diseñadores de bases de datos a desarrollar un esquema que minimice los problemas de lógica. Dichas reglas son consecutivas, es decir, cada regla está basada en la que la antecede.
Existen seis de niveles normalización: Primera Forma Normal (1FN), Segunda Forma Normal (2FN), Tercera Forma Normal (3FN), Forma Normal de Boyce-Codd (FNCB), Cuarta Forma Normal (4FN) y Quinta Forma Normal (5FN).
Si se cumple la primera regla, se dice que la base de datos está en la "primera forma normal". Si se cumplen las tres primeras reglas, la base de datos se considera que está en la "tercera forma normal". Aunque son posibles otros niveles de normalización (ya que existe hasta una "quinta forma normal"), la tercera forma normal se considera el máximo nivel para la mayor parte de las aplicaciones.

### Primera Forma Normal (1FN)

La regla de la Primera Forma Normal establece que las columnas repetidas deben eliminarse y colocarse en tablas separadas.
Poner la base datos en la Primera Forma Normal resuelve el problema de los encabezados de columnas múltiples. Muy a menudo, los diseñadores de bases de datos inexpertos harán algo similar a la tabla no normalizada. Una y otra vez, crearán columnas que representen los mismos datos.
La normalización ayuda a clarificar la base de datos y a organizarla en partes más pequeñas y más fáciles de entender. En lugar de tener que entender una tabla gigantesca y monolítica que tiene muchos diferentes aspectos, sólo tenemos que entender los objetos pequeños y más tangibles, así como las relaciones que guardan con otros objetos también pequeños.

### Segunda Forma Normal (2FN)

La regla de la Segunda Forma Normal establece que todas las dependencias parciales se deben eliminar y separar dentro de sus propias tablas. Una dependencia parcial es un término que describe a aquellos datos que no dependen de la clave primaria de la tabla para identificarlos.
Una vez alcanzado el nivel de la Segunda Forma Normal, se controlan la mayoría de los problemas de lógica. Podemos insertar un registro sin un exceso de datos en la mayoría de las tablas.

### Tercera Forma Normal (3FN)

En esta forma todas las columnas que no son clave son funcionalmente dependientes por completo de la clave primaria y no hay dependencias transitivas (existen columnas que no son clave que dependen de otras columnas que tampoco son clave).
Cuando las tablas están en la Tercera Forma Normal se previenen errores de lógica cuando se insertan o borran registros. Cada columna en una tabla está identificada de manera única por la clave primaria (dependencia exclusiva de la clave primaria), y no deben haber datos repetidos. Esto provee un esquema limpio y elegante, que es fácil de trabajar y expandir.

### Forma Normal de Boyce-Codd (FNCB)

La Forma Normal de Boyce-Codd requiere que no existan dependencias funcionales de los atributos que no sean un conjunto de la clave candidata. La Segunda Forma Normal y la Tercera Forma Normal eliminan las dependencias parciales y transitivas de la clave primaria respectivamente pero podrían existir respecto a otras claves candidatas. Solo hay que comprobar si hay 2 ó más claves candidatas. Todos los campos dependen de cualquiera de los otros campos. La solución consistiría en partir la tabla agrupando las claves candidatas, y dejar el resto de los campos en la tabla principal.

### Cuarta Forma Normal (4FN)

Esta forma tiene como objetivo la eliminación de multivalores en las claves candidatas, es decir, no existen dependencias multivaluadas.

### Quinta Forma Normal (5FN)

Para poder llegar hasta esta forma, en primer lugar debe estar en 4FN y además no deben existir restricciones impuestas por el creador de la Base de Datos. Una restricción de este tipo puede ser por ejemplo que una tabla se divida en subtablas. Esta forma normal tiene poca aplicación práctica porque dificulta el diseño ya que genera un número enorme de tablas.