BASES DE DATOS IN.CO. 92 SOLUCIONES PRACTICO 9 Ejercicio 1 1) Utilizando una relaci¢n universal (una sola relaci¢n que contenga todos los atributos de la realidad). Sem ntica: capturada por dependencias entre atributos. Herramienta: Metodolog¡a de Normalizaci¢n. Ventajas: T‚cnicas bien formalizadas y estudiadas. Desventajas: - La sem ntica no es capturada completamente ya que la normalizaci¢n no tiene en cuenta las restricciones entre relaciones (es decir no tiene en cuenta la integridad referencial). - Dar nombre a los atributos se vuelve complejo en la medida que se quiera modelar realidades que involucren muchos objetos. - Se puede llegar a esquemas relaci¢n a los que resulta dif¡cil asignarles un significado. 2) Utilizar un modelo sem ntico, por ejemplo MER, transformando sus estructuras en relaciones del modelo Relacional, m s restricciones de integridad expresadas por dependencias entre atributos, utilizando luego la metodolog¡a de normalizaci¢n. Ventajas: Se trabaja con estructuras de datos m s ligadas a la realidad (objetos y relaciones entre ellos) que las del modelo relacional, facilitando la representaci¢n de realidades complejas. Desventajas: No existe un estudio suficientemente formal para la transformaci¢n de estructuras de un modelo sem ntico a un modelo relacional y por lo general este tema es tratado con ligereza. Nota: Estas son s¢lo dos posibles metodolog¡as. Ejercicio 2 a) i) Consideremos la siguiente instancia del esquema relacional: EMPLEADOS DEPARTAMENTOS nom_emp direc nom_dpto fecha_ contrato nom_dpto nombre e1 d1 dp1 f1 dp2 n2 ... ... ... ... Esta instancia es consistente con respecto a las restricciones de clave. Sin embargo, la tupla (e1,d1,dp1,f1) est  representando a su vez una instancia de la relaci¢n TRABAJA del MER, donde un empleado se relacionar¡a con un departamento que no existe. Esto es inconsistente con el MER. Adem s en el MER, estamos permitiendo empleados que no trabajen en ning£n departamento. Esto en el esquema relacional no lo podemos representar, a menos que se permitan valores nulos en los atributos nro_dpto y fecha_contrato de EMPLEADOS. El permitir valores nulos acarrea dificultades a la hora de manipular los datos y en la representaci¢n de los mismos; por ejemplo fecha_contrato es un atributo de la relaci¢n TRABAJA del MER, por lo tanto una restricci¢n adicional que es necesaria en el esquema relacional es que toda vez que el nro_dpto en EMPLEADOS tenga un valor nulo, tambi‚n fecha_contrato deber  tener un valor nulo. En conclusi¢n esta representaci¢n no es equivalente al MER. ii) Tampoco es "equivalente", consideremos la instancia: EMPLEADOS TRABAJA DEPARTAMENTOS nom_emp direc nom_emp nro_dpto fecha_ contrato nro_dpto nombre e1 d1 e1 dp1 f1 dp2 n2 e2 dp2 f2 An logamente a lo explicado en (i) las tuplas de TRABAJA no representan tuplas v lidas en el MER, considerando adem s las tuplas de EMPLEADOS y DEPARTAMENTOS. iii) Al analizar los casos anteriores, vimos que uno de los problemas era el tener tuplas en TRABAJA donde el valor del atributo nom_emp y/o nro_dpto no ten¡an su correspondiente en las relaciones EMPLEADOS y DEPARTAMENTOS respectivamente. Este problema es resuelto con las dependencias de inclusi¢n. b) Con esta dependencia de inclusi¢n, estar¡amos resolviendo el problema mencionado en (i) de permitir que en EMPLEADOS el atributo nro_dpto tomara valores que no est‚n en DEPARTAMENTOS. Sin embargo, observando el MER, vemos que se permiten empleados que no trabajen en ning£n departamento. Esto, en principio, no es posible representarlo con el esquema relacional dado (salvo que se permiten valores nulos en los atributos nro_dpto y fecha_contrato en EMPLEADOS, con la restricci¢n de que si uno de ellos es nulo, el otro tambi‚n debe serlo). Ejercicio 3 a) Esta representaci¢n no es "equivalente" al MER, ya que si consideramos la siguiente instancia: EMPLEADOS TRABAJA GERENCIA DEPARTAMENTOS nom_emp direc nom_emp nro_ dpto nom_emp nro_ dpto nro_ dpto nombre e1 d1 e1 dp1 e2 dp2 dp1 n1 e2 d2 Vemos que es consistente con las restricciones definidas sobre el esquema relacional. Sin embargo, tenemos un empleado que es gerente de un departamento pero no trabaja en ese departamento, violando la restricci¢n no estructural del MER. b) Consideremos la siguiente instancia: EMPLEADOS TRABAJA GERENCIA DEPARTAMENTOS nom_emp direc nom_emp nro_ dpto nom_emp nro_ dpto nro_ dpto nombre e1 d1 e1 dp2 e1 dp2 dp1 n1 e2 d2 e2 dp1 e2 dp1 dp2 n2 Esta instancia cumple las restricciones, pero sigue violando la restricci¢n no estructural del MER y por lo tanto no es "equivalente" al MER. c) Una representaci¢n "equivalente" en el modelo relacional ser¡a la dada en (a) con el agregado de una restricci¢n de integridad de la forma: GERENCIADEPARTAMENTOS Ejercicio 4 a) Seg£n el MER dado, estas tuplas son v lidas: ((p1,a1),f1) î PILOTEAR ((p1,a1),f2) î PILOTEAR con (p1,n1) î PILOTOS, (a1,na1) î AVIONES y f1, f2 fechas v lidas. O sea que un mismo piloto pudo pilotear el mismo avi¢n en fechas diferentes. Sin embargo, esta misma informaci¢n no es posible representarla en el esquema relacional dado, debido a que se ha tomado como clave de la relaci¢n PILOTEAR a la concatenaci¢n de las claves de PILOTOS y AVIONES. b) El £nico problema de la representaci¢n anterior es la determinaci¢n de la clave de la relaci¢n PILOTEAR, entonces: PILOTOS (nro_pil, nombre) AVIONES (nro_avion, nombre) PILOTEAR (nro_pil, fecha, nro_avion) nro_pil(PILOTEAR) nro_pil(PILOTOS) nro_avion(PILOTEAR) nro_avion(AVIONES) Ejercicio 5 ENSE¥A (nom_prof, nom_dpto, nom_curso) F = { nom_prof,nom_dpto ---> nom_curso, nom_curso ---> nom_dpto } claves: nom_prof,nom_dpto y nom_prof,nom_curso ENSE¥A no est  en BCNF porque tenemos la df nom_curso ---> nom_dpto y nom_curso no es superclave. Aplicando el algoritmo visto en el te¢rico para llevar a BCNF, obtenemos: R1(nom_curso, nom_dpto) R2(nom_curso, nom_prof) FR1 = { nom_curso ---> nom_dpto)FR2 = {} Analicemos los esquemas resultantes: PROFESORES(nom_prof) DEPARTAMENTOS(nom_dpto) CURSOS(nom_curso) CUR_PROF(nom_curso,nom_prof)nom_curso(CUR_PROF) nom_curso(CURSOS) nom_prof(CUR_PROF) nom_prof(PROFESORES) OFRECE(nom_curso, nom_dpto)nom_curso(OFRECE) nom_curso(CURSOS) nom_dpto(OFRECE) nom_dpto(DEPARTAMENTOS) R1(nom_curso, nom_dpto) nom_curso(R1) nom_curso(CURSOS) nom_dpto(R1) nom_dpto(DEPARTAMENTOS) Restricci¢n de integridad: nom_prof,nom_dpto ---> nom_curso observaciones: i) Perdimos la dependencia funcional nom_prof,nom_dpto ---> nom_curso. Por lo tanto, para seguir teniendo una representaci¢n equivalente debemos agregar a nuestro esquema relacional esta df que no la podemos imponer por medio de claves. ii) Observemos los atributos de R1 y los atributos de OFRECE. Tienen el mismo nombre, la clave de R1 es la misma que la de OFRECE. Podr¡amos, en principio, tomar la decisi¢n de eliminar R1. Supongamos que eliminamos R1 y examinemos el esquema resultante respecto al MER. En particular, en el MER, observamos que las relaciones ENSE¥A y OFRECE son independientes. Es decir un profesor de un departamento podr¡a ense¤ar un curso que no fuera ofrecido por el departamento en el cual ‚l est . Sin embargo no podemos reflejar esta informaci¢n con el esquema relacional que manejamos, ya que la forma de vincular un profesor con un departamento es a trav‚s de nom_curso entre CUR_PROF y OFRECE. El problema surgi¢ al haber eliminado a R1 ya que dicha vinculaci¢n deber¡a darse entre CUR_PROF y R1 pues en OFRECE podr¡a no existir el curso si el departamento no lo ofrece. El error de eliminar R1 se di¢ al trabajar con los mismos nombres de atributos pero d ndoles sem ntica diferente. Ejercicio 6: Tratado en clase. Ejercicio 7 Categorizaci¢n: elegimos la representaci¢n (1) BARCOS(matricula,bandera,nombre,calado,tonelaje,fecha_otorgado) PASAJEROS(matricula,cant) matricula(PASAJEROS) matricula(BARCOS) PESCA(matricula,tipo) matricula(PESCA) matricula(BARCOS) CARGA(matricula,capacidad) matricula(CARGA) matricula(BARCOS) Conjuntos de entidades: PUERTOS(nombre,pais,profundidad,cant_barcos,tipo_agua) PUERTOS_GRUAS(nombre,pais,tipo_grua) nombre,pais(PUERTOS_GRUAS) nombre,pais(PUERTOS) MERCADERIAS(codigo,unidad,peso) ZONA_PESCA(codigo,especie,coord_x,coord_y) Relaciones: TRAB_EN(matricula,codigo,fecha) matricula(TRAB_EN) matricula(PESCA) codigo(TRAB_EN) codigo(PESCA) ATRACAN(matricula,nombre,pais,fecha) matricula(ATRACAN) matricula(CARGA) nombre,pais(ATRACAN) nombre,pais(PUERTOS) ESTA_EN(codigo,nombre,pais) codigo(ESTA_EN) codigo(ZONA_PESCA) nombre,pais(ESTA_EN) nombre,pais (PUERTOS) DISTANCIAS(nombre_origen,pais_origen,nombre_dest,pais_dest,distancia) nombre_origen,pais_origen(DISTANCIAS) nombre,pais(PUERTOS) nombre_dest,pais_dest(DISTANCIAS) nombre,pais(PUERTOS) (n1,p1,n1,p1,d) DISTANCIAS (n1,p1) nombre,pais(PUERTOS) LIMITA(codigo_1,codigo_2) codigo_1(LIMITA) codigo(ZONA_PESCA) codigo_2(LIMITA) codigo(ZONA_PESCA) (p,p) LIMITA p codigo(ZONA_PESCA) CARGA(matricula,nombre,pais,fecha,codigo,cant) matricula,nombre,pais,fecha(CARGA) matricula,nombre,pais,fecha(ATRACAN) codigo(CARGA) codigo(MERCADERIAS) DESCARGA (idem CARGA) Ejercicio 8 "Pasemos" el MER a modelo relacional de acuerdo a lo visto en clase. Conjuntos de entidades: ESTUDIANTES(nro_estud,ci,nombre) FESTUDIANTES = {nro_estud ---> ci nombre ci ---> nro_estud } claves: nro_estud y ci PROYECTOS(id_proy,desc,cant_int_min,cant_int_max) FPROYECTOS = { id_proy ---> desc cant_int_min cant_int_max } clave: id_proy PROY_USU(id_proy,usuario) clave: id_proy,usuario id_proy(PROY_USU) id_proy(PROYECTOS) DOCENTES(id_doc,nombre) FDOCENTES = { id_doc ---> nombre } clave: id_doc Relaciones: Como tenemos una agregaci¢n sobre la relaci¢n ENTREGA y una relaci¢n CORRECCION de N:1, con totalidad del lado de la agregaci¢n nos queda: ENT_CORR(nro_estud,id_proy,nro_grupo,id_doc,nota,comentario) FENT_CORR = { nro_estud id_proy ---> nro_grupo id_proy nro_grupo ---> id_doc nota comentario } clave: nro_estud,id_proy nro_estud(ENTREGA) nro_estud(ESTUDIANTES) id_proy(ENTREGA) id_proy(PROYECTOS) id_doc(ENTREGA) id_doc(DOCENTES) Observando los esquemas anteriores, vemos que todos, salvo el £ltimo, se encuentran en 4NF. ENT_CORR est  en 2NF, por lo cual trabajeremos sobre ‚l. Aplicando el algoritmo para llevarlo a 3NF: Fmin = { nro_estud id_proy ---> nro_grupo id_proy nro_grupo ---> id_doc id_proy nro_grupo ---> nota id_proy nro_grupo ---> comentario } Queda la descomposici¢n: ENTREGA(nro_estud,id_proy,nro_grupo) FENTREGA = { nro_estud id_proy ---> nro_grupo } clave: nro_estud id_proy CORRECCION(id_proy,nro_grupo,id_doc,nota,comentario) FCORRECCION = { id_proy nro_grupo ---> id_doc nota comentario } clave: id_proy nro_grupo Tanto ENTREGA como CORRECCION est n en 4NF. El esquema final estar  compuesto por los esquemas vistos, salvo ENT_CORR que se sustituir  por ENTREGA y CORRECCION. A estos dos deber¡amos agregarles las siguientes restricciones para completar la tarea: nro_estud(ENTREGA) nro_estud(ESTUDIANTES) id_proy(ENTREGA) id_proy(PROYECTOS) id_proy(CORRECCION) id_proy(ENTREGA) nro_grupo(CORRECCION) nro_grupo(ENTREGA) id_doc(CORRECCION) id_doc(DOCENTES)