c1 Normalizacion Dependencias Funcionales
c1 Normalizacion Dependencias Funcionales
c1 Normalizacion Dependencias Funcionales
DE BASES DE DATOS
-DEPENDENCIAS FUNCIONALES-
DEPARTAMENTO
NombreDpto NumeroDpto DniDirector
LOCALIZACIONES_DPTO
NumeroDpto Ubicación_DPTO
PROYECTO
NombreProyecto NumProyecto UbicacionProyecto Dirección NumeroDpto
TRABAJA_EN
Dni NumeroProyecto Horas
En el caso de la diapositiva precedente observamos
que se cumple con una buena semántica de los
atributos por que base de datos se puede explicar con
bastante facilidad.
DIRECTRIZ 1:
Diseñar un programa de relación que sea fácil explicar
su significado.
NO combine atributos de varios tipos de entidad y de
relación en una única relación.
Intuitivamente, si un esquema de la relación se
corresponde con un tipo de entidad o de relación , es
correcto interpretar y explicar su significado.
Por el contrario, si la relación está compuesta por una
mezcla de múltiples entidades y relaciones, se
producirá un ambigüedad semántica y la relación no
podrá explicarse con claridad.
NORMALIZACIÓN DE LAS BASES DE DATOS:
EJEMPLO 2
EMP_DEPT
NombreE Dni FechaNac Dirección NumeroDpto NombreDpto DniDirector
EMP_PROY
Dni NumProyecto Horas NombreE NumeroDpto NombreProyecto UbicacionProyecto
EL EJEMPLO 2, ES UN DISEÑO POBRE
Aunque desde el punto de vista lógico no existe nada
ilógico no existe nada erróneo en estas dos relaciones.
Se considera que tienen un diseño pobre porque violan
la directriz 1 al mezclar atributos de dos entidades del
mundo real:
EMP_DEPT combina atributos de empleados y
departamentos,
Mientras que EMP_PROY combina atributos de empleados
y proyectos y la relación TRABAJA_EN.
Deberían utilizarse como vistas, aunque esto provocaría
problemas cuando se usasen como relaciones base.
EVITAR INFORMACIÓN REDUNDANTE EN
TUPLAS Y ANOMALÍAS EN LA ACTUALIZACIÓN
1. Anomalías de Inserción
2. Anomalías de Borrado
3. Anomalías de Modificación
ANOMALÍAS DE INSERCIÓN (1)
En el ejemplo 2 en la relación EMP_DEPT, si
introducimos una tupla, tendremos dos situaciones:
a) Si introducimos un empleado y este no esta asignado a un
departamento entonces el atributo NombreDpto deberá
ser llenado con NULL,
b) En el segundo caso es decir que el empleado tenga
asignado un departamento entonces cuando se escriba
este dato se tendrá que volver a escribir el nombre
completo de departamento cuantas veces sea necesario
teniendo a la vez cuidado de que esté identicamente
escrito a como se encuentra guardado en las demás
tuplas que se refieren a empleados del mismo
departamento.
ANOMALÍAS DE INSERCIÓN (2)
Es complicado insertar un nuevo departamento que aún no
tenga ningún empleado en la relación EMP_DEPT.
La única forma de hacerlo es colocando valores NULL en
los atributos correspondientes al empleado.
Esto genera un problema, ya que el DNI es la clave
principal de EMP_DEPT, y se supone que cada tupla
representa a una entidad empleado, no a una entidad
departamento.
Además, cuando se asigna el primer empleado a ese
departamento, ya no necesitaremos nunca más esta tupla
con valores NULL.
Este problema no se da en el diseño del ejemplo 1, por que
un departamento se introduce en la relación departamento
independientemente de que existan empleados en el.
ANOMALÍAS DE BORRADO
Siguiendo con el ejemplo 2, si eliminamos una tupla
perteneciente a la relación EMP_DEPT, y esta tupla tiene
la característica de que en el atributo NombreDpto el valor
que tiene es único en toda la tabla
Es decir ese empleado es el único que pertenece a ese
departamento, entonces resultaremos perdiendo ese
departamento, por que no se encuentra repetido en ninguna
tupla, por lo que al hacer un proyección que contenga
solamente a NombreDpto con el objeto de tener la lista de
departamentos de la empresa
El que pertenecía a la tupla eliminada no aparecerá y la
relación EMP_DEPT, nos esta demostrando que no es
fiable para obtener la información exacta de los
departamentos.
ANOMALÍAS DE MODIFICACIÓN
En EMP_DEPT, si cambiamos el valor de uno de los
atributos de un departamento particular ( por ejemplo,
el director del departamento 5), debemos actualizar las
tuplas de todos los empleados que trabajan en ese
departamento;
En caso de no hacerlo, la base de datos se volverá
inconsistente.
Si falla la actualización de alguna tupla, el mismo
departamento tendrá dos valores diferentes como
director en distintas tuplas de empleado, lo que será
incorrecto.
DIRECTRIZ 2
Diseñar los esquemas de la relación base de forma
que no se presenten anomalías de inserción, borrado o
actualización en las relaciones.
En caso de que aparezca alguna de ellas, anótela
claramente y asegúrese de que los programas que
actualizan la base de datos operarán correctamente.
ANOMALÍAS DE VALORES NULL
En algunos diseños podemos agrupar muchos
atributos en una relación muy “grande”.
Si muchos de los atributos no se aplican a todas las
tuplas de la relación, nos encontraremos con muchos
valores NULL en esas tuplas.
Esto puede desperdiciar espacio de almacenamiento
y puede inducir a problemas a la hora de entender el
significado de los atributos, como por ejemplo:
a) El atributo no se aplica a esta tupla
b) El valor de atributo de esta tupla es desconocido.
c) El valor es conocido pero esta ausente, es decir, aún
no se ha grabado.
DIRECTRIZ 3
Hasta donde sea posible, evite situar en una relación base atributos
cuyos valores sean NULL frecuentemente. En caso de no poderse
evitar, asegúrese de que se aplican sólo en casos excepcionales y no
los aplique a la mayor parte de las tuplas de la relación.
Utilizar el espacio eficientemente y evitar concatenaciones son los
dos criterios principales que determinan si incluir las columnas que
pueden tener valores NULL en una relación o tener una relación
separada para esas columnas (con las columnas clave apropiadas).
Por ejemplo, si sólo el 10 por ciento de los empleados tienen oficinas
individuales, no es razón suficiente para la inclusión de un atributo
NumeroOficina en la relación EMPLEADO; en lugar de ello, se puede
crear una relación OFICINAS_EMPS(DniEmpleado , NumeroOficina)
que incluya las tuplas de los empleados con oficinas individuales.
NORMALIZACIÓN DE LAS B.D.
GENERACIÓN DE TUPLAS FALSAS
EMP_DEPT
NombreE Dni FechaNac Dirección NumeroDpto NombreDpto DniDirector
EMP_PROY
Dni NumProyecto Horas NombreE NumeroDpto NombreProyecto UbicacionProyecto
EMP_LOCS
NombreE UbicaciónProyecto
EMP_PROY1
Dni NumProyecto Horas NombreProyecto UbicacionProyecto
ACLARACIONES DEL MODELO
Según los esquemas relacionales de las diapositivas anterior,
podemos observar que las tablas EMP_LOCS y EMP_PROY1 , se
pueden sacar de hacer las correspondientes operaciones de
proyección sobre EMP_PROY .
Supongamos que utilizamos las tablas EMP_LOCS y
EMP_PROY1 como relaciones base en lugar de EMP_PROY.
Esto produce un diseño de esquema incorrecto algo peculiar por
que no podemos recuperar la información original de la tabla
EMP_PROY, utilizando las dos primeras ya que si intentamos
llevar a cabo una operación CONCATENACION NATURAL en
estas relaciones, el resultado produce muchas mas tuplas que las
existentes en el conjunto original EMP_PROY y a las tuplas
resultantes que no pertenecen a esta tabla se les llama tuplas
falsas.
Hay que aclarar que el join natural se efectuó tomando el atributo
UbicaciónProyecto y este no es ni una clave principal ni una clave
foránea en ninguna de las dos tablas.
DIRECTRIZ 4
Diseñar los esquemas de relación de forma que
puedan concatenarse en condiciones de igualdad en
los atributos que son parejas de clave principal y clave
foránea de forma que se garantice que no se van a
generar tuplas falsas.
Evite las relaciones que contienen atributos
coincidentes que no son combinaciones de clave
foránea y clave principal por que la concatenación de
estos atributos puede producir tuplas falsas.
RESUMEN Y EXPLICACIÓN ACERCA DE LAS
DIRECTIVAS DE DISEÑO:
A2 Aumento X Y XU Z Y
A3 Transitividad {X Y,Y Z} X Z
A4 Unión {X Y y X Z} X YU Z
A5 Descomposición X Y X Z con Z Y
A6 Pseudotransitividad { X Y y Y U Z W} XUZ W