NORMALIZACIÓN DE BASES DE DATOS RELACIONALES

Anuncio
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
El proceso de normalización fue introducido por Codd en el año 1974. Busca encontrar errores en el
diseño de un esquema relacional debido a la presencia de redundancias que pueden originar
anomalías de operaciones. Para eliminar los problemas, la normalización divide una relacion en dos
o más relaciones que garanticen la eliminacion de anomalías, a costa de crear redundancia SOLO a
nivel de claves.
La teoría de la normalización tiene como fundamento el concepto de formas normales. Una relación
está en una determinada forma normal si satisface un conjunto de restricciones. Codd introdujo tres
formas normales como solución a las anomalías de operaciones: PRIMERA FORMA NORMAL (1FN),
SEGUNDA FORMA NORMAL(2FN) y TERCERA FORMA NORMAL(3FN). Más adelante Boyce y Codd
introducjeron una forma normal más restrictiva a la que llamaron FORMA NORMAL DE BOYCE Y
CODD (BCNF). Posteriomente se ha extendido la teoría de la normalización para incluir otros tipos de
dependencias funcionales y se definieron la CUARTA FORMA NORMAL (4FN), QUINTA FORMA
NORMAL(5F) y otras formas normales. Se estudiarán las tres primeras formas normales y la forma
normal de Boyce y Codd, porque son realmente las más utilizadas.
Cuanto más alta sea la forma normal en la que se encuentran los esquemas de relación, menores
serán los problemas que aparecerán en el mantenimiento de la base de datos. Para avanzar de una
forma normal a otra, deben verificarse las restricciones de la actual y de la nueva forma normal. Una
de las herramientas más utilizadas para alcanzar una nueva forma normal es la descomposición que
debe tener las siguientes características:
Debe realizarse sin pérdida
Deben mantenerse las dependencias funcionales
Se debe evitar o reducir hasta donde sea posible la redundancia.
La definicion original de las formas normales tomaba en cuenta SOLO la clave primaria de una
relación para efectuar la normalización y la verificación de cumplimiento de formas normales.
Posteriormente, se cambió toda la teoría a una definición basada sobre todas las claves candidatas
de una relación. Ésto se debe al hecho singular de que durante la vida de una base de datos puede
ser cambiada la clave primaria original por otra clave candidata y por lo tanto, si la normalización se
efectuó considerando sólo la clave primaria puede suceder que una base de datos inicialmente
normalizada pudiese aparecer como desnormalizada al cambiar la definición de la clave primaria.
Página 1 de 7
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
DEPENDENCIAS FUNCIONALES
Una dependencia funcional es una conexión entre uno o más atributos.
Se dice que un conjunto de atributos (Y) depende funcionalmente de otro conjunto de atributos (X) si
para cada valor de X hay un único valor posible para Y. Simbólicamente se denota por X→Y.
Al conjunto X del que depende funcionalmente el conjunto Y se le llama determinante. Al conjunto Y
se le llama implicado.
EJEMPLO:
En la relación TRABAJADOR, el campo CEDULA es la clave primaria, por lo tanto, actúa como
determinante. Como las dependencias funcionales se establecen con los otros campos que no son
clave (implicados), habría dos opciones para establecer dependencias:
1. Cedula −> nombre
El NOMBRE depende funcionalmente de la cédula porque para un número
concreto de cedula sólo hay un nombre posible.
2. Cedula −> ciudad
La CIUDAD NO depende funcionalmente de la cédula porque para un
mismo número de cédula puede haber más de una ciudad.
De acuerdo con lo anterior, en la relacion TRABAJADOR solo existe una dependencia funcional:
Cedula → nombre
Determinante
implicado
La anterior dependencia se puede leer de las siguientes formas:
nombre es funcionalmente dependiente de cédula o cédula determina a nombre
TIPOS DE DEPENDENCIAS FUNCIONALES:
Dependencia funcional completa
Un conjunto de atributos (Y) tiene una dependencia funcional completa sobre otro conjunto de
atributos (X) si Y tiene dependencia funcional de X y además no se puede obtener de X un conjunto
de atributos más pequeño que consiga una dependencia funcional de Y.
Ejemplo:
CALIFICACIONES
Cod_estudiante
Cod_asignatura
nota
10212
10909
28989
10989
12
12
10
11
4.6
4.7
2.7
3.2
En la relación CALIFICACIONES la clave primaria está compuesta
por los atributos Cod_estudiante y Cod_asignatura.
Se puede establecer la dependencia funcional:
Codigo_estudiante,codigo_asignatura ⇒ nota
porque la nota depende de ambos atributos de clave primaria.
No hay dependencia parcial con alguno de los comonentes de
la clave primaria.
Página 2 de 7
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
Dependencia funcional elemental
Se produce cuando X e Y forman una dependencia funcional completa y además Y es un único
atributo.
Cedula → nombre
Dependencia funcional transitiva
Se produce cuando tenemos tres conjuntos de atributos X, Y y Z. Y depende funcionalmente de X
(X→Y), Z depende funcionalmente de Y (Y→Z). Además X no depende funcionalmente de Y. Entonces
ocurre que X produce una dependencia funcional transitiva sobre Z.
Ejemplo 1:
Numero_clase → codigo_tutor
Codigo_tutor→Codigo_departamento
Entonces:
Numero_clase −→codigo_departamento
El código del departamento depende transitivamente del código de la clase.
NORMALIZACIÓN – Formas Normales
PRIMERA FORMA NORMAL(1FN)
Una tabla se encuenta en primera forma normal cuando cumple con las siguientes condiciones:
1. Los valores de los atributos deben ser atómicos1.
2. Dos filas no deben ser idénticas -una tabla no debe contener filas repetidas; si existen deben
eliminarse asegurándose de que cada fila defina una sola entidad. Para lograrlo hay que
asegurarse de que cada registro(fila) esté identificado a través de una clave primaria-.
3. No hay valores nulos
4. Se impide que un atributo de una fila tome más de un valor -evitar atributos multivalorados-.
Esta forma normal elimina los valores repetidos dentro de una BD
EJEMPLO:
En la relación EMPLEADOS, se puede ver que el
atributo emails contiene más de un valor, por
lo que viola 1FN. La solución es crear una nueva
tabla con los atributos email e identificacion:
Clave primaria → identificación
clave primaria → identificacion, emails.
1
Un dominio es atómico si los elementos del dominio se consideran unidades indivisibles. Por ejemplo, el conjunto de los enteros es un
dominio atómico..
Página 3 de 7
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
SEGUNDA FORMA NORMAL (2FN)
Una tabla se encuenta en segunda forma normal cuando cumple con las siguientes condiciones:
- Está en 1FN
- Cada atributo que no sea clave (no-primo), es totalmente dependiente de toda clave(primo).
- Toda clave principal debe hacer dependientes al resto de los atributos.
Si hay atributos que dependen solo de parte de la clave, entonces esa parte de la clave y esos
atributos formarán otra tabla.
EJEMPLO 1:
Clave primaria:
codigo, cod_curso
Dependencias funcionales:
codigo,cod_curso → nota
Codigo → nombre, apellido
La tabla estudiantes no está en 2FN porque no todos los atributos no-primos dependen de la clave
primaria.
En la relación ESTUDIANTES, los atributos no-primos nombre y apellido dependen parcialmente de la
clave codigo,cod_curso proque la dependencia funcional Codigo → nombre, apellido es parcial. Por
lo tanto ESTUDIANTES no está en 2FN.
Para que la relación ESTUDIANTES alcance la 2FN se debe descomponer considerando que:
- La unica clave de estudiantes es codigo,cod_curso
- Los atributos no-primos de estudiantes son nombre, apellido y nota
- Para el atributo no-primo Nota, hay una dpependencia total con la clave codigo, cod_curso.
- Para los atributos no-primos nombre, apellido existen dependencias funcionales parciales de
codigo,cod_curso lo que obliga a descomponer ESTUDIANTES en dos relaciones:
ESTUDIANTE = {codigo, nombre, apellido}
con dependencias funcionales :
codigo → nombre
codigo→apellido
ASISTENCIA_CURSOS = {codigo, Cod_curso, nota}
Con dependencias funcionales:
codigo, cod_curso → nota
Página 4 de 7
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
EJEMPLO 2:
{DNI, ID_PROYECTO}
HORAS_TRABAJO
Porque con el DNI de un empleado y el ID de un proyecto sabemos cuántas horas de trabajo por
semana trabaja un empleado en dicho proyecto. Es completamente dependiente dado que ni
DNI HORAS_TRABAJO ni ID_PROYECTO
HORAS_TRABAJO mantienen la dependencia por
separado. Sin embargo {DNI, ID_PROYECTO}
NOMBRE_EMPLEADO es parcialmente dependiente
dado que DNI
NOMBRE_EMPLEADO mantiene la dependencia.
TERCERA FORMA NORMAL (3FN)
Una relacion está en tercera forma normal si cumple que está en segunda forma normal y ningún
atributo no-primo depende transitivamente de alguna clave.
EJEMPLO
Considérese la relación ESTUDIANTE con clave primaria CODIGO y sus demás atributos :
ESTUDIANTE = {codigo, nombre, codigo_carrera, descripcion_carrera}
codigo
10219
10982
17687
21234
Dependencias funcionales:
nombre
Ana
Juan
Beto
Diana
ESTUDIANTE
Codigo_carrera
12
13
11
13
Descripcion_carrera
Ingeniería alimentos
Ingeniería industrial
Ingeniería sistemas
Ingeniería industrial
a) codigo → nombre
b) codigo → codigo_carrera
c) codigo →descripcion_carrera
Primero hay que verificar si ESTUDIANTE se encuentra en 2FN:
Los atributos no-primos de estudiante son: nombre, codigo_carrera,descripcion_carrera. La única
clave de estudiante es codigo y existen dependencias funcionales a, b y c que son dependencias
totales porque la clave primaria está compuesta por un solo abtributo. - no puede quitarse ningún
atributo determinante-. En este caso estudiante está en 2FN.
Ahora se verifica si ESTUDIANTE está en 3FN:
A parte de las dependencias funcionales a,b y c, se puede definir otra dependencia funcional que no
involucra la clave primaria:
d) codigo_carrera →descripcion_carrera
Tomando en cuenta las dependencias funcionales b y d, y considerando que NO se da la dependencia
funcional codigo_carrera → codigo, se puede decir que descripcion_carrera depende
transitivamente de codigo a través de codigo_carrera, por lo que ESTUDIANTE no está en 3FN.
codigo → codigo_carrera
codigo_carrera →descripcion_carrera
por lo tanto…
codigo − →descripcion_carrera
Para que ESTUDIANTES esté en 3FN es necesario descomponerla de la siguiente manera:
Página 5 de 7
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
ESTUDIANTE = {codigo, nombre, codigo_carrera}
Con dependencias funcionales :
codigo →nombre
codigo →codigo_carrera
CARRERA = { codigo_carrera,descripcion_carrera}
Con dependencias funcionales :
codigo_carrera →descripcion_carrera.
codigo
10219
10982
17687
ESTUDIANTE
nombre Codigo_carrera
Ana
12
Juan
13
Beto
11
Codigo_carrera
12
13
11
CARRERA
Descripcion_carrera
Ingeniería alimentos
Ingeniería industrial
Ingeniería sistemas
FORMA NORMAL DE BOYCE Y CODD (BCNF)
Una relación está en BCNF si está en 3FN y todo determinante es una clave candidata.
EJEMPLO 1:
Considere la relación PACIENTE con los atributos:
PACIENTE = {num_historia, nombre, dirección, cédula}
Con las dependencias funcionales:
Num_historia →nombre, dirección, cedula
Cédula →num_historia, nombre, dirección
Encontramos que existen dos claves candidatas (num_historia, cédula) y dos atributos no-primos
(nombre, dirección). PACIENTE está en FNBC porque los determinantes de todas sus dependencias
funcionales (num_historia, cedula) son claves candidatas.
EJEMPLO 2:
Considérese la relación TUTORIAS = {código-tutoria, nombre-asignatura_tutor}
Con dependencias funcionales: código_tutoria,nombre-asignatura →tutor
tutor → nombre-asignatura.
TUTORIAS está en tercera forma normal (no hay dependencias transitivas), pero no está en forma
Boyce y Codd, porque el determinante tutor no es clave candidata. La redundancia de la asignatura
se puede resolver descomponiendo la relación:
TUTORIAS = {codigo_tutoria, tutor}
ASIGNATURAS_TUTOR = { tutor ,nombre-asignatura }
Algunas relaciones no se pueden llevar a al BCNF manteniendo las dependencias funcionales. Como
regla general, se debe tratar siempre la BCNF si es posible, es preferible preservar las dependencias
funcionales y dejar una relación en 3FN.
Página 6 de 7
GUÍA PRÁCTICA NORMALIZACIÓN DE BASES DE DATOS RELACIONALES
REFERENCIAS BIBLIOGRÁFICAS
https://www.u-cursos.cl/diplomados/2009/0/DGIINTELNEG/1/material_docente/objeto/218445
http://www.utplonline.edu.ec/cursos/diretorio/apoio_7069_16206/1FN.pdf
http://www.jorgesanchez.net/bd/bdrelacional.pdf
http://es.wikipedia.org/wiki/Normalizaci%C3%B3n_de_bases_de_datos
Página 7 de 7
Descargar