Story Transcript
SOLUCIONES Esquema Lógico ALGO ARTÍCULO ( NTIT: domCod TITULO(
AJENO (
NUM: domEntero
NTIT: domCod
NTIT: domCod
NUMA: domEntero
NOMBRE: domNom
CP (NTIT)
TEMA: domCadena
EDITORIAL: domCadena
CAj (NTIT) ! TITULO )
PROG: domLetra
PRECIO: domMoneda
TOMO (
CP (NTIT, NUM, NUMA)
CP (NTIT) )
NTIT: domCod
CAj (NTIT, NUM) ! TOMO
PROPIO (
NUM: domEntero
CAj (PROG) ! PROGRAMA
NTIT: domCod
PAGINAS: domEntero
VNN (PROG) )
CP (NTIT)
CP (NTIT, NUM)
PROGRAMA (
CAj (NTIT) ! TITULO )
CAj (NTIT) ! PROPIO )
PROG: domLetra DESCRIPCIÓN: domCadena CP (PROG) )
Todas las preguntas están referidas al esquema de BD relacional anterior. • (1 punto) • Card(PROPIO, esUn1)= (1,1) Card(TÍTULO, esUn1)= (0,1) • Card(AJENO, esUn2)= (1,1) Card(TÍTULO, esUn2)= (0,1) • Card(PROPIO, tiene)= (0,n) Card(TOMO, tiene)= (1,1) • Card(ARTÍCULO, estaEn)= (1,1) Card(TOMO, estaEn)= (0,n) • Card(PROGRAMA, contiene)= (0,n) Card(ARTÍCULO, contiene)= (1,1) • (1.25 puntos) Marca con un círculo la respuesta correcta y justifica esa respuesta. • Todos los artículos están en al menos un tomo VERDADERO. La clave ajena a TOMO está dentro de la clave primaria • Puede haber programas sin artículos 1
VERDADERO. No existe en la tabla PROGRAMA clave ajena que la relacione con ARTÍCULO (que es quien, en realidad, tiene la clave ajena hacia PROGRAMA). • Todos los artículos pertenecen obligatoriamente a uno y sólo a un título VERDADERO. si lo interpretamos como que cada artículo sólo pertenece a un único título (y siempre pertenece al menos a uno); la clave ajena de ARTÍCULO hacia TOMO (que siempre tiene valor por formar parte de la clave primaria), de este último hacia PROPIO y de éste hacia TÍTULO (que por la misma razón siempre tienen valor) así lo refleja. FALSO, si la interpretación del enunciado es que todos los ARTÍCULOS pertenecen al mismo artículo. • Sólo los propios pueden tener artículos VERDADERO, puesto que la relación es de ARTÍCULO a TOMO y de TOMO a PROPIO y no a AJENO. (Se admite también FALSO, si se tiene en cuenta la tabla PROGRAMA) • Puedo tener programas sin descripción VERDADERO, descripción es un atributo que admite nulos. • Sólo hay, como máximo, un tomo por cada propio FALSO, puesto que la clave ajena de TOMO hacia PROPIO admite duplicados al ser sólo parte de la clave primaria. • (0.5 o 1 punto: dos respuestas correctas al menos) Especifica en las casillas al lado de cada fórmula los conceptos que se están cubriendo con ella (se suponen todas las variables declaradas adecuadamente) • "P( programa(P) ! "A(artículo(A) " A.prog = P.prog )) a) 2, 3 • "A(artículo(A) ! "P(programa(P) " A.prog = P.prog )) • "PP( propio(PP) ! "T(título(T) " T.ntit = PP.ntit )) " b) 1, 2 "AJ( ajeno(AJ) ! "T(título(T) " T.ntit = AJ.ntit )) " "T(título(T) ! "AJ( ajeno(AJ) " T.ntit = AJ.ntit ) " c) 1, 2, 3, 5 "PP( propio(PP) " T.ntit = PP.ntit ))
• Integridad Referencial • Restricción de Existencia • Integridad de Clave • Restricción de dependencia de identificador • Generalización
• (0.25 + 0.5) puntos Resuelve los siguientes enunciados en Álgebra Relacional • Tema de los artículos que aparecen en el título de nombre Título primero articulo[ntit, tema] " (titulo donde nombre = Título primero) [tema] • Programas que no contienen artículos o contienen todos los artículos. programa[prog] − (articulo[prog])
2
" articulo[prog, ntit, num, numa] ÷ articulo[ntit, num, numa] • (de 0 a 0.5 punto) T: TOMO; A: ARTÍCULO { T.páginas | tomo(T) ! "A(artículo(A) " A.num = T.num " A.ntit = T.ntit ) } donde G = tomo(T) ! "A(artículo(A) " A.num = T.num " A.ntit = T.ntit ) Supongamos un valor de T " dom(G): • ¿cuál es el valor de la evaluación de G? Verdadero ¿cómo has llegado a ese resultado? Si x " dom(G) entonces tomo(T) es FALSO, y una implicación con FALSO como antecedente siempre se evalúa a VERDADERO. • A la vista de la respuesta anterior, ¿la fórmula es segura? NO ¿por qué? Hemos visto que un valor de la variable libre T es capaz de hacer la fórmula cierta sin pertenecer al dominio • (de 0 a 0.75 puntos) • Si no disponemos de más información que el propio esquema lógico, ¿qué estrategias para mantener la integridad referencial se pueden aplicar y dónde? En el esquema lógico ALGO todas las claves ajenas se pueden aplicar las estrategias de RECHAZAR o PROPAGAR. ANULAR no se puede utilizar puesto que ninguna clave ajena admite nulos. • Supongamos que la estrategia ante borrados de todas las claves ajenas es propagar: si borramos una tupla de título, ¿qué otras tablas examinaría el Sistema de Gestión de Bases de Datos? PROPIO Y AJENO, TOMO por el borrado en PROPIO, y ARTÍCULO por el borrado en TOMO. • (de 0 a 0.75 puntos) C1 1 1 3 4 4
C2 A B A A B
C3 Xx Yy Xx Xx Yy
C4 300 250 120 115
C5 12 5 12 12 5 3
4 C 5 Si aseguramos que para cada valor de C2 le corresponde siempre el valor de C3 tal como aparece en la tabla, ¿qué podemos decir sobre su forma normal? La clave primaria sólo puede ser (c1, c2) o (c1, c2, c5), bien por la existencia de duplicados, bien de nulos en las columnas o combinaciones de las mismas. En ambos casos, la tabla está en primera y no en segunda forma normal, puesto que c3 depende funcionalmente de forma no completa de la clave primaria. ¿qué anomalía se puede producir al insertar una nueva tupla? Podríamos crear una inconsistencia puesto que nada nos impide poner distintos valores de c3 para el mismo valor de c2. C1 1 1 3 4 4 4 5
C2 A B A A B C A
C3 Xx Yy Xx Xx Yy Zz
C4 300 250 120 115
C5 12 5 12 12 5 5 15
O nos obligaría (si no normalizamos) a revisar los valores anteriores de c3 para evitar la inconsistencia. ¿y al borrar? Podríamos perder información relevante. Si suponemos que c4 y c5 dependen funcionalmente de forma completa de c1, entonces la eliminación de una ocurrencia del objeto representado por c1 nos obliga a borrar los datos correspondientes a (c2, c3): si estos valores no aparecen en ninguna otra tupla de la relación perderemos las características de ese objeto representado por ese valor de c2. Si borráramos las filas con valor de c1=1 y c1=4, perderíamos la información de los objetos c2=C y c2=B. ¿y al modificar? Sería posible llevar a la BD a un estado inconsistente puesto que, al igual que en la inserción, podríamos tener distintos valores de c3 para el mismo valor de c2, bien por la actualización de c2 o por la de c3. Nuevamente, la solución pasaría por un proceso externo que velara por la integridad de los datos. 3
4