Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail [email protected] Web www.lsi.us.es e.t.s. ingeniería informática Bases de Datos (29 Enero 2009) Teoría Dado el siguiente grafo de dependencias funcionales: F A B E C D G Conteste razonadamente a las siguientes preguntas: a) ¿Cuál es el cierre de los descriptores {A}, {C} y {A,D}? b) ¿Qué sentido tiene calcular el cierre de un descriptor? c) La relación R1 (A ,B ,D) ¿Está en FNBC? d) La relación R2 (B, C, F) ¿En qué Forma Normal está? Peso T: 15% (25%, 25%, 25%,25%) Tiempo: 20 min P1: Normalización Se necesita una BD que almacene información sobre alimentos y dietas para las que están indicados dichos alimentos. De los alimentos (alimento) se registrará las calorías (calorías) que aportan según medida (cantidad y unidad) (ej. 100 gr, la cantidad es 100 y la unidad en que se mide son gramos). Los alimentos se clasifican según su composición nutricional en grupos (ej, cereales, legumbres, etc.). Cada alimento pertenece a un único grupo. De cada grupo se registrará además de su denominación (grupo) y descripción (descripción), los alimentos que lo componen y el nombre de las vitaminas (vitamina) y minerales (mineral) que aportan. Un grupo puede aportar más de una vitamina y más de un mineral. Una vitamina o mineral puede ser aportado por más de un grupo de alimentos. Se han elaborado además una serie de dietas indicadas para diversas afecciones ej. control del colesterol, baja en calorías, etc. Cada dieta (dieta) está indicada para una única afección (afección). Las dietas son semanales (se repiten cada semana) y constan de cuatro comidas (desayuno, almuerzo, etc.). En cada dieta aparece para cada día de la semana (día) y comida (comida) los alimentos que deben de comer y su medida (cantidad y unidad). Es decir dieta, día, comida y alimento determinan la cantidad y unidad que se deben tomar. Por último, para cada dieta se almacenarán los alimentos permitidos y los prohibidos (recomendación). NOTA: Utilizar sólo aquellos atributos que aparecen en negrita en el enunciado. Obtener a) Grafo de dependencias b) Esquema relacional en 3FN, aplicando la síntesis de Bernstein, (claves primarias, alternativas y ajenas) con cardinalidad mínima de relaciones (mínimo número de relaciones posibles). Peso P2: 35% (40%, 60%) Tiempo: 45 min Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail [email protected] Web www.lsi.us.es e.t.s. ingeniería informática Bases de Datos (29 Enero 2009) P2: Lenguajes relacionales (Escritura) Dado el siguiente esquema Alimentos(alimento, grupo) Calorias_Alim(alimento, unidad, cantidad, calorías) Vitaminas(grupo, vitamina) Minerales(grupo, mineral) Dietas(dieta,afección) Comp_dietas(dieta, dia, comida, alimento, unidad, cantidad) Alim_Dieta(dieta, alimento, recomendación) Grupos (grupo, descripción) PK(alimento) FK (grupo)/Grupos PK(alimento, unidad, cantidad) FK (alimento)/Alimentos PK(grupo, vitamina) FK (grupo)/Grupos PK (grupo, mineral) FK (grupo)/Grupos PK(dieta) PK(dieta, dia, comida, alimento) FK1(dieta)/Dietas FK2 (alimento)/Alimentos PK (dieta, alimento) FK1(dieta) /Dietas FK2 (alimento)/Alimentos PK(grupo) Escriba las siguientes expresiones relacionales: Minerales y vitaminas que aporta una dieta cuyo campo dieta = “Anemia” (AR, CROT y SQL). Alimentos prohibidos en todas las dietas que incluyen alimentos del grupo cereales (AR, CROD, CROT). Cantidad de pan recomendada para cada día de la semana de una dieta cuyo campo dieta = “Cardiopatía” (AR,SQL). a) b) c) Peso P2: 30% (37,5%, 37,5%,25%) Tiempo: 45 min. P3: Lenguajes relacionales (Reescritura) Dado el siguiente esquema: Recetas (receta, dificultad, tiempo) Ingredientes (receta, ingrediente, unidad, cantidad) Pk(receta) Pk(receta, ingrediente) Fk1(receta)/Recetas Dada la siguiente expresión de una consulta en CROT en WinRDBI: {Rx.receta|recetas(Rx) and (forall Ix) (not (ingredientes(Ix) and Ix.receta='gazpacho' ) or (exists Iy) (ingredientes(Iy) and Iy.ingrediente=Ix.ingrediente and Rx.receta = Iy.receta)) }; a) b) Peso: Exprese en castellano el conjunto de tuplas definidas por dicha consulta. Rescríbala en SQL, AR y CROD según la notación teórica. P3: 20% (25%, 75%) Tiempo: 30 min. Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail [email protected] Web www.lsi.us.es Bases de Datos (29 Enero 2009) e.t.s. ingeniería informática Solución P1: Vitamina Grupo Calorías Descripción Cantidad Mineral Unidad Alimento Recomendación Dieta Afección Día Comida P1{grupo descripción } P2{alimento grupo} P3{(alimento, unidad, cantidad) calorías} P4{(grupo, vitamina) grupo, vitamina } P5{(grupo, mineral) grupo, mineral } P6{ dieta afección} P7{(dieta, día, comida, alimento) unidad, cantidad } P8{(dieta, alimento) recomendación } Relaciones Relación Grupos Alimentos Calorias Vitamina Minerales Dietas Comp_dietas Esquema grupo, descripción alimento, grupo alimento, unidad, cantidad, calorías grupo, vitamina grupo, mineral dieta,afección dieta, dia, comida, alimento, unidad, cantidad PK grupo alimento (alimento, unidad, cantidad) (grupo, vitamina) (grupo, mineral) dieta (dieta, dia, comida, alimento) Alim_Dieta dieta, alimento, recomendación (dieta, alimento) FK alimento/Alimentos grupo/Grupos grupo/Grupos dieta /Dietas alimento/Alimentos dieta /Dietas alimento/Alimentos Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail [email protected] Web www.lsi.us.es Bases de Datos (29 Enero 2009) Solución P3: Recetas que contienen, al menos, todos los ingredientes del Gazpacho. SQL q:=SELECT R.receta FROM recetas R WHERE NOT EXISTS (SELECT I1.ingrediente FROM ingredientes I1 WHERE I1.receta='gazpacho' AND NOT EXISTS (SELECT I2.ingrediente FROM ingredientes I2 WHERE I2.ingrediente=I1.ingrediente AND I2.receta=R.receta) ) ; CROD q(receta:Rx)<-(recetas(receta:Rx ) and (forall Ix)(not (ingredientes(ingrediente:Ix, receta:'gazpacho') ) or ingredientes(ingrediente:Ix, receta:Rx))); AR Ingredientes receta , ingrediente Ingredientes ingrediente receta ' Gazpacho ' e.t.s. ingeniería informática