Documentos de Académico
Documentos de Profesional
Documentos de Cultura
relacional
Documento original
Jorge Sánchez Asenjo (2009)
Ampliación y Modificación
Joaquín Álvarez García (2011)
Pilar García López (2012 y ss.)
Tema 5: Normalización y álgebra relacional
Los modelos de datos son el instrumento principal para obtener estos, y son utilizados
para la representación y el tratamiento de los problemas. En las unidades anteriores
hemos visto cómo debe ser llevado a cabo el diseño conceptual, obteniendo el
diagrama E/R para transformarlo después en un modelo relacional en el que están
definidas cada una de las tablas con sus columnas correspondientes, y la clave principal
que garantiza la unicidad de las filas.
Es una estrategia de diseño de abajo hacia arriba: se parte de los atributos y estos se
van agrupando en relaciones (tablas) según su afinidad.
La normalización se lleva a cabo en una serie de pasos. Cada paso corresponde a una
Forma Normal (FN) que tiene unas propiedades.
• Inicialmente Codd propuso las primeras formas normales (1FN, 2FN y 3FN)
basadas en las dependencias funcionales.
• Después, en 1974, se definió la forma normal de Boyce–Codd (FNBC), también
basada en dependencias funcionales.
• Posteriormente, en 1977 y 1979, Fagin propuso la 4ª y la 5ª Formas Normales
(4FN y 5FN), basadas en otros tipos de dependencias.
• En los últimos años se habla de otras formas normales más.
De forma genérica podemos decir que una tabla o relación (R) se compone de un
conjunto de atributos (A) y sus dependencias (DF):
R (A, DF).
Tanto las relaciones (R) como los atributos (A) podemos identificarlos de las
especificaciones del cliente, pero para las dependencias (DF), tendremos que ahondar
en el valor semántico de esos atributos y no pueden obtenerse de manera automática en
una tabla determinada.
Las dependencias funcionales reflejan enlaces semánticos permanentes entre los datos
que podemos concretar en:
Si cada persona tiene un único DNI y si además suponemos que cada persona tiene
un único teléfono y una única dirección, y que además trabaja en un único
departamento de la empresa, podemos decir que NOMBRE, DIRECCION,
TELEFONO, DEPARTAMENTO depende funcionalmente del DNI y lo
representaremos de la forma siguiente:
Se representa por X Y.
Y depende funcionalmente de X.
También se dice que X determina a Y o que X implica a Y.
Veamos un ejemplo.
El nombre del estudiante viene determinado por la clave primaria, pero si eliminásemos
el atributo asignatura, el nombre del estudiante sigue estando determinado por el
CodEstudiante. En este caso existe una dependencia funcional parcial del nombre con
respecto a codEstudiante + asignatura.
X Y (Y depende funcionalmente de X)
Y Z (Z depende funcionalmente de Y)
En estas condiciones se dice que Z tiene una dependencia funcional transitiva respecto a
X, a través de Y. Es decir, un descriptor Z es transitivamente dependiente de otro X si se
puede conocer por diferentes vías, una directamente y otra a partir de otro descriptor
intermedio Y.
X Y Z
NOMBRE_ALUMNO POBLACION
CODIGO_CLIENTE CUENTA_CORRIENTE
1234 2056-3202-2000335588
1234 1023-2202-4500235677
3452 2786-6782-9265623434
5231 8563-5522-3499324233
Podemos apreciar como para el CODIGO_CLIENTE 1234, tenemos dos filas diferentes. Se
dice que CODIGO_CLIENTE multidetermina a CUENTA_CORRIENTE.
CODIGO_CLIENTE CUENTA_CORRIENTE
Esta teoría se basa en la aplicación de las Formas Normales, que son un conjunto de
restricciones sobre las tablas que permiten evitar los problemas de redundancia y
anomalías en la actualización, inserción y borrado de datos. De esta manera
transformamos, si es necesario, las tablas obtenidas directamente del modelo
Entidad/Relación, en un conjunto de tablas más simples y fáciles de mantener.
Codd definió en 1970 la primera forma normal, desde ese momento aparecieron la
segunda, tercera, la Boyce-Codd, la cuarta y la quinta forma normal e incluso algunos
libros hablan de más formas normales, sin embargo se considera que con llegar a la
forma normal de Boyce-Codd es suficiente, más cuando no existe consenso de la
operatividad del resto de las formas normales
Una tabla puede encontrarse en primera forma normal (1FN) y no en segunda forma
normal (2FN), pero no al contrario. Es decir, cada forma normal incluye a las anteriores.
La primera forma normal es inherente al modelo relacional y dice: “Una relación está en
Primera Forma Normal (1FN) si y sólo si todos sus atributos son atómicos”.
La tabla siguiente no se encuentra en la Primera Forma Normal pues tiene tuplas con
más de un valor en los atributos ASIGNATURA y NOTA.
Como el modelo relacional no admite esta posibilidad, tendremos que eliminar los
grupos repetitivos. Hay dos técnicas para eliminar grupos repetitivos:
Caso A.- Si sabemos el máximo de asignaturas por alumno podemos crear tantas
columnas como asignaturas y en consecuencia tantas columnas como notas.
Caso B.- Creamos una tupla para cada asignatura del alumno/a.
La Segunda Forma Normal dice: “Una relación está en Segunda Forma Normal (2FN) si y
sólo si está en 1FN y todos los atributos no clave dependen por completo de la clave
primaria”.
Redundancia de datos: Con cada alumno de una misma asignatura repetimos toda
la información acerca del CURSO Y AULA.
Para conseguir que la tabla pase a cumplir la Segunda Forma Normal hay que eliminar
las dependencias parciales de la clave primaria, descomponiendo la relación dada en
otras relaciones que sí estén en 2FN. Para ello, se separan los atributos que son
funcionalmente dependientes, y se ponen en una nueva tabla junto con sus
determinantes (los atributos de la clave primaria de los que dependen).
Dependencias:
DNI NOMBRE, APELLIDOS
DNI, COD_ASIGNATURA NOTA
COD_ASIGNATURA CURSO, AULA
Nota.- Si una tabla está en 1FN y su clave primaria es simple (tiene un solo atributo),
entonces también está en 2FN.
La Tercera Forma Normal dice: “Una relación está en tercera forma normal (3NF) si y
sólo si está en 2NF y todos los atributos no claves dependen de manera no transitiva
de la clave primaria”
Es decir, una relación está en ·FN si sus atributos no clave son mutuamente
independientes (no existe ningún atributo no clave que dependa funcionalmente de
alguna combinación del resto de atributos no clave) y además sean por completo
dependientes funcionalmente de la clave primaria.
COD_ASIGNATURA CURSO
CURSO AULA
La solución pasa por una descomposición de la relación dada en otras relaciones que sí
estén en 3FN. Realizamos una descomposición de la relación dada en otras de tal
manera que desaparezca dicha dependencia, es decir, separando el atributo (o
atributos) que producen la dependencia funcional transitiva en una nueva.
COD_ASIGNATURA CURSO
CURSO AULA
Se define determinante en una relación (tabla) a un atributo del cual depende de forma
funcional y completa cualquier otro atributo de la relación.
La Forma Normal de Boyce-Codd dice: “Una relación está en Forma Normal Boyce-Codd
(BCNF) si y solo si está en 3FN y cada dependencia funcional no trivial tiene una clave
candidata como determinante”.
La Cuarta Forma Normal, enunciada por Fagin, dice que una relación (R) está en Cuarta
Forma Normal (4NF) si y sólo si, las únicas dependencias multivaluadas no triviales son
aquellas en las que una clave multidetermina un atributo.
TABLA CURSOS
CURSO PROFESOR MATERIAL
17 Eva 1
17 Eva 2
17 Julia 1
17 Julia 2
25 Eva 1
25 Eva 2
25 Eva 3
En este ejemplo se está considerando que los profesores van a utilizar todos los
materiales de cada curso que impartan (el curso 17 tiene 2 materiales y el curso 25
tiene 3). Por lo tanto, en la relación CURSOS hay redundancia de datos.
Para el par CURSO y PROFESOR podemos saber los materiales que se van a utilizar por el
curso que imparte y no por el profesor. Por este motivo, los materiales dependen de
forma multivaluada del curso, pero no del profesor.
CURSO MATERIAL
La Quinta Forma Normal, enunciada por Fagin y también conocida como Forma Normal
de Proyección-Unión, dice: “Una relación (R) se encuentra en Quinta Forma Normal si, y
sólo si, está en 4FN y toda dependencia de reunión en la relación es consecuencia de las
claves candidatas”.
Esta Quinta Forma Normal, se ha diseñado para reducir redundancia en las bases de
datos relacionales que guardan hechos multi-valores aislando semánticamente
relaciones múltiples.
La mayoría de los expertos coinciden en que las tablas que están en la 4FN se
encuentran también en 5FN a excepción de restricciones semánticas muy especiales.
Lo que nos está diciendo es que una relación sólo está en Quinta Forma Normal si lo
está en cuarta y no puede tener una descomposición sin pérdidas en cualquier
número de tablas más pequeñas.
El concepto de dependencia de reunión (JOIN) significa que una tabla, después de que
se ha descompuesto en varias tablas más pequeñas, debe poderse reunirlas de nuevo
para formar la tabla original.
Tenemos una tabla de empleados que trabajan en proyectos realizando unas tareas
concretas.
Subdividiendo la tabla en dos tablas, como hubiéramos hecho con la Cuarta Forma
Normal tendríamos:
Pero cuando se necesite reconstruir la tabla original a partir de las tablas anteriores,
vemos que no se obtiene la misma información de la tabla original.
1 2 Programación
2 1 Diseño <- Dato Falso
2 1 Programación
Para evitar el problema anterior se aplica la 5FN, que añade una tabla más para
completar la información de la tabla original, quedando de la siguiente manera:
Resumiendo, una tabla está en Quinta Forma Normal si hay una descomposición de
esa tabla que muestre la misma información que la original.
En 1981, Fagin describió un enfoque diferente para las tablas normalizadas cuando
propuso la Forma Normal Dominio-Clave (FNDC), la cual describe la meta final al diseñar
una base de datos.
Si una tabla está en la DKNF, también debe estar en todas las demás formas normales.
La dificultad es que no hay un método definido para hacer que una tabla esté en la
DKNF. De hecho, es posible que algunas tablas nunca puedan convertirse a la DKNF.
La meta de la DKNF es hacer que cada tabla represente un tema y que todas las
restricciones se expresen en términos de restricciones de dominios y de claves. Es
decir, todas las restricciones se describen de manera explícita por medio de las reglas
de las tablas.
Una restricción del dominio especifica los valores permitidos para un atributo dado,
mientras que una restricción de clave especifica los atributos que identifican
únicamente una fila en una tabla dada.
PERSONAS_RICAS
DNI Persona rica Tipo de persona rica Valor neto en euros
123 Millonario excéntrico 124,543,621
456 Multimillonario malvado 6,553,228,893
789 Multimillonario excéntrico 8,829,462,998
012 Millonario malvado 495,565,211
Asumiendo que el dominio para la 'DNI Persona rica consiste en los DNI's de toda la gente
rica en una muestra predefinida de gente rica; el dominio para el Tipo de persona rica
Hay una restricción que liga el Tipo de persona rica al Valor neto en dólares, incluso
aunque no podamos deducir uno del otro. La restricción dicta que un Millonario
excéntrico o Millonario malvado tendrá un valor neto de 1.000.000 a 999.999.999
inclusive, mientras que un Multimillonario excéntrico o un Multimillonario malvado
tendrá un valor neto de 1.000.000.000 o más. Esta restricción no es ni una restricción de
dominio ni una restricción de clave; por lo tanto no podemos confiar en las restricciones
de dominio y las de clave para garantizar que una combinación errónea de Tipo de
persona rica / Valor neto en euros no tenga cabida en la base de datos.
La violación de la DKNF podría ser eliminada alterando dominio Tipo de persona rica
para hacer que sea consistente con solo dos valores, 'Malvado' y 'Excéntrico' (el
estatus de persona rica como un millonario o un multimillonario viene implícito por
su Valor neto en dólares, así no se pierde ninguna información útil).
Para definir un grupo de tablas en la DKNF, primero hay que trabajar en las reglas de las
formas normales. Después, confirmar que se tiene una lista completa de las
restricciones. A continuación, asegurarnos que las restricciones están expresadas en
términos de restricciones de dominios y de claves. Revisar las claves primarias para
confirmar que sean únicas; y que se han capturado todas las relaciones muchos a
muchos. Comprobar que no haya reglas ocultas ni dependencias. Establecer relaciones
con claves foráneas para imponer las reglas de existencia y para hacer coincidir los
datos en las otras tablas.
Una segunda opción es denormalizar el diseño de datos lógico, pero en este caso
le trasladamos al programador la responsabilidad de que la base de datos de no
llegue a ser inconsistente. Esto se hace creando reglas en la base de datos
llamadas restricciones, que especifican cómo las copias redundantes de
información se deben mantener sincronizadas. En este caso, el rendimiento en las
consultas es bueno, pero peor que la versión normalizada en las actualizaciones
debido a la evaluación de restricciones.
El álgebra relacional fue introducida por E.F. Codd como un conjunto de operaciones
que actúan sobre las tablas produciendo como resultado otras tablas. Este conjunto
de operaciones permite actuar sobre una base de datos para pasar de un estado inicial a
un estado final. El álgebra relacional constituye la parte dinámica del modelo relacional.
El álgebra relacional presentado por Codd contenía ocho operadores, aunque el paso
del tiempo ha introducido numerosos cambios, proponiéndose nuevos operadores y
cambios en los primitivos.
Selección
Operaciones Unarias
Proyección
Operaciones Básicas Unión
Operaciones Binarias Diferencia
Producto cartesiano
Intersección
Operaciones Derivadas División o Cociente
Reunión, Combinación o Join
En las operaciones unarias se utiliza una tabla de entrada para obtener el resultado. En
las binarias se emplean dos tablas.
Las operaciones derivadas son binarias que necesitan de las operaciones básicas.
Selección.- Esta operación permite obtener otra tabla formada por un subconjunto de
filas de una tabla inicial, manteniendo todas sus columnas. Las filas resultantes son las
que cumplen una condición dada. En ella se pueden utilizar los operadores booleanos
AND (Y), OR (O) y NOT (NO). Se representa por σcondición(tabla)
Proyección.- Esta operación permite obtener una nueva tabla a partir de otra con el
subconjunto de columnas que se indiquen. Las filas duplicadas, si las hubiese sólo
aparecerán una vez. Se representa por πcolumna1, columna2, … (tabla)
NUMERO_MATR CURSO
221 501
222 502
223 501
224 501
225 503
226 503
NUMERO_MATR CURSO
225 503
226 503
Unión.- Permite la unión de dos tablas. Dos tablas se pueden unir si tienen el mismo
número de columnas y dominios compatibles (pueden tener el mismo o distinto
nombre). El resultado de una unión es una nueva tabla con las filas de ambas tablas. Las
filas repetidas aparecen sola vez. Se representa por el símbolo U.
Tabla: GrupoASR1
NUMERO_MATR APELLIDO1 APELLIDO2 NOMBRE CURSO
221 Álvarez González Jairo 501
222 González Palacio Marcos 502
223 Martínez Gómez Carlos 501
Tabla: GrupoASR2
NUMERO_MATR APELLIDO1 APELLIDO2 NOMBRE CURSO
222 González Palacio Marcos 502
224 Cienfuegos García María 501
225 Herrero Llaneza Elena 503
226 Blanco Matos Rosa 503
Tabla: Alumnos
NUMERO_MATR APELLIDO1 APELLIDO2 NOMBRE CURSO
221 Álvarez González Jairo 501
222 González Palacio Marcos 502
223 Martínez Gómez Carlos 501
224 Cienfuegos García María 501
225 Herrero Llaneza Elena 503
226 Blanco Matos Rosa 503
Tabla: AlumnosSuspensos
NUMERO_MATR APELLIDO1 APELLIDO2 NOMBRE CURSO
221 Álvarez González Jairo 501
223 Martínez Gómez Carlos 501
226 Blanco Matos Rosa 503
Producto cartesiano.- Dadas dos tablas, el producto cartesiano es una nueva tabla que
contiene las columnas de ambas tablas y como filas tiene todas las posibles
combinaciones de cada fila de la tabla 1ª con cada fila de la tabla 2ª. Se representa por
el símbolo X.
En el ejemplo anterior, la tabla primera tiene 3 filas y la segunda 2, por tanto la tabla
resultante del producto cartesiano tendrá 3 x 2 = 6 filas.
Tabla: Tabla1
NUMERO_MATR APELLIDO1 APELLIDO2 NOMBRE CURSO
224 Cienfuegos García María 501
225 Herrero Llaneza Elena 503
226 Blanco Matos Rosa 503
Tabla: Tabla2
NUMERO_MATR APELLIDO1 APELLIDO2 NOMBRE CURSO
221 Álvarez González Jairo 501
222 González Palacio Marcos 502
223 Martínez Gómez Carlos 501
224 Cienfuegos García María 501
226 Blanco Matos Rosa 503
División o Cociente.- La división se debe realizar sobre dos tablas que cumplen las
siguientes condiciones:
Esta operación es útil para simplificar algunas consultas y se representa por el símbolo
÷.
Ejemplo:
2 103
2 104
3 105
Solución:
Procedemos con el desarrollo del problema, para ver su resolución paso a paso.
πEMPLEADO(EMP_PROY)
EMPLEADO
1
2
3
FACTURAS
NFACTURA CLIENTE FECHA
10001 12 10/09/2010
10002 14 12/09/2010
LINEAS-FACTURAS
FACTURA LINEA PRODUCTO IMPORTE
10001 1 10212 100
10001 2 41331 20
10001 3 45233 45
10002 1 11023 1456
10002 2 18133 44
(FACTURAS * LINEAS-FACTURAS)NFACTURA=FACTURA
(FACTURAS * LINEAS-FACTURAS)NFACTURA=FACTURA
NFACTURA CLIENTE FECHA FACTURA LINEA PRODUCTO IMPORTE
10001 12 10/09/2010 10001 1 10212 100
10001 12 10/09/2010 10001 2 41331 20
10001 12 10/09/2010 10001 3 45233 45
10002 14 12/09/2010 10002 1 11023 1456
10002 14 12/09/2010 10002 2 18133 44
Definir los datos que se van a obtener de una base de datos en una consulta.
Definir los datos que se van a insertar, modificar o eliminar en un proceso de
actualización.
Definir vistas de la base de datos.
Definir restricciones de integridad y de acceso.
Ejemplo:
Obtener los nombres de los clientes que nos han hecho alguna compra (tiene facturas)
Con la finalidad de evitar ambigüedades se suele poner el nombre de la tabla antes del
nombre del atributo separándolos por un punto: TABLA.ATRIBUTO
Por otro lado, algunos autores han propuesto incorporar operadores nuevos que doten de
mayor flexibilidad a las operaciones algebraicas. Los más comunes son:
Obtiene tuplas con el mismo número de factura (resultado de agrupar cada línea de la
factura) y con el total de la factura (resultado de obtener la suma del precio*cantidad de
cada línea).