BASES DE DATOS

Anuncio
BASES DE DATOS
curso 2012/2013
Solución Actividad 5: Estimación de estadísticas
1 – Considérense las relaciones r1(A, B, C), r2(C, D, E) y r3(E, F) del ejercicio anterior.
Supóngase que no hay claves primarias, excepto el esquema completo. Sean V(C, r1)=900, V(C,
r2)=1100, V(E, r2)=50 y V(E, r3)=100.
Supóngase que r1 tiene 1000 tuplas, r2 tiene 1500 tuplas y r3 tiene 750 tuplas. Estímese el
tamaño de r1 ⋈ r2 ⋈ r3 y diséñese una estrategia eficiente para el cálculo del join.
Opción a) (r1 ⋈ r2) ⋈ r3
Suponiendo que todos los valores son equiprobables, y dado que los atributos comunes a r1 y
r2 no son clave de ninguna de estas relaciones, el número de tuplas en r1 ⋈ r2 se calcula como:
min
∗
,
,
∗
= min
,
∗
,
∗
= min 1666, 1364 = 1364 tuplas
Igualmente, dado que los atributos comunes a r1 ⋈ r2 y r3 no son clave de ninguna de estas
relaciones, el número de tuplas en (r1 ⋈ r2) ⋈ r3 se calcula como:
min
∗
,
∗
= min 20460, 10222 = 10222 tuplas
Opción b) r1 ⋈ (r2 ⋈ r3)
En este caso, el número de tuplas en r2 ⋈ r3 sería:
1500 ∗ 750 1500 ∗ 750
$ ∗$ $ ∗$
min #
,
( = min #
,
( = min 22500, 11250 = 11250
50
100
% &, '2 % &, '3
y el número de tuplas en r1 ⋈ (r2 ⋈ r3) se calcula como:
min #
11250 ∗ 1000 11250 ∗ 1000
,
( = min 10227, 12500 = 10227
900
1100
Una buena estrategia reuniría primero r1 y r2, dado que la relación intermedia es de tamaño
parecido a r1 o r2. Después se reúne r3 a este resultado.
BASES DE DATOS
curso 2012/2013
2– A partir del esquema relacional siguiente:
PropertyForRent (propertyNo, street, city, postcode, type, rooms, rent, ownerNo)
Client (clientNo, fName, lName, address, telNo, prefType, maxRent)
Viewing (clientNo, propertyNo, comment, viewDate)
a) Representar gráficamente mediante árboles las expresiones del álgebra relacional de la
consulta siguiente, y transformarla a una forma más eficiente. Enunciar las reglas de
equivalencia utilizadas en cada uno de los pasos del proceso.
Para los inquilinos en perspectiva que estén buscando apartamentos, localizar los inmuebles
que satisfacen sus requisitos y son propiedad del propietario CO93.
SELECT p.propertyNo, p.street
FROM Client c, Viewing v, PropertyForRent p
WHERE
c.prefType = ‘Flat’ AND
c.clientNo = v.clientNo AND
v.propertyNo = p.propertyNo AND
c.maxRent >= p.rent AND
c.prefType = p.type AND
p.ownerNo = ‘CO93’;
b) Estimar el tamaño de las operaciones que aparecen en el árbol final, teniendo en cuenta lo
siguiente:
nClient = 1000,
V(preftype, Client) = 5,
min(maxRent, Client) = 100,
min (rent, PropertyForRent) = 350,
V(rent, PropertyForRent) = 20
V(clientNo, Viewing) = 250,
V(type, PropertyForRent) = 5
nViewing = 3000,
nPropertyForRent = 500,
V(maxRent, Client) = 50
max(maxRent, Client) = 3000,
max (rent, PropertyForRent) = 1000,
V(ownerNo, PropertyForRent) = 30,
V(propertyNo, Viewing) = 400
Desplazar σ hacia las hojas del árbol
(reglas 1, 2, 7)
BASES DE DATOS
curso 2012/2013
Sustituir el producto cartesiano seguido de σ
por ⋈ (regla 4)
Determinar las operaciones σ y ⋈ que producen
menos tuplas, y ejecutarlas cuanto antes (reglas 2 y
6)
Desplazar ∏ hacia las hojas del árbol (reglas 3 y 8)
Sustitución de c.prefType = p.type por (p.type =
‘Flat’)
ÁRBOL 1
(1*) σc.prefType = ‘Flat’ aplicar Regla 1:
(2*) ⋈c.clientNo
1
(2 345623,7)
200
aplicar Regla 7b: clientNo es clave de Client, por lo que cada tupla de V se
combina como máximo con una tupla de C. Por lo tanto, nc ⋈ v < nv
Como clientNo es foránea en V, entonces nc ⋈ v nv 3000
Como σc.prefType=`Flat` se queda con 1/5 tuplas, entonces el número de tuplas estimado será
3000/5
v. clientNo
600 tuplas
(3*) σp.ownerNo = ‘C093’ aplicar Regla 1:
O
(PQ 3 RP,2)
17
BASES DE DATOS
curso 2012/2013
(4*) ⋈v.propertyNo p.propertyNo aplicar Regla 7b: propertyNo es clave de PropertyForRent, por lo que
cada tupla de V se combina como máximo con una tupla de P. Por lo tanto, nv ⋈ P <= nv
Como propertyNo es foránea en P, entonces nv ⋈ P = nv = 600
Como σp.ownerNo = `C093` se queda con 1/30 tuplas, entonces el número de tuplas estimado será
600/30 = 20 tuplas
(5*) σc.maxRent >= p.rent ^c.prefType = p.type aplicar Regla 3 (Conjunción) estimar el tamaño de cada parte
de la conjunción
Regla 2: σc.maxRent >= p.rent como no se conoce a priori el valor de p.rent se estima la mitad
$7⋈ v⋈ p
20
=
= 10 = V1
2
2
Regla 1: σc.prefType = p.type como se conoce el valor de prefType = ‘Flat’
$7⋈ v⋈ p
20
=
= 4 = V2
%(WXYZ, Y)
5
Regla 3:
$7⋈ v⋈ p
V1 [ V2
\$7⋈ v⋈ p ]
= 20
10 [ 4
=2
202
ÁRBOL 2
(6*) σp.ownerNo = ‘C093’ aplicar Regla 1:
O
(PQ 3 RP,2)
=
= 17
(7*) ⋈v.propertyNo= p. propertyNo aplicar Regla 7b: propertyNo es clave de PropertyForRent, por lo que
cada tupla de V se combina como máximo con una tupla de P. Por lo tanto, nv ⋈ p <= nv
Como propertyNo es foránea en V, entonces nv ⋈ p = nv = 3000
Como σp.ownerNo = ‘C093’ se queda con 1/30 tuplas, entonces el número de tuplas estimado será
3000/30 = 100 tuplas
(8*) σc.prefType = ‘Flat’
aplicar Regla 1:
1
(2 345623, )
=
= 200
(9*) ⋈c.clientNo= v.clientNo aplicar Regla 7b: clientNo es clave de Client, por lo que cada tupla de V se
combina como máximo con una tupla de P. Por lo tanto, nc ⋈ v <= nv
Como clientNo es foránea en V, entonces nc ⋈ v = nv = 3000
Como σc.prefType = ‘Flat’ se queda con 1/5 tuplas, entonces el número de tuplas estimado será
100/5 = 20 tuplas
(10*) σc.maxRent >= p.rent ^c.prefType = p.type aplicar Regla 3 (Conjunción) estimar el tamaño de cada
parte de la conjunción
Regla 2: σc.maxRent >= p.rent como no se conoce a priori el valor de p.rent se estima la mitad
$7⋈ v⋈ p
20
=
= 10 = V1
2
2
Regla 1: σc.prefType = p.type como se conoce el valor de prefType = ‘Flat’
$7⋈ v⋈ p
20
=
= 4 = V2
%(WXYZ, Y)
5
Regla 3:
$7⋈ v⋈ p
V1 [ V2
\$7⋈ v⋈ p ]
= 20
10 [ 4
202
=2
BASES DE DATOS
curso 2012/2013
ÁRBOL 3
(11*) σp.ownerNo = ‘C093’ ^ p.type= ‘Flat’ aplicar Regla 3 (Conjunción) estimar el tamaño de cada parte de
la conjunción
Regla 1: σp.ownerNo = ‘C093’ como se conoce el valor de p.ownerNo
$2
500
=
= 17 = V1
%(^_$Z'`^, Y
30
Regla 1: σp.type= ‘Flat’ como se conoce el valor de p.type
$2
500
=
= 100 = V2
%(WXYZ, Y
5
Regla 3:
$p
a ba
\
p]
500
b
5002
= 3.4 ≈ 4
(12*) ⋈v.propertyNo
p. propertyNo aplicar Regla 7b: propertyNo es clave de PropertyForRent, por lo que
cada tupla de V se combina como máximo con una tupla de P. Por lo tanto, nv ⋈ p <= nv
Como propertyNo es foránea en V, entonces nv ⋈ p = nv = 3000
Como σp.ownerNo = ‘C093’ ^ p.type= ‘Flat’ se queda con 4/500 tuplas, entonces el número de tuplas
estimado será 3000 x 4/500 = 2.4 ≈ 3 tuplas
(13*) ⋈c.clientNo= v.clientNo aplicar Regla 7b: clientNo es clave de Client, por lo que cada tupla de V se
combina como máximo con una tupla de P. Por lo tanto, nc ⋈ v <= nv
Como clientNo es foránea en V, entonces nc ⋈ v = nv = 3000
Como σc.prefType = ‘Flat’ se queda con 1/5 tuplas, entonces el número de tuplas estimado será
3/5 = 0,6 tuplas
(14*) σc.maxRent >= p.rent aplicar Regla 2: como no se conoce a priori el valor de p.rent se estima la
mitad
$7⋈ v⋈ p
0.6
=
= 0.3 WdYefV
2
2
Descargar