Download consultas con álgebra relacional a la B.D. de piezas

Document related concepts
no text concepts found
Transcript
consultas con álgebra relacional a la B.D. de piezas
ejemplo:
Considérese el siguiente esquema (simplificado) de una B.D. relacional
Pieza
(clvPieza: entero; nombPieza, color: tpNombre);
Proveedor (clvProv: entero; nombProv: tpNombre);
suministrar (clvProv: entero; clvPieza: entero)
clvProv clave ajena de Proveedor; clvPieza clave ajena de Pieza;
Proveedor
clvProv
nombProv
PK
NN
Tema III: el enfoque Relacional
Suministrar
clvProv
PK
PK
clvPieza
curso
2015/16
Pieza
clvPieza
nombPieza
color
PK
NN
S. Velilla Univ. de Zaragoza
1
consultas con álgebra relacional a la B.D. de piezas
8 Clave de las piezas que son suministradas por más de un proveedor
9 Clave de las piezas que a lo sumo tienen un proveedor
10 Clave de los proveedores que sólo suministran un tipo de piezas
11 Clave de los proveedores que suministran alguna pieza en exclusiva (sólo ellos)
12 Clave de los proveedores “prescindibles”, pues no suministran ninguna pieza en exclusiva
13 Parejas (sin repetir ninguna) de proveedores que comparten el suministro de alguna pieza
14 Proveedor(es) que más piezas suministra de un mismo tipo (tuercas, tornillos, etc.)
15 Parejas (sin repetir ninguna) de proveedores suministran exactamente las mismas piezas
16 Clave de los proveedores que suministran piezas de todos los colores
17 Clave de los proveedores que suministran más de dos piezas
18 Pares de suministradores (S1, S2) tales que S1 suministra todas las piezas que suministra S2
19 Proveedor(es) que más piezas suministra para cada tipo de pieza (tuercas, tornillos, etc.)
•••••
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
2
consultas con álgebra relacional a la B.D. de piezas
8
a
Clave de las piezas que son suministradas por más de un proveedor.
R8 = ∏S1.clvPieza (σp (Suministrar S1 × Suministrar S2))
siendo p = S1.clvProv <> S2.clvProv AND S1.clvPieza = S2.clvPieza
8
b
R1 (clvPieza, numProv) = AGRUPAR contar(Suministrar; clvPieza) ≡
R8 = ∏clvPieza (σnumProv > 1 (R1))
8
c
piezas suministradas junto con
el número de proveedores que
las suministran
R2 (clvPieza, clvProv) = AGRUPAR max(clvProv)(Suministrar; clvPieza)
≡ piezas suministradas
junto con el proveedor
con mayor clvProv
R8 = ∏clvPieza (Suministrar – R2)
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
3
consultas con álgebra relacional a la B.D. de piezas
9
a
Clave de las piezas que a lo sumo tienen un proveedor.
R8 =
clave de las piezas suministradas por más de un proveedor (preg.8)
R9 = ∏clvPieza (Pieza) – R8
9
b
R9 =
∏clvPieza (σcontar = 1 (AGRUPAR contar(Suministrar; clvPieza))) → piezas con un proveedor
∪ ∏clvPieza (Pieza) – ∏clvPieza (Suministrar)
Tema III: el enfoque Relacional
→ piezas sin proveedor
curso
2015/16
S. Velilla Univ. de Zaragoza
4
consultas con álgebra relacional a la B.D. de piezas
10
a
Clave de los proveedores que sólo suministran un tipo de piezas.
S1 = S2 = ∏clvProv, nombPieza (Suministrar
Pieza)
≡ proveedores que suministran algún tipo de pieza
y nombre de las piezas que suministran
P1 = ∏S1.clvProv (σp (S1 × S2))
≡ proveedores suministran más de un tipo de piezas
siendo p ≡ S1.clvProv = S2.clvProv AND S1.nombPieza <> S2.nombPieza
R10 = ∏clvProv (Suministrar) – P1)
10
b
R1 (clvProv, num) = AGRUPAR contar(DISTINCT nombPieza)(Suministrar
Pieza; clvProv)
≡ proveedores que suministran alguna pieza y número de tipos de piezas que suministran
R10 = ∏clvProv (σnum = 1 (R1))
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
5
consultas con álgebra relacional a la B.D. de piezas
11
a
Clave de los proveedores que suministran alguna pieza en exclusiva (sólo ellos).
R8 =
clave de las piezas suministradas por más de un proveedor (preg.8)
R2 = ∏clvPieza (Suministrar) – R8
R11 = ∏clvProv(R2
≡ piezas suministradas por un sólo proveedor
Suministrar)
11
b
R1 (clvPieza, numProv) = AGRUPAR contar(Suministrar; clvPieza)
≡ piezas suministradas, junto con el número de proveedores que las suministran
R11 = ∏clvProv (σnumProv = 1 (R1)
Tema III: el enfoque Relacional
Suministrar)
curso
2015/16
S. Velilla Univ. de Zaragoza
6
consultas con álgebra relacional a la B.D. de piezas
12
a
Clave de los proveedores “prescindibles”, pues no suministran ninguna pieza en exclusiva.
R11 =
clave de los proveedores que suministran alguna pieza en exclusiva (preg.11)
R12 = ∏clvProv (Proveedor) – R11
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
7
consultas con álgebra relacional a la B.D. de piezas
13
a
Parejas (sin repetir ninguna) de proveedores que comparten el suministro de alguna pieza.
R2 = RENOMBRAR (Suministrar; clvProv2 = clvProv)
R13 = ∏clvProv, clvProv2 (σclvProv < clvProv2 (Suministrar
R2))
13
b
R13 = ∏S1.clvProv, S2.clvProv (σp (Suministrar S1 × Suministrar S2)
siendo p = S1.clvProv < S2.clvProv AND S1.clvPieza = S2.clvPieza
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
8
consultas con álgebra relacional a la B.D. de piezas
14
a
Proveedor(es) que más piezas suministra del mismo tipo (tuercas, tornillos, etc.)
R1 (clvProv,nombPieza, num) = AGRUPARcontar(Suministrar
Pieza; clvProv,nombPieza)
≡ clave de los proveedores junto con el número de piezas suministradas de cada tipo
MxNum (num) = AGRUPARmax(num)(R1)
≡ número max. de piezas de un mismo tipo suministradas por un proveedor
R14 = R1
Tema III: el enfoque Relacional
MxNum
curso
2015/16
S. Velilla Univ. de Zaragoza
9
consultas con álgebra relacional a la B.D. de piezas
14
b
Proveedor(es) que más piezas suministra del mismo tipo (tuercas, tornillos, etc.)
Como no se pide el nombre de las piezas, se puede simplificar la consulta anterior
R1 (clvProv, num) = AGRUPARcontar(Suministrar
Pieza; clvProv,nombPieza)
≡ clave de los proveedores junto con el número de piezas suministradas de cada tipo
MxNum (num) = AGRUPARmax(num)(R1)
≡ número max. de piezas de un mismo tipo suministradas por un proveedor
R14 = R1
Tema III: el enfoque Relacional
MxNum
curso
2015/16
S. Velilla Univ. de Zaragoza
10
consultas con álgebra relacional a la B.D. de piezas
15
a
Parejas (sin repetir ninguna) de proveedores que suministran exactamente las mismas piezas.
P(clvProv1, clvProv2) = σP1.clvProv < P2.clvProv (∏clvProv(Proveedor) P1 × ∏clvProv(Proveedor) P2)
≡ todas las posibles parejas de proveedores
R1 = ∏clvProv1,clvProv2,clvPieza(σclvProv1 = S.clvProv (P × Suministrar S))
≡ pares de proveedores junto con las piezas suministradas por el primer proveedor
R2 = ∏clvProv1,clvProv2,clvPieza(σclvP2 = S.clvProv (P × Suministrar S))
≡ pares de proveedores junto con las piezas suministradas por el segundo proveedor
R15 = (P – ∏clvProv1,clvProv2 (R1 – R2)) – ∏clvProv1,clvProv2 (R2 – R1)
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
11
consultas con álgebra relacional a la B.D. de piezas
16
a
Clave de los proveedores que suministran piezas de todos los colores.
R1 = ∏clvProv(∏clvProv(Proveedor) × ∏color(Pieza) – ∏clvProv,color(Suministrar
Pieza))
≡ proveedores que no suministran alguno de los colores de las piezas
R16 = ∏clvProv (Suministrar) – R1
16
b
R16 = ∏clvProv,color(Suministrar
Tema III: el enfoque Relacional
Pieza) ÷ ∏color(Pieza)
curso
2015/16
S. Velilla Univ. de Zaragoza
12
consultas con álgebra relacional a la B.D. de piezas
17
a
Clave de los proveedores que suministran más de dos piezas
R1 (clvProv, numPiezas) = AGRUPAR contar(Suministrar; clvProv)
≡ proveedores junto con el número de piezas que suministran
R17 = ∏clvProv (σnumPiezas > 2 (R1)
Suministrar)
17
b
R17 = ∏S1.clvProv (σp (Suministrar S1 × Suministrar S2 × Suministrar S3))
siendo p = S1.clvPieza < S2.clvPieza AND S2.clvPieza < S3.clvPieza
AND S1.clvProv = S2.clvProv AND S2.clvProv = S3.clvProv
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
13
consultas con álgebra relacional a la B.D. de piezas
18
a
Pares de suministradores (S1, S2) tales que S1 suministra todas las piezas que suministra S2.
P(clvProv1, clvProv2) = ∏clvProv(Proveedor) P1 × ∏clvProv(Proveedor)
≡ todas las posibles parejas de proveedores
R1 = ∏clvProv1,clvProv2,clvPieza(σclvProv1 = S.clvProv (P × Suministrar S))
≡ pares de proveedores junto con las piezas suministradas por el primer proveedor
R2 = ∏clvProv1,clvProv2,clvPieza(σclvProv2
= S.clvProv (P ×
Suministrar S))
≡ pares de proveedores junto con las piezas suministradas por el segundo proveedor
R18 = P – ∏clvProv1,clvProv2 (R2 – R1)
Tema III: el enfoque Relacional
curso
2015/16
S. Velilla Univ. de Zaragoza
14
consultas con álgebra relacional a la B.D. de piezas
18
b
Pares de suministradores (S1, S2) tales que S1 suministra todas las piezas que suministra S2.
R3 (clvProv, numPiezas) = AGRUPAR contar(Suministrar; clvProv)
≡ proveedores junto con el número de piezas que suministran
R4(clvProv1, clvProv, S1.clvPieza) = ∏S1.clvProv (σp (Suministrar S1 × Suministrar S2))
siendo p ≡ S1.clvProv < S2.clvProv AND S1.clvPieza = S2.clvPieza
≡ pares de
proveedores
y piezas que
comparten
R5 (clvProv1, clvProv, numPiezas) = AGRUPAR contar(R4; clvProv1, clvProv)
≡ pares de proveedores junto con el número de piezas que comparten (las suministran los dos)
R18 = ∏clvProv1,clvProv (R5
Tema III: el enfoque Relacional
R3)
curso
2015/16
S. Velilla Univ. de Zaragoza
15
consultas con álgebra relacional a la B.D. de piezas
19
a
Proveedor(es) que más piezas suministra para cada tipo de pieza (tuercas, tornillos, etc.)
R1 (clvProv,nombPieza, num) = AGRUPARcontar(Suministrar
Pieza; clvProv,nombPieza)
≡ clave de los proveedores junto con el número de piezas suministradas de cada tipo
MxNum (nombPieza; num) = AGRUPARmax(num)(R1; nombPieza)
≡ tipos de pieza y número max. de piezas de ese tipo que suministra un proveedor
R19 = R1
Tema III: el enfoque Relacional
MxNum
curso
2015/16
S. Velilla Univ. de Zaragoza
16