1. (3,5 puntos) 2. (1,25 puntos) • Cobertura mínima: • Claves

Anuncio
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
Descargar