Las formas normales son una serie de estructuras con las que un esquema de base de datos puede cumplir o no.
Las formas normales clásicas son:
- Primera forma normal: 1FN
- Segunda forma normal: 2FN
- Tercera forma normal: 3FN
- Forma normal Boyce-Codd: FNBC
- Cuarta forma normal: 4FN
- Quinta forma normal: 5FN
Cada forma normal es más fuerte que las anteriores. El cumplimiento de cualquier forma implica el cumplimiento de las anteriores.
En 1972, E. Codd propuso el concepto de normalización como el proceso a través del cual se convierte un esquema de base de datos en uno equivalente, y que cumple con una determinada forma normal.
Para normalizar una nueva relación, debemos partir de un conjunto de Dependencias Funcionales asociado que supondremos definido por el diseñador de la base de datos. Normalmente, este conjunto se denota con .
Descomposición
Partimos del concepto de la relación universal . Esta engloba todos los atributos del mundo real que nuestro modelo representa.
Dada una relación universal y un conjunto de dependencias funcionales asociado, decimos que el conjunto de relaciones es una descomposición de cuando todos los atributos de la relación se conservan.
Si una descomposición cumple que para toda instancia posible de , la junta de las proyecciones sobre permite recuperar la misma instancia de relación, entonces decimos que la descomposición preserva la información. Cuando una descomposición no preserva la información, siempre su reconstrucción genera tuplas de más (nunca de menos, pues siempre podemos realizar un producto cartesiano).
Diremos que la descomposición preserva las dependencias funcionales cuando toda dependencia funcional puede inferirse a partir de las dependencias funcionales definidas en los .
Proyección de Dependencias Funcionales
Al descomponer una relación con un conjunto de dependencias funcionales en , es necesario saber qué dependencias funcionales se preservan.
Las dependencias funcionales que se preservan son las que surgen de la proyección de sobre los atributos de cada relación . Donde el conjunto de dependencias funcionales de será la unión de cada proyección.
Diremos que se preservan las dependencias funcionales cuando ambos conjuntos son equivalentes:
Primera Forma Normal
Un esquema de base de datos está en 1FN cuando los dominios de todos sus atributos solo permiten valores atómicos y monovaluados.
Actualmente, se considera que en el modelo relacional todos los atributos deben ser monovaludados y atómicos. Con este criterio, todo esquema relacional está ya en 1FN.
Si no es el caso, y el esquema tiene atributos multivaluados, entonces tendremos tres soluciones:
- Colocar una tupla nueva por cada valor, repitiendo los otros atributos.
- Suponer un máximo de valores, y colocar un atributo por cada uno.
- Crear una nueva relación , que relacione la tupla original con cada uno de los valores.
Segunda Forma Normal
Un atributo primo de una relación es aquel que es parte de alguna clave candidata de la relación. Decimos que una relación está en 2FN cuando todos sus atributos no primos tienen dependencia funcional completa de las claves candidatas.
Las claves candidatas son aquellos conjuntos de atributos que implican a todo el resto de atributos. De esta forma, la repetición de dos elementos con los mismos atributos en una clave candidata implicaría que el resto de atributos también serían iguales, por lo que no afectaría la relación.
Sea una relación que no está en 2FN. Luego, tendrá un conjunto de atributos no primos, tal que este tiene dependencia funcional completa de , donde es un subconjunto de una clave candidata . Esto nos obliga a incluir cada vez que está , incluso si esto se repite en múltiples tuplas.
Para resolverlo, debemos generar una nueva relación con clave primaria y atributos , y eliminar de la relación .
Supongamos una tabla , donde la asignatura y el profesor son claves primarias, y el departamento depende de forma completa de la asignatura. Si yo quiero representar que un nuevo profesor da una asignatura, debo incluir el departamento (información redundante, ya que ya está en otras tuplas de la misma relación).
Para solucionarlo, debo generar una nueva tabla que permita abstraer esta información: . Luego, la tabla de docencia se vería como . Para agregar un nuevo profesor a una materia, ahora no debo repetir el departamento.
Tercera Forma Normal
Decimos que una relación está en 3FN cuando todos sus atributos no primos tienen dependencia funcional transitiva de las claves candidatas. Es decir, no existen atributos no primos que dependen de un conjunto de atributos que no son clave candidata.
Una definición equivalente es que para toda dependencia funcional no trivial , o bien es superclave, o bien solo contiene atributos primos.
Sea una relación que no está en 3FN. Luego, tendrá un conjunto de atributos no primos, tal que es transitiva a través de . Esto nos obliga a incluir cada vez que está , incluso si se repite en múltiples tuplas.
Para resolverlo, debemos generar una nueva relación con clave primaria y atributos , y eliminar de la relación .
Algoritmo de 3FN
- Definimos el conjunto de esquemas inicialmente vacío
- Primero, debemos encontrar un cubrimiento minimal de F_\min para .
- Por cada dependencia funcional con conjunto del lado izquierdo:
- Creamos un esquema de relación donde son las únicas dependencias funcionales en F_\min con el conjunto del lado izquierdo.
- Calculamos como todas las dependencias funcionales (sin redundancias) que puedan ser formadas a partir de los atributos seleccionados. Esto implica también descubrir las dependencias implicitas.
- Ampliamos el conjunto de esquemas
- Hallamos todas las claves candidatas de . Si ningún esquema contiene una clave candidata de , entonces tomamos una de las claves candidatas y ampliamos el conjunto de esquemas con
- Si los atributos de una relación están totalmente incluidos en los de otra relación, entonces es redundante (por lo que podemos eliminarla). Mientras haya relaciones redundantes en , entonces la quitamos con
Forma Normal Boyce-Codd
Decimos que una relación está en FNBC si no existen relaciones transitivas. Sin importar si incluye atributos primos o no. Esta forma nos permite resolver situaciones donde tendremos múltiples claves candidatas que se solapan.
Dicho de otra forma, para todas las dependencias funcionales , entonces es clave (o superclave).
Sea una relación que no está en FNBC. Luego, tendrá un conjunto de atributos , tal que es transitiva a través de . Esto nos obliga a incluir cada vez que está , incluso si se repite en múltiples tuplas.
Para resolverlo, debemos generar una nueva relación con clave primaria y atributos , y eliminar de la relación .
Este tipo de descomposiciones no nos asegura conservar la dependencia funcional.
Algoritmo de FNBC
- Definimos el conjunto de esquemas inicialmente con
- Mientras que existe una relación en el conjunto de esquemas que no esté en FNBC, entonces:
- Encontramos una dependencia funcional contenida en que viola la FNBC.
- Calculamos su clausura .
- Eliminamos la relación: .
- Agregamos una nueva relación para representar la dependencia funcional y sus atributos implicados: .
- Agregamos una nueva sin los atributos implicados por , para no perder ninguna dependencia funcional.
- Debemos proyectar las dependencias funcionales de en ambas nuevas relaciones, para preservar las dependencias funcionales
- Todos los esquemas de estarán en FNBC, y se podrán juntar para preservar la información original.
Cuarta Forma Normal
Una relación está en 4FN cuando para toda dependencia multivaluada no trivial , es clave (o superclave).
Para resolverlo, debemos generar una nueva relación con clave primaria tal que esté relacionada con cada elemento distinto de con el cual se relaciona en alguna tupla.
Es común que las dependencias multivaluadas provengan de la existencia de atributos multivaluados en el modelo conceptual, o de interrelaciones no capturadas
Las relaciones en 4FN están automáticamente en FMBC, pues todas las dependencias multivaluadas son, a su vez, dependencias funcionales. Esto se debe a que las dependencias multivaluadas son un caso genérico de las dependencias funcionales.
Quinta Forma Normal
Una relación está en 5FN si y solo si para toda dependencia de junta no trivial (tal que ningún ) todos los son superclaves.
Observemos que una dependencia de junta implica una dependencia multivaluada, que implica una dependencia funcional.