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