Expresiones algebraicas equivalentes Francisco Moreno Dos expresiones del

Expresiones algebraicas equivalentes Francisco Moreno

Dos expresiones del álgebra relacional, E 1 y E 2, son equivalentes si representan la misma relación: E 1 E 2

Sean E, E 1, E 2 y E 3 expresiones del álgebra relacional. • Conmutatividad para reunión natural, reunión y producto cartesiano. F es una condición que involucra atributos de E 1 y E 2. E 1 ⋈ E 2 ⋈ E 1 ⋈F E 2 ⋈F E 1 Natural Join Reunión E 1 x E 2 x E 1 La reunión es E 1 ⋈F E 2 F(E 1 x E 2)

• Asociatividad para las mismas tres operaciones. F 1 y F 2 son condiciones. (E 1 ⋈ E 2 ⋈ E 3 E 1 ⋈ E 2 ⋈ E 3 (E 1 ⋈F 1 E 2 ⋈F 2 E 3 E 1 ⋈F 1 E 2 ⋈F 2 E 3 (E 1 x E 2 x E 3 E 1 x E 2 x E 3 Donde: F 1 involucra solo atributos de E 1 y E 2, F 2 involucra solo atributos de E 2 y E 3

• Las operaciones de unión en intersección también son conmutativas y asociativas: E 1 E 2 E 1 (E 1 E 2) E 3 E 1 (E 2 E 3)

• Una consulta que involucra el join de N relaciones genera T(N) * N! planes diferentes de ejecución (planes basados solo en asociatividad y conmutatividad) • T(N) es el número de formas en que una permutación particular se puede parentizar. • Ej: si N = 4, T(4) = 5 entonces 5 * 4! = 120 planes Fórmula para obtener T(N) Ver los números de Catalán


• Cascada de proyecciones. x 1, …, xn( y 1, …, yn (E)) x 1, …, xn(E) Con x 1, …, xn y 1, …, yn

• Cascada de selecciones. F 1( F 2(E)) F 2 ^ F 1(E) Luego, se puede conmutar el lado izquierdo: F 1( F 2(E)) F 2( F 1(E))

• Conmutando selecciones y proyecciones. Si F involucra solo atributos entre x 1, …, xn entonces: x 1, …, xn( F(E)) F( x 1, …, xn(E)) De una manera más general, si F involucra atributos y 1, …, ym x 1, …, xn: x 1, …, xn( F (E)) x 1, …, xn( F( x 1, …, xn, y 1, …, ym)(E))

• Conmutando selecciones con el producto cartesiano. Si todos los atributos usados en F pertenecen a E 1, entonces : F(E 1 x E 2 ) F(E 1) x E 2

• Corolario 1: Si F = F 1 ^ F 2 , donde F 1 involucra solo atributos de E 1 y F 2 involucra solo atributos de E 2, entonces : F(E 1 x E 2) F 1(E 1) x F 2(E 2)

• Corolario 2: Si F 2 involucra atributos de ambas expresiones y F 1 solo de E 1, entonces: F(E 1 x E 2 ) F 2( F 1(E 1) x (E 2))

• Conmutando la selección con la unión. F(E 1 E 2 ) F(E 1) F(E 2) • Conmutando intersección. la selección con F(E 1 E 2 ) F(E 1) F(E 2) la

• Conmutando la selección con la diferencia. F(E 1 - E 2 ) F(E 1) - F(E 2 ) F(E 1 - E 2 ) F(E 1) - E 2

• Selección con reunión natural. Si F involucra únicamente atributos que son comunes a E 1 y a E 2, entonces : F(E 1 ⋈ E 2 ) F(E 1) ⋈ F(E 2)

• Conmutando la proyección con un producto cartesiano. Sean los atributos A 1, …, An de los cuales B 1, …, Bm aparecen en E 1 y C 1, …, Ck aparecen en E 2, entonces : A 1, …, An(E 1 x E 2) B 1, …, Bm(E 1) x C 1, …, Ck(E 2)

• Conmutando la proyección con la unión. A 1, …, An(E 1 E 2 ) A 1, …, An(E 1) A 1, …, An(E 2) • Note que esta equivalencia no se cumple para la intersección ni para la diferencia (a menos que A 1, …, An sean todos los atributos de las relaciones)

Un ejemplo concreto en Oracle: CREATE TABLE emp( cc NUMBER(8) PRIMARY KEY, dep NUMBER(5) NOT NULL, sal NUMBER(6) NOT NULL ); INSERT INTO emp VALUES(1, 5, 100); INSERT INTO emp VALUES(2, 5, 200); INSERT INTO emp VALUES(3, 7, 100); SET AUTOTRACE ON

Sea: Cada empleado con todos los empleados (producto cartesiano), pero solo se imprimen los datos de los empleados (e 1): SELECT e 1. * FROM emp e 1, emp e 2; En la siguiente consulta ¿el optimizador evita el producto? SELECT e 1. * FROM emp e 1, emp e 2 WHERE e 1. cc = e 2. cc;

--Ahora sea: CREATE TABLE curso( cod NUMBER(8) PRIMARY KEY, nom VARCHAR 2(10) NOT NULL ); INSERT INTO curso VALUES(1, 'Música'); INSERT INTO curso VALUES(2, 'Pintura');

Cada empleado con todos los cursos (producto cartesiano), pero solo se imprimen los datos de los empleados: SELECT e 1. * FROM emp e 1, curso; En la siguiente consulta ¿el optimizador evita el producto? SELECT DISTINCT e 1. * FROM emp e 1, curso;

• Otra prueba: Hacer un join entre las tablas A y B donde B tiene un atributo que es clave foránea con respecto a la clave primaria de A. Ver que sucede si solo se seleccionan en la consulta los datos de la tabla B.

Considere también transformaciones como las siguientes. “Imprimir el código de todos los empleados cuyos dptos. aparecen en la tabla dept” • Compare estas dos consultas: SELECT idemp FROM emp WHERE dpto IN (SELECT dpto FROM dept); SELECT idemp FROM emp e, dpto d WHERE e. dpto = d. dpto;
- Slides: 24