Un Ejemplo Simple de Normalización de Bases de Datos Relacionales (Hasta 3FN)
Un Ejemplo Simple de Normalización de Bases de Datos Relacionales (Hasta 3FN)
Un Ejemplo Simple de Normalización de Bases de Datos Relacionales (Hasta 3FN)
Miguel-Angel Sicilia
This work is produced by The Connexions Project and licensed under the
†
Creative Commons Attribution License
Abstract
Se describe un ejemplo sencillo (de una sola tabla) de aplicación de la normalización de bases de datos
relacionales.
El modelo relacional de bases de datos se basa en un modelo formal especicado de acuerdo a la teoría de
conjuntos. Una base de datos relacional puede considerarse como un conjunto de relaciones o tablas de la
forma R(A1, ..., An), donde R es el nombre de la relación, que se dene por una serie de atributos Ai.
Sobre las tablas relacionales se pueden denir diferentes restricciones. La integridad de entidad es una
restricción que nos indica que cada entidad representada por una tupla tiene que ser diferente de las demás
en su relación, es decir, debe haber algunos atributos cuyos valores identiquen unívocamente las tuplas. La
integridad referencial indica que una clave ajena solo debe contener valores que o bien sean nulos, o bien
existan en la relación referenciada por la clave ajena.
El proceso de normalización consiste en comprobar en secuencia si el esquema original está en 1FN, 2FN y
3FN, analizando las dependencias funcionales en cada paso.
∗ Version 1.1: Nov 19, 2008 12:10 pm US/Central
† http://creativecommons.org/licenses/by/2.0/
http://cnx.org/content/m18350/1.1/
Connexions module: m18350 2
Tenemos una empresa pública donde los puestos de trabajo están regulados por el Estado, de modo que las
condiciones salariales están determinadas por el puesto. Se ha creado el siguiente esquema relacional
EMPLEADOS(nss, nombre, puesto, salario, emails) con nss como clave primaria.
Table 1
Una tabla está en 1FN si sus atributos contienen valores atómicos. En el ejemplo, podemos ver que el
atributo emails puede contener más de un valor, por lo que viola 1FN.
En general, tenemos una relación R con clave primaria K. Si un atributo M viola la condición de 1FN,
tenemos dos opciones.
En general, esta solución pasa por sustituir R por una nueva relación modicada R', en la cual:
• El atributo M que violaba 1FN se elimina.
• Se incluye un nuevo atributo M' que solo puede contener valores simples, de modo que si R'[M'] es uno
de los valores que teníamos en R[M], entonces R'[K] = R[K]. En otras palabras, para una tupla con n
valores duplicados en M, en la nueva relación habrá n tuplas, que sólo varían en que cada una de ellas
guarda uno de los valores que había en M.
• La clave primaria de R' es (K, M'), dado que podrá haber valores de K repetidos, para los valores
multivaluados en M.
Siguiendo el ejemplo, tendríamos el siguiente esquema para la nueva tabla EMPLEADOS'(a) con clave primaria
(nss, email):
Table 2
http://cnx.org/content/m18350/1.1/
Connexions module: m18350 3
Table 3
Y además tendríamos una nueva tabla EMAILS con clave primaria (nss, email):
nss email
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
... ...
Table 4
http://cnx.org/content/m18350/1.1/
Connexions module: m18350 4
En general, tendremos que observar los atributos no clave que dependan de parte de la clave.
Para solucionar este problema, tenemos que hacer lo siguiente para los gupos de atributos con dependencia
incompleta M:
Eliminar de R el atributo M.
Crear una nueva relación N con el atributo M y la parte de la clave primaria K de la que depende, que
llamaremos K'.
La clave primaria de la nueva relación será K'.
Siguiendo el ejemplo anterior, crearíamos una nueva relación con los atributos que tienen dependencia
incompleta:
nss email
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
... ...
Table 6
Como vemos, la solución a la que llegamos es la misma que en la otra opción de solución para el problema
de 1FN.
http://cnx.org/content/m18350/1.1/
Connexions module: m18350 5
puesto->salario
Por lo tanto la descomposición sería la siguiente:
Table 7
En la nueva tabla PUESTOS, la clave sería el puesto, que también queda como clave ajena referenciando
la tabla EMPLEADOS. El resto de las tablas quedan como estaban.
http://cnx.org/content/m18350/1.1/