DISEÑO de BASES de DATOS Solución Febrero 2006 5. (0,75 puntos) 1. (3,5 puntos) 2. (1,25 puntos) • TABLA • Cobertura mínima: · · · · · · · · · · · · · · · · · AB+ DÆ E B+ F D+ C+ No 3FN No 2FN A B C D 2 10.000 3 1.000 4 200 TIENDA 2 10.000 VIAJE 2 10.000 4 200 PEDIDO Claves: AB AD 10.000.000 filas 2 FN, 3FN y FNBC: R 100 No primos C,E,F,G DÆB AÆ C CÆ B • 1 A B C D E F G E redun. a izq. A B C D E FR Claves candidatas: DÆ A AÆ F S TR E F No FNBC R4 R1 A B C D C laves: AB AD E G 2FN C D B No FNBC C laves: AB AD R6 A B C R5 C E R3 D C lav es: B D F R3 D F 3. (1,5 puntos) 1..* 1 edil_actual municipio cód {key} 1..* 1 Nombre provincia censados cargo se_presenta partido 1..* {weak} colegio cód {partial key} dirección 1 1..* 1..* 1..* 1 1 {identifying} 1..* posición {total, solapada} cód {key} dni nombre apellidos candidato resultados /núm_concejales /núm_votos /porcentaje cód {key} siglas {key} nombre {key} 0..* dirección calle recuento localidad cp núm_votos Tabla pequeña a. IS-c(nombre) Æ clave a. IP(numero) Æ clave b. IS-nc(fecha, camión) AB A2 B1 AB1 BE1 B1 E1 BE1 B B1 F 6. (0,75 puntos) σNúmero > 101010 AND Viaje = 1111 AND Tienda = ”BGF” (Pedido).: se pueden aplicar S1, S7 y S8: - CS1a= b= 100.000 accesos - S7 sobre σ Número > 101010 (Pedido): • CS4 = xnúmero + (b/2) = 5 + (100.000/2) = 50.005 accesos - S8 sobre σViaje = 1111 AND Tienda = ”BGF” (Pedido) Æ con IS(viaje,tienda,almacén): • CS6a = xviaje,tienda,almacén + s xtienda,viaje = 9 + 3 = 12 accesos - S8 sobre σViaje = 1111 AND Tienda = ”BGF” (Pedido) Æ con IS(tienda, viaje): • CS6a = xtienda,viaje + stienda,viaje = 6 + 3 = 9 accesos - Lo mejor es aplicar S8 sobre el IS-nc(tienda, viaje) aplicando S6a para Viaje = 1111 AND Tienda = ”BGF” y para cada fila obtenida comprobar el resto de la condición en memoria (Número>101010). mesa cód {key} distrito 0..* sección letra Núm_nulos núm_blancos 4. (0,75 puntos) A A2 A11A12 A3 C1 a. IA(viaje, almacén) b. IS-nc(tienda) c. IS-c(almacén, viaje, número, tienda) Æ plan con sólo 1 índice para 3 d. IS-c(número) Æ clave En PEDIDO podríamos crear un índice que sirva como plan para la transacción 1. Otra posibilidad pasaría por crear IA(viaje, número) para las transacciones 1 y 3 y modificar el resto de índices para dar una respuesta coherente. Parece menos útil crear IA(tienda). En 4 podríamos crear un índice que aporte un plan con todos los datos de pedido necesarios en la consulta ordenados por almacén R2 B G R7 B D R2 B G político E FNBC R2 B G R3 D R5 C 100.000 filas OR. primaria + ISs Asumimos que O y DC no son opciones posibles. 3FN No 2FN A 45 filas ATRIBUTOS where: viaje Æ a order:viaje, almacén Æ a join:tienda Æ b join:viaje Æ a where:almacén Æ c order:viaje, número Æ c join:viaje Æ a order:almacén Æjoin: ¿útil ordenarlo? join:nombre where:nombre join:número Æ a join:número Æ a where:fecha, camión Æ a E B1 E1 E2 C C1 C2 BB B1 B1’ D B1 E1 D1 D2 B1’ E1’ C1 7. (0,75 puntos) <resultado>{ for $v in //viaje, $a in almacen where $v/@almacen=$a return <viaje> { $v/@almacen, $a/@direccion, <numpedidos> {count($v/pedido)} </pedidos>, <peso> {sum($v/pedido/@peso)} </peso> } </viaje> }</resultado> 8. (0,75 puntos) Esquema de fragmentación: • PEDi=σAlmacén=”i”(PEDIDO) para i={1,2,3,4} • VIAJi= =σAlmacén=”i”(VIAJE) para i={1,2,3,4} • CAMi= CAMIÓN as C |× C.matrícula=V.camión VIAJi as V Esquema de replicación y asignación: Tabla Alm1 Alm2 Alm3 Alm4 VIAJE VIAJ2 VIAJ3 VIAJ4 VIAJE PED2 PED3 PED4 PEDIDO PEDIDO CAM2 CAM3 CAM4 CAMIÓN CAMIÓN ALMACÉN ALMACÉN ALMACÉN ALMACÉN ALMACÉN TIENDA TIENDA TIENDA TIENDA TIENDA DISEÑO de BASES de DATOS Solución Septiembre 2006 1. (3,5 puntos) 5. (0,75 puntos) TABLA TR 2. (1,25 puntos) repetido S · · · AB+ D+ A B C D E F DÆC CÆB VIAJA A B C D E F G H DÆE DÆC CÆA D redun. a izq. F+ DÆC E+ · · · · · · · · · · · No primos C,F,G,H · x 10.000 filas Claves: DAB DE x ALUMNO 10.000 filas R1 A B C R1 A B C R1 A B C No 2FN R2 D F G R A B C D E F G H No 2FN R5 D F No 3FN 2FN 3FN No 2FN CENTRO R3 E H No 2FN A B D E A B D E No R4 FNBC R6 F G R8 D E Id Genérico Medicamento (1,N) (1,N) Nombre CONTIENE Descripción (1,N) (0,N) Nombre (0,N) EXISTENCIAS (1,N) Laboratorio Nombre ELABORA Tfno Id Localidad (1,1) Unidad Cantidad Tfno Localidad Presentación Id Formato EXISTENCIAS (0,N) 1.000 1 2.000 2 1.000 4 1.000 2 1.000 3 10.000 c. IP(centro, numExpediente) Æ clave tabla pequeña a. IS-c(codigoC) Æ clave b. IS-c(nombre) Æ clave a. IP(matrícula) Æ clave Por lo tanto, la mejor opción es resolver la reunión mediante el algoritmo R4 (de direccionamiento calculado) cuando el fichero menor no entra en memoria. DiaSem Hora 7. (0,75 puntos) <!ELEMENT autobuses (centro+)> <!ELEMENT centro (autobus+)> <!ATTLIST centro codigoc ID #REQUIRED nombre CDATA #REQUIRED dirección CDATA “”> <!ELEMENT autobus (alumno+)> <!ATTLIST autobus matricula ID #REQUIRED unidades (0,N) Coste Dirección Farmacéutica Nombre 4 a. IP(centro, alumno, autobús) Æ clave b. IS-nc(autobús) 6. (0,75 puntos) • CR1=bV+(bv*bA)/(n-2)=800+(800*1.000)/50=16.800 bloques • CR2=bV+|Viaje|*(xnumExpediente, centro+ 1)=800+10.000*(3+1)=40.800 bloques • CR3=2*bV*(1+log2 bV)+ bV + bA=2*800*(1+10)+800+1.000=19.400 bloques • CR4=3*(bV+bA)=3*(800+1.000)=5.400 bloques Repartos Almacén Farmacia Id Dirección 10.000 300 filas (0,N) unidades (0,N) 3 ORG + ISs ALUMNO: para mejorar el group by de la 4ª transacción se podría intentar con IS-c(localidad, numexpediente, centro), de modo que la consulta sólo precise recorrer ese índice. Claves: DAB DE Dirección Droga (1,1) VENTA COMERCIALIZA Id 2.000 AUTOBÚS 3 10.000 join:matrícula Æ a R3 E H 3. (1,5 puntos) Id 30 filas 1 ATRIBUTOS join:alumno, centro Æ a where:autobúsÆ b join:autobús Æ b join:centro Æ a join:alumno, centro Æ a where:autobúsÆ b join:numExpediente, centro Æ a order:centro Æ a join:centro Æ a join:numExpediente, centro Æ a group: localidad Æjoin: ¿útil ordenarlo? join:codigoC group:codigoC, nombre Æjoin: ¿útil ordenarlo? join:codigoC where:nombre Asumimos que O y DC no son opciones posibles. No FNBC Claves: DAB DE R4 R7 A B E FNBC R6 F G R3 E H R5 D F FR Localidad Tfno 4. (0,75 puntos) asientos CDATA #IMPLIED compañía CDATA #IMPLIED > <!ELEMENT alumno EMPTY> <!ATTLIST alumno numExpediente ID #REQUIRED nombre CDATA #IMPLIED localidad CDATA #IMPLIED fechaInic CDATA #IMPLIED> 8. (0,75 puntos) B B1 B2 C3 C1 C3 BC B1 C1 C C1 C2 A1 E C1 E1 E2 A A1 C1 FF A1 C1 F1 A1’ C1’ F1’ FF1 F A1 C1 F1 F2 D C1 D1 D3 D4 C1 Esquema de fragmentación: • AUT_EST= π matrícula, compañía AUTOBUS • AUTi= σcompañía=i AUTOBÚS, i=1,2,3 • VIAJi= VIAJA as V |x V.autobús=A.matrícula AUTi as A, i=1,2,3 • ALUMi= ALUMNO as A |x A.numExpediente=V.alumno and A.centro=V.centro VIAJi as V, i=1,2,3 Esquema de replicación y asignación: COMP1 COMP2 COMP3 LOCALIDAD LOCALIDAD LOCALIDAD LOCALIDAD PARADA PARADA PARADA PARADA CENTRO CENTRO CENTRO CENTRO AUTOBÚS AUT_EST, AUT1 AUT2 AUT3 VIAJA VIAJA VIAJ 2 VIAJ 3 ALUMNO ALUM1 ALUM 2 ALUM 3