Temario
 Introducción y fundamentos

 Introducción a SQL
 Modelo Entidad / Relación
 Modelo relacional
 Diseño relacional: formas normales

 Consultas
– Cálculo relacional
– Álgebra relacional
 Implementación de bases de datos

– Estructura física: campos y registros
– Indexación
• Índices simples
• Árboles B
• Hashing

– Compresión
1
Cálculo y álgebra relacional
 Formalismos para expresar operaciones de recuperación sobre una BD
en modelo relacional
– Cálculo es declarativo, álgebra es procedural

 Cálculo y álgebra son formalismos distintos pero lógicamente equivalentes
– Toda expresión de cálculo se puede expresar en álgebra y viceversa (Th Codd)
– Es decir, permiten expresar las mismas consultas

 Un lenguaje de consulta es completo si permite expresar cualquier consulta
del cálculo relacional
– Generalmente los SGBDs proporcionan un lenguaje completo con extensiones

2
Cálculo y álgebra relacional (cont)
 Utilidad del cálculo relacional
– Es más adecuado para establecer y verificar propiedades formales,
la consistencia de los modelos relacionales y sus formalismos
– Es útil para verificar detenidamente la corrección de aspectos complejos
o delicados en ciertas consultas que lo precisen
– La creación original del modelo relacional se fundamenta en el cálculo relacional
Interesa entenderlo para una comprensión más profunda del modelo relacional
y el fundamento de la tecnología de bases de datos

 Utilidad del álgebra relacional
– Se utiliza con fines más prácticos; es más manejable que SQL para diseñar
consultas complejas
– Los motores de SQL basan su representación interna de las consultas
en álgebra relacional (SQL se “parsea” a una estructura interna de álgebra)
3
Temario
 Introducción y fundamentos

 Introducción a SQL
 Modelo Entidad / Relación
 Modelo relacional
 Diseño relacional: formas normales

 Consultas
– Cálculo relacional
– Álgebra relacional
 Implementación de bases de datos

– Estructura física: campos y registros
– Indexación
• Índices simples
• Árboles B
• Hashing

– Compresión
4
Cálculo relacional
 Subconjunto del cálculo de predicados de primer orden
 Una consulta básica tiene la forma { t | cond (t) }, donde…
– t representa una variable de tupla
– cond es una expresión condicional
– La expresión representa (literalmente) un conjunto de tuplas
que cumplen la condición

 Ejemplo: { t | Vuelo(t) and t.origen = ‘LHR’ }

 Pero se pueden formular consultas más elaboradas
 Vamos a ver la forma general…

5
Forma general de una consulta
{ variables | condición }

6
Variables de una consulta
 Representan tuplas de esquemas relacionales
 Pueden ser una o más
{ t1, t2, …, tn | condición }

 Pueden indicarse atributos específicos de las variables
(y mezclar variables con y sin atributos…)
{ t1 . A, t1 . B, t1 . C, t2, …, tn | condición } /* A, B, C atributos de t1 */

7
Condición de una consulta
 Es una expresión (fórmula) de cálculo de predicados de primer orden
 Puede ser (definición recursiva):
1. Una fórmula atómica…
a) R(t), donde R es un esquema relacional, y t es una variable de tupla

b)

t1 . A op t2 . B

o bien

t1 . A op c

donde…

t1 y t2 son variables de tupla
A y B son atributos, c es una constante
op es un operador de comparación: =, <, , >, ,  /* Se puede ampliar… */

2. Operadores and, or, not aplicados a fórmulas
3. t, t aplicados a fórmulas

 Ejemplo: supongamos Usuario (nombre, nick), Contacto (usuario1, usuario2)
{ u2 . nombre |  u1  cont ( Usuario (u1) and Usuario (u2) and Contacto (cont)
and cont . usuario1 = u2 . nick and cont . usuario2 = u1 . nick
and u1 . nombre = ‘María’ ) }

8
Variables en una consulta
En una condición sólo pueden aparecer dos tipos de variables:
 Las variables propias de la consulta
 Variables cuantificadas con  o  dentro de la condición
 Todas deben llevar una condición de tipo de esquema R(t)

9
“Resultado” de una consulta
 El “resultado” de una consulta en cálculo relacional es un conjunto de tuplas
 Cuyos atributos son la unión de los atributos de todas las variables de tupla,
más los atributos indicados directamente
Por ejemplo, dados los esquemas:
Vuelo (número, origen, destino, hora)

Aeropuerto (código, ciudad)
Y la consulta:
{ v.número, a | Vuelo(v) and Aeropuerto(a) and v.origen = a.código}
Los atributos de las tuplas de la consulta son:
( número, código, ciudad )
v . número

a

 La condición filtra qué tuplas exactamente se incluyen en ese conjunto
10
Correspondencia con SQL
 Variables de consulta

Los términos que siguen a SELECT (con DISTINCT)
– Salvo que en SELECT no hay variables de tuplas, sólo campos

 Condiciones de tipo R(t)

Equivale a ‘R as t’ en la cláusula FROM
– Pero no se concreta si es JOIN, producto cartesiano, etc.

 Condiciones con  y 

Se pueden expresar con EXISTS, SOME y ALL
– La mayoría de las veces  se traduce simplemente
en un esquema en FROM, que no aparece en SELECT
– Si es difícil expresar un , se puede jugar con  y negación

 Otras condiciones

Aparecen tras WHERE, ON, etc.
– Pueden volverse implícitas en un NATURAL JOIN

 En principio no es común contemplar directamente en cálculo relacional (pero se puede):
– Operaciones de conjuntos: unión, intersección, diferencia, pertenencia
– Operaciones de agregación: COUNT, AVG, MAX, etc.
– Vistas y consultas anidadas

 ORDER BY no tiene sentido ya que el orden de tuplas no existe en el modelo relacional
11
Expresiones no seguras
 Se suele distinguir entre cálculo de tuplas (que hemos visto) y de dominio
– La diferencia es esencialmente de notación y son prácticamente equivalentes

 Expresiones no seguras
– Devuelven infinitas tuplas
Ejemplo: { t | not Vuelo(t) }
– Solución: evitarlas!  La caracterización de consultas seguras y no seguras
es compleja –no profundizaremos en ello en este curso

– Las equivalencias entre los diferentes formalismos (cálculo, álgebra, cálculo
de tuplas vs. de dominio) se dan con salvedad de las expresiones no seguras

12
Ejemplos…
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

Vuelos entre Charles de Gaulle y Heathrow
Hora de salida de los vuelos entre Charles de Gaulle y Heathrow
Vuelos que cubren el trayecto Charles de Gaulle – Heathrow en cualquier sentido
Nombre, fecha y destino de viaje de todos los pasajeros que vuelan desde Madrid

Vuelos entre Madrid y París
Vuelos que no tienen ninguna reserva
…
13
Temario
 Introducción y fundamentos

 Introducción a SQL
 Modelo Entidad / Relación
 Modelo relacional
 Diseño relacional: formas normales

 Consultas
– Cálculo relacional
– Álgebra relacional
 Implementación de bases de datos

– Estructura física: campos y registros
– Indexación
• Índices simples
• Árboles B
• Hashing

– Compresión
14
Álgebra relacional
 Expresa consultas en forma de operaciones a realizar para obtener las
tuplas deseadas
– A diferencia del cálculo relacional, en el que se expresan las condiciones
que deben cumplir las tuplas que se desean obtener
– Por este motivo el álgebra se considera procedural, y el cálculo declarativo

 El resultado de una consulta en álgebra relacional es un conjunto de tuplas
– Igual que en cálculo

 Tres tipos de operación

Unarias

Binarias

– Específicas de BD: selección, proyección, renombrado, join y sus variantes
– De conjuntos: unión, intersección, diferencia, producto cartesiano
– Extensiones: proyección generalizada, join externo, agregación…
15
Operaciones propias de BDs
 Selección
 Proyección
 Renombrado
 Joins
 División (la omitiremos, se puede derivar
de otras operaciones)

16
Select: condición (R)


Operación “horizontal”: filtra tuplas de una relación
–



Las que cumplen una condición

El operando R puede ser un esquema relacional, o una expresión de álgebra
–
–



Por tanto un conjunto de tuplas en cualquier caso
Esto es así para los operandos de todas las operaciones (lo sobreentendemos pues en adelante)

La condición puede ser:
–

–



Una comparación simple A op B o bien A op c donde:
A y B son atributos, c es una constante
op es un operador de comparación: =, <, , >, ,  (se pueden ampliar)
Operadores and, or, not, aplicados a otras condiciones

Es decir, las condiciones son como las del cálculo relacional, salvo que…
–

No se usan variables de tupla

–

No se usan condiciones de esquema (en su lugar aparecen nombres de esquemas en algún punto)

–

No se usan cuantificadores  y 
17
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

Vuelos entre Charles de Gaulle y Heathrow
Origen = ‘CDG’ and Destino = ‘LHR’ (VUELO)
 { (903, ‘CDG’, ‘LHR’, ‘14:40’), (447, ‘CDG’, ‘LHR’, ‘17:00’) }

Reservas por menos de 200€
Precio < 200 (RESERVA)
 { (123, 345, ‘20-12-10’, 170), (456, 345, ‘03-11-10’, 190) }
18
Algunas propiedades de 
 Los atributos de c (R) y los de R son… mismos
los
 |c(R)|  |R|
?
  es conmutativa: c (d (R)) = d (c (R)) = c and d (R)

19
Proyección: atributos (R)
 Operación “vertical”: se filtran atributos de una relación
 Los atributos deben ser un subconjunto de los atributos de R
 Si el conjunto de atributos de la proyección no contiene ninguna clave,
pueden repetirse tuplas
– Se eliminan las duplicaciones en tal caso (puesto que se trata de un conjunto)
– Como ya sabemos, los SGBD no necesariamente aplican esto de forma estricta

20
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

Ciudades con aeropuerto

Ciudad (AEROPUERTO)
 { (‘Madrid’), (‘Londres’), (‘París’) }

Aeropuertos con conexión entre sí
Origen, Destino (VUELO)
 { (‘MAD’, ‘CDG’), (‘MAD’, ‘ORY’), (‘LHR’, ‘CDG’), (‘CDG’, ‘LHR’) }

Número de los vuelos con salida desde Madrid-Barajas
Numero (Origen = ‘MAD’ (VUELO))
 { (345), (321) }

21
Algunas propiedades de 
 X(Y(R)) = X(R)
– Siempre y cuando X  Y, pues en otro caso la expresión es incorrecta

 |X (R)|  |R|
?
 X es una superclave de R  |X (R)| ? |R|
=
  no es conmutativa
– X(Y(R)) y Y(X(R)) sólo serían ambas correctas si X = Y
– Lo cual no tendría mucho sentido pues X y Y serían redundantes

22
Renombrado:  y 
1. Renombrado como expresión
De atributos: B1, B2, …, Bn (R) renombra los atributos de R a B1, …, Bn
De algunos atributos: A1/B1, …, Ak/Bk (R)
De esquemas y atributos: S (B1, …, Bn) (R)
– Útil para distinguir atributos que tienen el mismo nombre
en las condiciones de joins y 

2. Renombrado como asignación: S (B1, …, Bn)  R, S  R
– Útil para descomponer expresiones complejas
nombre
expresión
de esquema de álgebra
23
Producto cartesiano R  S
 También llamado “cross join”
 Es la misma operación que en álgebra de conjuntos
 Pero en vez de formar pares de tuplas ((a1, …, an), (b1, …, bm)),

se concatenan los atributos de las tuplas (a1, …, an, b1, …, bm)

24
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

Vuelos que salen de París
Origen = Codigo and Ciudad = ‘París’ (VUELO  AEROPUERTO)
 { (903, ‘CDG’ , ‘LHR’, ‘14:40’, ‘CDG’ , ‘París’),
(447, ‘CDG’ , ‘LHR’, ‘17:00’, ‘CDG’ , ‘París’) }

Redundancia:
desparecerá en natural join
25
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

PASAJERO  RESERVA
 { (123, María, 789, 165, 07-01-11, 210),
(123, María, 123, 345, 20-12-10, 170),
(123, María, 789, 321, 15-12-10, 250),
(123, María, 456, 345, 03-11-10, 190),
(456, Pedro, 789, 165, 07-01-11, 210),
(456, Pedro, 123, 345, 20-12-10, 170),
(456, Pedro, 789, 321, 15-12-10, 250),
(456, Pedro, 456, 345, 03-11-10, 190),
(789, Isabel, 789, 165, 07-01-11, 210),
(789, Isabel, 123, 345, 20-12-10, 170),
(789, Isabel, 789, 321, 15-12-10, 250),
(789, Isabel, 456, 345, 03-11-10, 190) }

En general no tiene mucho sentido
(y el coste es alto!): lo lógico sería
conectar las dos tablas con alguna
condición  select, join…

26
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

Dni = DniPasajero (PASAJERO  Dni / DniPasajero (RESERVA))
PASAJERO  RESERVA
 { (123, María, 789, 165, 07-01-11, 210),
123, 345, 20-12-10, 170),
(456, Pedro, 123,
(123, María, 456, 345, 03-11-10, 190),
20-12-10, 170),
(789, Isabel,
(123, María, 789, 321, 15-12-10, 210),
165, 07-01-11, 250),
(789, Isabel, 789, 321, 15-12-10, 250)
(123, María, 456, 345, 03-11-10, 190), }
(456, Pedro, 789, 165, 07-01-11, 210),
(456, Pedro, 123, 345, 20-12-10, 170),
(456, Pedro, 789, 321, 15-12-10, 250),
(456, Pedro, 456, 345, 03-11-10, 190),
(789, Isabel, 789, 165, 07-01-11, 210),
(789, Isabel, 123, 345, 20-12-10, 170),
(789, Isabel, 789, 321, 15-12-10, 250),
(789, Isabel, 456, 345, 03-11-10, 190) }

27
Algunas propiedades de 
Dados R (A1, …, An) y S (B1, …, Bm)
 |R  S| ?
=

|R| |S|

 R  S tiene n + m atributos: (R  S) (A1, A2, …, An, B1, B2, …, Bm)
?
  es conmutativo y asociativo

28
Join R⋈condición S
 R ⋈condición S es equivalente a condición (R  S)

 Tipos particulares de join: equijoin y natural join
 Equijoin: la condición es un and de comparaciones de igualdad entre atributos
de R y S
 Natural join: equijoin donde sólo se incluye un atributo por cada par emparejado
– Notación R⋈S sin indicar condición: la condición es de igualdad entre todos los
atributos comunes a R y S
– O bien se puede indicar la lista de atributos a emparejar:
R ⋈ (A1, …, An),(B1, …, Bn) S =  X, A1, …, An, Y (R ⋈ A1 = B1, …, An = Bn S)
Donde X son los atributos de R menos Ai, e Y son los de S menos Bi
– Típicamente los atributos emparejados son clave externa / clave primaria
29
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

PASAJERO ⋈ RESERVA
Dni = DniPasajero (PASAJERO  Dni / DniPasajero (RESERVA))
 { (123, María, 123, 345, 20-12-10, 170),
345, 20-12-10, 170),
(456, Pedro, 456, 345, 03-11-10, 190),
345, 03-11-10, 190),
(789, Isabel, 789, 165, 07-01-11, 210),
165, 07-01-11, 210),
(789, Isabel, 789, 321, 15-12-10, 250) }
321, 15-12-10, 250) }

30
Ejemplos
VUELO
Numero Origen Destino
345
MAD
CDG
321
MAD
ORY
165
LHR
CDG
903
CDG
LHR
447
CDG
LHR

Salida
12:30
19:05
09:55
14:40
17:00

AEROPUERTO
Codigo Ciudad
MAD Madrid
LGW Londres
LHR Londres
ORY
París
CDG
París

PASAJERO
Dni Nombre
123 María
456 Pedro
789 Isabel

Dni
789
123
789
456

RESERVA
Numero Fecha Precio
165
07-01-11 210
345
20-12-10 170
321
15-12-10 250
345
03-11-10 190

PASAJERO ⋈ RESERVA
Dni = DniPasajero (PASAJERO  Dni / DniPasajero (RESERVA))
Vuelos entre Madrid y París

 { (123, María, 123, 345, 20-12-10, 170),
R (456, Pedro, ⋈Origen, Codigo Ciudad / CiudadOrigen (AEROPUERTO)
 VUELO 456, 345, 03-11-10, 190),
(789, Isabel, CodigoDestino Ciudad / CiudadDestino, Codigo / CodigoDestino (AEROPUERTO)
S  R ⋈Destino,789, 165, 07-01-11, 210),
(789, Isabel, 789, 321, 15-12-10, 250) }
 CiudadOrigen = ‘Madrid’ and CiudadDestino = ‘París’ (S)

Nombre, fecha y destino de viaje de todos los pasajeros que vuelan desde Madrid
R  VUELO ⋈Origen = Codigo and Ciudad = ‘Madrid’ AEROPUERTO
S  R ⋈ Destino, CodigoDestino Ciudad / CiudadDestino, Codigo / CodigoDestino (AEROPUERTO)
Nombre, Fecha, CiudadDestino (R ⋈ RESERVA ⋈ PASAJERO)
31
Algunas propiedades de ⋈
Dados R (A1, …, An) y S (B1, …, Bm)

 R ⋈c S tiene n + m atributos : (R ⋈c S) (A1, …, An, B1, …, Bm)
?
 |R ⋈c S| ? |R| |S|

– La “selectividad” del join es la tasa |R ⋈c S| / |R| |S|

 ⋈ es asociativo y conmutativo (conmutando/asociando adecuadamente
las condiciones del join)

32
Operaciones de conjuntos
 Unión
 Intersección
 Diferencia
 Producto cartesiano (ya visto)

33
Operaciones de conjuntos
R  S, R  S, R – S
 R y S deben tener el mismo nº y dominio de los atributos

(“unión-compatible”)
– Esto no es así con el producto cartesiano, que no lo precisa

 La definición es la misma que en álgebra de conjuntos

34
Algunas propiedades de  y 
Dados R (A1, …, An) y S (B1, …, Bn)
 R  S y R  S tienen

?
n

atributos

 max(|R|,|S|)  |R  S|  |R| + |S|
?
?

 |R  S|  ?min(|R|, |S| )
  y  son conmutativos y asociativos
 c (R)  d (S) = c

and d (R

 c (R)  d (R) = c

 S)

or d (R)

35
Algunas propiedades globales más
 Las operaciones binarias (excepto la diferencia de conjuntos) se pueden
generalizar a operaciones n-arias
– De forma obvia por asociatividad de las operaciones binarias

 Las operaciones , , , –,  forman un conjunto completo de operaciones
– Las demás se pueden derivar de ellas:
 –  
   ⋈c
    ⋈

36
Operaciones adicionales
 Son extensiones externas al álgebra relacional propiamente dicha
– Se utilizan por motivos prácticos

 Proyección generalizada
– Admite operaciones sobre los atributos: f1(X1), …, fn(Xn) (R)
donde Xi son conjuntos de atributos de R, y fi son funciones sobre ellos

 Agrupación y agregación
– A1, …, An G f1(B1), …, fn(Bn) (R)
donde Ai y Bi son atributos de R, y fi son Count, Sum, Avg, Max, ó Min

 Join externo
– Incluyen tuplas de uno u otro operando o ambos (left / right / full), las que no
tienen tupla asociada en el otro conjunto

– Se ponen NULLs en los atributos que corresponderían al otro esquema

 Y otras variantes: semijoin, antijoin, división, unión externa…
 Limitación: el álgebra relacional no tiene iteración/recursión (tampoco SQL)
– P.e. no es posible calcular la raíz de un árbol, distancias en una red social, etc.
37
Correspondencia con SQL
 atributos (condición (R))

SELECT atributos FROM R WHERE condición



A / C (A, B (condición (R))

SELECT A AS C, B FROM R WHERE condición



S  (atributos (condición (R))

CREATE VIEW S AS SELECT atributos FROM R
WHERE condición



atributos (condición (R ⋈ S))

SELECT atributos FROM R NATURAL JOIN S
WHERE condición

atributos (R ⋈condición S))

SELECT atributos FROM R JOIN S
ON condición // O bien: WHERE condición



atributos (condición (R  S))

SELECT atributos FROM R, S
WHERE condición



R  S, R  S, R – S

R UNION S, R INTERSECT S, R EXCEPT S



atributos G Count(A), Sum(B)… (R) SELECT Count(A), Sum(B)… FROM R
GROUP BY atributos
Para no hacerlo repetitivo omitimos aquí DISTINCT
(pero debe sobreentenderse!)
38
Optimización de consultas
 El coste de una consulta puede variar mucho según cómo se exprese
– Ejemplo: Origen = ‘LCG’ (Destino = ‘LHR’ (VUELO))
Destino = ‘LHR’ ( Origen = ‘LCG’ (VUELO))

Cuál es más
eficiente?

 Objetivos generales
– Reducir el tamaño promedio del resultado de las expresiones
– Formar subexpresiones comunes dentro de o entre consultas
para ejecutarlas una sola vez

 Estrategias generales
– Introducción de select hacia subexpresiones más internas
El tamaño de un select es menor que el del conjunto al que se aplica;
cuanto más internamente se sitúe el select, antes tiene lugar esta reducción
Situar los select más restrictivos más al interior que otros menos selectivos
– Evitar productos cartesianos en las operaciones más internas;
es la operación que genera conjuntos más grandes
Es preferible un join R ⋈c S que un producto cartesiano c (R  S)
– Introducir proyecciones hacia el interior para operar sólo con los atributos realmente
necesarios; la proyección es poco costosa y puede eliminar tuplas duplicadas
39
Optimización de consultas (cont)
Algunas manipulaciones particulares más para conseguir las estrategias generales
 Generación de subexpresiones más pequeñas cuando:
a) Podrían reutilizarse
b) Podrían optimizarse por separado
c) Podrían dar lugar a select con condiciones de un solo atributo sobre esquemas
que se pueden optimizar mediante índices

Por ejemplo…
–
–
–
–
–

A and B (R) = A (B (R)) = B (A (R))
A or B (R) = A (R)  B (R)
cond (R  S) = cond (R)  cond (S)
cond (R  S) = cond (R)  cond (S) = cond (R)  S = R  cond (S)
cond (R – S) = cond (R) – cond (S) = cond (R) – S

 En sentido inverso, puede ser eficiente agregar condiciones en un solo select
 Si cond no implica atributos de S, cond (R  S) = cond (R)  S (ídem para ⋈)
 Otras técnicas de planificación/optimización de la ejecución de consultas en
base a la estimación de costes de expresiones, estadísticas y estimaciones
(tamaño) de los esquemas y atributos implicados // No profundizamos en ello
40

Más contenido relacionado

PPTX
Buses normalizados
PPTX
Modelo Entidad Relación
PPTX
El modelo de datos relacional (Base de Datos)
PPTX
Entorno de Programacion
PPTX
Modelo entidad relacion
PDF
7.flujo, comportamiento, patrones y web apps
PPTX
Patrón de diseño Modelo-Vista-Controlador (MVC)
PPTX
GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE (GCS)
Buses normalizados
Modelo Entidad Relación
El modelo de datos relacional (Base de Datos)
Entorno de Programacion
Modelo entidad relacion
7.flujo, comportamiento, patrones y web apps
Patrón de diseño Modelo-Vista-Controlador (MVC)
GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE (GCS)

La actualidad más candente (20)

PPTX
Diagrama de Componentes
PPTX
Qué es jdbc
PPT
Diseño a Nivel de Componentes
PDF
Alfabetos-Lenguajes y Automatas 1
PPTX
metodologia de prototipos
PPTX
Generalidades algoritmos
PDF
Unidad1 2 Lenguajes y automatas
PDF
Ensayo implementacion listas
PPTX
Tópicos Avanzados de Programación - Unidad 1 GUI
PDF
Estructura de Datos - árboles y grafos
PPTX
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
PDF
Clases y objetos en Java
PDF
Diagramas componentes
PPT
PROCESAMIENTO DE CONSULTAS
DOCX
Ensayo sobre la calidad de software
PPTX
Roles desarrollo del software
PPT
Código intermedio
PDF
El Rol de Arquitecto de Software
PDF
Curso de Python
PPTX
Monitoreo sql server
Diagrama de Componentes
Qué es jdbc
Diseño a Nivel de Componentes
Alfabetos-Lenguajes y Automatas 1
metodologia de prototipos
Generalidades algoritmos
Unidad1 2 Lenguajes y automatas
Ensayo implementacion listas
Tópicos Avanzados de Programación - Unidad 1 GUI
Estructura de Datos - árboles y grafos
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Clases y objetos en Java
Diagramas componentes
PROCESAMIENTO DE CONSULTAS
Ensayo sobre la calidad de software
Roles desarrollo del software
Código intermedio
El Rol de Arquitecto de Software
Curso de Python
Monitoreo sql server
Publicidad

Destacado (20)

PPT
etiquetas html
PDF
02. Internet. Aula Abierta. Conectar. Modem. Linux
DOC
Andreita
PPT
PPT
Seminario de Informatica T3 Liliam Alarcón
DOC
taller practico de internet
PDF
Presentacion sesión de aprendizaje
PDF
Catalogo 2012
PDF
La beatificación de Álvaro del Portillo en fotos
PPT
Presentacion Verano Educativo 2009 T Iv Centro
PDF
Proyecto Glocharid - Bloque 1 - Medio Físico
PPT
Palmares. Clara y Lucas. 3er año A
PPTX
Que es un blog listo!!
ODP
PPTX
Diuréticos REBA
PPTX
Analisis.compo5
PPTX
Recetas para un vendedor III
PPT
HOM - Oportunidade de Negócios Herbalife
PDF
Space Invaders Australia
etiquetas html
02. Internet. Aula Abierta. Conectar. Modem. Linux
Andreita
Seminario de Informatica T3 Liliam Alarcón
taller practico de internet
Presentacion sesión de aprendizaje
Catalogo 2012
La beatificación de Álvaro del Portillo en fotos
Presentacion Verano Educativo 2009 T Iv Centro
Proyecto Glocharid - Bloque 1 - Medio Físico
Palmares. Clara y Lucas. 3er año A
Que es un blog listo!!
Diuréticos REBA
Analisis.compo5
Recetas para un vendedor III
HOM - Oportunidade de Negócios Herbalife
Space Invaders Australia
Publicidad

Similar a 6 consultas (20)

PPT
Ud2 el modelo relacional
PDF
3.- Sesión 4_CalculoRelacional-base de datos.pdf
PDF
Capitulo+1.pdf
PPT
algoritmos y diagrama de flujos ing sist
PPT
Algoritmos y Diagramas de flujo.ppt
PDF
Algebra relacional
DOC
Hoja de calculo
PPT
GUÍA RÁPIDA LENGUAJE C/AL
PPTX
Modelo relacional
PPTX
Lenguajes formales
PPTX
Lenguajes formales
DOCX
Que es una hoja de calculo instala bles y online
PDF
Tema2 bases dedatosrelacional
PDF
BASES DE DATOS CL2 para PPT.pdf
PPTX
P:\Lenguajes Formales
PPTX
Calculo relacional1
PPT
Bases de Datos Cap:IV
PDF
Material de apoyo unidad 3. datos y entidades primitivas
PDF
Clase 3. Datos y Entidades Primitivas - Sullin Santaella
PDF
Clase de datos variables constantes
Ud2 el modelo relacional
3.- Sesión 4_CalculoRelacional-base de datos.pdf
Capitulo+1.pdf
algoritmos y diagrama de flujos ing sist
Algoritmos y Diagramas de flujo.ppt
Algebra relacional
Hoja de calculo
GUÍA RÁPIDA LENGUAJE C/AL
Modelo relacional
Lenguajes formales
Lenguajes formales
Que es una hoja de calculo instala bles y online
Tema2 bases dedatosrelacional
BASES DE DATOS CL2 para PPT.pdf
P:\Lenguajes Formales
Calculo relacional1
Bases de Datos Cap:IV
Material de apoyo unidad 3. datos y entidades primitivas
Clase 3. Datos y Entidades Primitivas - Sullin Santaella
Clase de datos variables constantes

6 consultas

  • 1. Temario  Introducción y fundamentos  Introducción a SQL  Modelo Entidad / Relación  Modelo relacional  Diseño relacional: formas normales  Consultas – Cálculo relacional – Álgebra relacional  Implementación de bases de datos – Estructura física: campos y registros – Indexación • Índices simples • Árboles B • Hashing – Compresión 1
  • 2. Cálculo y álgebra relacional  Formalismos para expresar operaciones de recuperación sobre una BD en modelo relacional – Cálculo es declarativo, álgebra es procedural  Cálculo y álgebra son formalismos distintos pero lógicamente equivalentes – Toda expresión de cálculo se puede expresar en álgebra y viceversa (Th Codd) – Es decir, permiten expresar las mismas consultas  Un lenguaje de consulta es completo si permite expresar cualquier consulta del cálculo relacional – Generalmente los SGBDs proporcionan un lenguaje completo con extensiones 2
  • 3. Cálculo y álgebra relacional (cont)  Utilidad del cálculo relacional – Es más adecuado para establecer y verificar propiedades formales, la consistencia de los modelos relacionales y sus formalismos – Es útil para verificar detenidamente la corrección de aspectos complejos o delicados en ciertas consultas que lo precisen – La creación original del modelo relacional se fundamenta en el cálculo relacional Interesa entenderlo para una comprensión más profunda del modelo relacional y el fundamento de la tecnología de bases de datos  Utilidad del álgebra relacional – Se utiliza con fines más prácticos; es más manejable que SQL para diseñar consultas complejas – Los motores de SQL basan su representación interna de las consultas en álgebra relacional (SQL se “parsea” a una estructura interna de álgebra) 3
  • 4. Temario  Introducción y fundamentos  Introducción a SQL  Modelo Entidad / Relación  Modelo relacional  Diseño relacional: formas normales  Consultas – Cálculo relacional – Álgebra relacional  Implementación de bases de datos – Estructura física: campos y registros – Indexación • Índices simples • Árboles B • Hashing – Compresión 4
  • 5. Cálculo relacional  Subconjunto del cálculo de predicados de primer orden  Una consulta básica tiene la forma { t | cond (t) }, donde… – t representa una variable de tupla – cond es una expresión condicional – La expresión representa (literalmente) un conjunto de tuplas que cumplen la condición  Ejemplo: { t | Vuelo(t) and t.origen = ‘LHR’ }  Pero se pueden formular consultas más elaboradas  Vamos a ver la forma general… 5
  • 6. Forma general de una consulta { variables | condición } 6
  • 7. Variables de una consulta  Representan tuplas de esquemas relacionales  Pueden ser una o más { t1, t2, …, tn | condición }  Pueden indicarse atributos específicos de las variables (y mezclar variables con y sin atributos…) { t1 . A, t1 . B, t1 . C, t2, …, tn | condición } /* A, B, C atributos de t1 */ 7
  • 8. Condición de una consulta  Es una expresión (fórmula) de cálculo de predicados de primer orden  Puede ser (definición recursiva): 1. Una fórmula atómica… a) R(t), donde R es un esquema relacional, y t es una variable de tupla b) t1 . A op t2 . B o bien t1 . A op c donde… t1 y t2 son variables de tupla A y B son atributos, c es una constante op es un operador de comparación: =, <, , >, ,  /* Se puede ampliar… */ 2. Operadores and, or, not aplicados a fórmulas 3. t, t aplicados a fórmulas  Ejemplo: supongamos Usuario (nombre, nick), Contacto (usuario1, usuario2) { u2 . nombre |  u1  cont ( Usuario (u1) and Usuario (u2) and Contacto (cont) and cont . usuario1 = u2 . nick and cont . usuario2 = u1 . nick and u1 . nombre = ‘María’ ) } 8
  • 9. Variables en una consulta En una condición sólo pueden aparecer dos tipos de variables:  Las variables propias de la consulta  Variables cuantificadas con  o  dentro de la condición  Todas deben llevar una condición de tipo de esquema R(t) 9
  • 10. “Resultado” de una consulta  El “resultado” de una consulta en cálculo relacional es un conjunto de tuplas  Cuyos atributos son la unión de los atributos de todas las variables de tupla, más los atributos indicados directamente Por ejemplo, dados los esquemas: Vuelo (número, origen, destino, hora) Aeropuerto (código, ciudad) Y la consulta: { v.número, a | Vuelo(v) and Aeropuerto(a) and v.origen = a.código} Los atributos de las tuplas de la consulta son: ( número, código, ciudad ) v . número a  La condición filtra qué tuplas exactamente se incluyen en ese conjunto 10
  • 11. Correspondencia con SQL  Variables de consulta Los términos que siguen a SELECT (con DISTINCT) – Salvo que en SELECT no hay variables de tuplas, sólo campos  Condiciones de tipo R(t) Equivale a ‘R as t’ en la cláusula FROM – Pero no se concreta si es JOIN, producto cartesiano, etc.  Condiciones con  y  Se pueden expresar con EXISTS, SOME y ALL – La mayoría de las veces  se traduce simplemente en un esquema en FROM, que no aparece en SELECT – Si es difícil expresar un , se puede jugar con  y negación  Otras condiciones Aparecen tras WHERE, ON, etc. – Pueden volverse implícitas en un NATURAL JOIN  En principio no es común contemplar directamente en cálculo relacional (pero se puede): – Operaciones de conjuntos: unión, intersección, diferencia, pertenencia – Operaciones de agregación: COUNT, AVG, MAX, etc. – Vistas y consultas anidadas  ORDER BY no tiene sentido ya que el orden de tuplas no existe en el modelo relacional 11
  • 12. Expresiones no seguras  Se suele distinguir entre cálculo de tuplas (que hemos visto) y de dominio – La diferencia es esencialmente de notación y son prácticamente equivalentes  Expresiones no seguras – Devuelven infinitas tuplas Ejemplo: { t | not Vuelo(t) } – Solución: evitarlas!  La caracterización de consultas seguras y no seguras es compleja –no profundizaremos en ello en este curso – Las equivalencias entre los diferentes formalismos (cálculo, álgebra, cálculo de tuplas vs. de dominio) se dan con salvedad de las expresiones no seguras 12
  • 13. Ejemplos… VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 Vuelos entre Charles de Gaulle y Heathrow Hora de salida de los vuelos entre Charles de Gaulle y Heathrow Vuelos que cubren el trayecto Charles de Gaulle – Heathrow en cualquier sentido Nombre, fecha y destino de viaje de todos los pasajeros que vuelan desde Madrid Vuelos entre Madrid y París Vuelos que no tienen ninguna reserva … 13
  • 14. Temario  Introducción y fundamentos  Introducción a SQL  Modelo Entidad / Relación  Modelo relacional  Diseño relacional: formas normales  Consultas – Cálculo relacional – Álgebra relacional  Implementación de bases de datos – Estructura física: campos y registros – Indexación • Índices simples • Árboles B • Hashing – Compresión 14
  • 15. Álgebra relacional  Expresa consultas en forma de operaciones a realizar para obtener las tuplas deseadas – A diferencia del cálculo relacional, en el que se expresan las condiciones que deben cumplir las tuplas que se desean obtener – Por este motivo el álgebra se considera procedural, y el cálculo declarativo  El resultado de una consulta en álgebra relacional es un conjunto de tuplas – Igual que en cálculo  Tres tipos de operación Unarias Binarias – Específicas de BD: selección, proyección, renombrado, join y sus variantes – De conjuntos: unión, intersección, diferencia, producto cartesiano – Extensiones: proyección generalizada, join externo, agregación… 15
  • 16. Operaciones propias de BDs  Selección  Proyección  Renombrado  Joins  División (la omitiremos, se puede derivar de otras operaciones) 16
  • 17. Select: condición (R)  Operación “horizontal”: filtra tuplas de una relación –  Las que cumplen una condición El operando R puede ser un esquema relacional, o una expresión de álgebra – –  Por tanto un conjunto de tuplas en cualquier caso Esto es así para los operandos de todas las operaciones (lo sobreentendemos pues en adelante) La condición puede ser: – –  Una comparación simple A op B o bien A op c donde: A y B son atributos, c es una constante op es un operador de comparación: =, <, , >, ,  (se pueden ampliar) Operadores and, or, not, aplicados a otras condiciones Es decir, las condiciones son como las del cálculo relacional, salvo que… – No se usan variables de tupla – No se usan condiciones de esquema (en su lugar aparecen nombres de esquemas en algún punto) – No se usan cuantificadores  y  17
  • 18. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 Vuelos entre Charles de Gaulle y Heathrow Origen = ‘CDG’ and Destino = ‘LHR’ (VUELO)  { (903, ‘CDG’, ‘LHR’, ‘14:40’), (447, ‘CDG’, ‘LHR’, ‘17:00’) } Reservas por menos de 200€ Precio < 200 (RESERVA)  { (123, 345, ‘20-12-10’, 170), (456, 345, ‘03-11-10’, 190) } 18
  • 19. Algunas propiedades de   Los atributos de c (R) y los de R son… mismos los  |c(R)|  |R| ?   es conmutativa: c (d (R)) = d (c (R)) = c and d (R) 19
  • 20. Proyección: atributos (R)  Operación “vertical”: se filtran atributos de una relación  Los atributos deben ser un subconjunto de los atributos de R  Si el conjunto de atributos de la proyección no contiene ninguna clave, pueden repetirse tuplas – Se eliminan las duplicaciones en tal caso (puesto que se trata de un conjunto) – Como ya sabemos, los SGBD no necesariamente aplican esto de forma estricta 20
  • 21. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 Ciudades con aeropuerto Ciudad (AEROPUERTO)  { (‘Madrid’), (‘Londres’), (‘París’) } Aeropuertos con conexión entre sí Origen, Destino (VUELO)  { (‘MAD’, ‘CDG’), (‘MAD’, ‘ORY’), (‘LHR’, ‘CDG’), (‘CDG’, ‘LHR’) } Número de los vuelos con salida desde Madrid-Barajas Numero (Origen = ‘MAD’ (VUELO))  { (345), (321) } 21
  • 22. Algunas propiedades de   X(Y(R)) = X(R) – Siempre y cuando X  Y, pues en otro caso la expresión es incorrecta  |X (R)|  |R| ?  X es una superclave de R  |X (R)| ? |R| =   no es conmutativa – X(Y(R)) y Y(X(R)) sólo serían ambas correctas si X = Y – Lo cual no tendría mucho sentido pues X y Y serían redundantes 22
  • 23. Renombrado:  y  1. Renombrado como expresión De atributos: B1, B2, …, Bn (R) renombra los atributos de R a B1, …, Bn De algunos atributos: A1/B1, …, Ak/Bk (R) De esquemas y atributos: S (B1, …, Bn) (R) – Útil para distinguir atributos que tienen el mismo nombre en las condiciones de joins y  2. Renombrado como asignación: S (B1, …, Bn)  R, S  R – Útil para descomponer expresiones complejas nombre expresión de esquema de álgebra 23
  • 24. Producto cartesiano R  S  También llamado “cross join”  Es la misma operación que en álgebra de conjuntos  Pero en vez de formar pares de tuplas ((a1, …, an), (b1, …, bm)), se concatenan los atributos de las tuplas (a1, …, an, b1, …, bm) 24
  • 25. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 Vuelos que salen de París Origen = Codigo and Ciudad = ‘París’ (VUELO  AEROPUERTO)  { (903, ‘CDG’ , ‘LHR’, ‘14:40’, ‘CDG’ , ‘París’), (447, ‘CDG’ , ‘LHR’, ‘17:00’, ‘CDG’ , ‘París’) } Redundancia: desparecerá en natural join 25
  • 26. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 PASAJERO  RESERVA  { (123, María, 789, 165, 07-01-11, 210), (123, María, 123, 345, 20-12-10, 170), (123, María, 789, 321, 15-12-10, 250), (123, María, 456, 345, 03-11-10, 190), (456, Pedro, 789, 165, 07-01-11, 210), (456, Pedro, 123, 345, 20-12-10, 170), (456, Pedro, 789, 321, 15-12-10, 250), (456, Pedro, 456, 345, 03-11-10, 190), (789, Isabel, 789, 165, 07-01-11, 210), (789, Isabel, 123, 345, 20-12-10, 170), (789, Isabel, 789, 321, 15-12-10, 250), (789, Isabel, 456, 345, 03-11-10, 190) } En general no tiene mucho sentido (y el coste es alto!): lo lógico sería conectar las dos tablas con alguna condición  select, join… 26
  • 27. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 Dni = DniPasajero (PASAJERO  Dni / DniPasajero (RESERVA)) PASAJERO  RESERVA  { (123, María, 789, 165, 07-01-11, 210), 123, 345, 20-12-10, 170), (456, Pedro, 123, (123, María, 456, 345, 03-11-10, 190), 20-12-10, 170), (789, Isabel, (123, María, 789, 321, 15-12-10, 210), 165, 07-01-11, 250), (789, Isabel, 789, 321, 15-12-10, 250) (123, María, 456, 345, 03-11-10, 190), } (456, Pedro, 789, 165, 07-01-11, 210), (456, Pedro, 123, 345, 20-12-10, 170), (456, Pedro, 789, 321, 15-12-10, 250), (456, Pedro, 456, 345, 03-11-10, 190), (789, Isabel, 789, 165, 07-01-11, 210), (789, Isabel, 123, 345, 20-12-10, 170), (789, Isabel, 789, 321, 15-12-10, 250), (789, Isabel, 456, 345, 03-11-10, 190) } 27
  • 28. Algunas propiedades de  Dados R (A1, …, An) y S (B1, …, Bm)  |R  S| ? = |R| |S|  R  S tiene n + m atributos: (R  S) (A1, A2, …, An, B1, B2, …, Bm) ?   es conmutativo y asociativo 28
  • 29. Join R⋈condición S  R ⋈condición S es equivalente a condición (R  S)  Tipos particulares de join: equijoin y natural join  Equijoin: la condición es un and de comparaciones de igualdad entre atributos de R y S  Natural join: equijoin donde sólo se incluye un atributo por cada par emparejado – Notación R⋈S sin indicar condición: la condición es de igualdad entre todos los atributos comunes a R y S – O bien se puede indicar la lista de atributos a emparejar: R ⋈ (A1, …, An),(B1, …, Bn) S =  X, A1, …, An, Y (R ⋈ A1 = B1, …, An = Bn S) Donde X son los atributos de R menos Ai, e Y son los de S menos Bi – Típicamente los atributos emparejados son clave externa / clave primaria 29
  • 30. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 PASAJERO ⋈ RESERVA Dni = DniPasajero (PASAJERO  Dni / DniPasajero (RESERVA))  { (123, María, 123, 345, 20-12-10, 170), 345, 20-12-10, 170), (456, Pedro, 456, 345, 03-11-10, 190), 345, 03-11-10, 190), (789, Isabel, 789, 165, 07-01-11, 210), 165, 07-01-11, 210), (789, Isabel, 789, 321, 15-12-10, 250) } 321, 15-12-10, 250) } 30
  • 31. Ejemplos VUELO Numero Origen Destino 345 MAD CDG 321 MAD ORY 165 LHR CDG 903 CDG LHR 447 CDG LHR Salida 12:30 19:05 09:55 14:40 17:00 AEROPUERTO Codigo Ciudad MAD Madrid LGW Londres LHR Londres ORY París CDG París PASAJERO Dni Nombre 123 María 456 Pedro 789 Isabel Dni 789 123 789 456 RESERVA Numero Fecha Precio 165 07-01-11 210 345 20-12-10 170 321 15-12-10 250 345 03-11-10 190 PASAJERO ⋈ RESERVA Dni = DniPasajero (PASAJERO  Dni / DniPasajero (RESERVA)) Vuelos entre Madrid y París  { (123, María, 123, 345, 20-12-10, 170), R (456, Pedro, ⋈Origen, Codigo Ciudad / CiudadOrigen (AEROPUERTO)  VUELO 456, 345, 03-11-10, 190), (789, Isabel, CodigoDestino Ciudad / CiudadDestino, Codigo / CodigoDestino (AEROPUERTO) S  R ⋈Destino,789, 165, 07-01-11, 210), (789, Isabel, 789, 321, 15-12-10, 250) }  CiudadOrigen = ‘Madrid’ and CiudadDestino = ‘París’ (S) Nombre, fecha y destino de viaje de todos los pasajeros que vuelan desde Madrid R  VUELO ⋈Origen = Codigo and Ciudad = ‘Madrid’ AEROPUERTO S  R ⋈ Destino, CodigoDestino Ciudad / CiudadDestino, Codigo / CodigoDestino (AEROPUERTO) Nombre, Fecha, CiudadDestino (R ⋈ RESERVA ⋈ PASAJERO) 31
  • 32. Algunas propiedades de ⋈ Dados R (A1, …, An) y S (B1, …, Bm)  R ⋈c S tiene n + m atributos : (R ⋈c S) (A1, …, An, B1, …, Bm) ?  |R ⋈c S| ? |R| |S|  – La “selectividad” del join es la tasa |R ⋈c S| / |R| |S|  ⋈ es asociativo y conmutativo (conmutando/asociando adecuadamente las condiciones del join) 32
  • 33. Operaciones de conjuntos  Unión  Intersección  Diferencia  Producto cartesiano (ya visto) 33
  • 34. Operaciones de conjuntos R  S, R  S, R – S  R y S deben tener el mismo nº y dominio de los atributos (“unión-compatible”) – Esto no es así con el producto cartesiano, que no lo precisa  La definición es la misma que en álgebra de conjuntos 34
  • 35. Algunas propiedades de  y  Dados R (A1, …, An) y S (B1, …, Bn)  R  S y R  S tienen ? n atributos  max(|R|,|S|)  |R  S|  |R| + |S| ? ?  |R  S|  ?min(|R|, |S| )   y  son conmutativos y asociativos  c (R)  d (S) = c and d (R  c (R)  d (R) = c  S) or d (R) 35
  • 36. Algunas propiedades globales más  Las operaciones binarias (excepto la diferencia de conjuntos) se pueden generalizar a operaciones n-arias – De forma obvia por asociatividad de las operaciones binarias  Las operaciones , , , –,  forman un conjunto completo de operaciones – Las demás se pueden derivar de ellas:  –      ⋈c     ⋈ 36
  • 37. Operaciones adicionales  Son extensiones externas al álgebra relacional propiamente dicha – Se utilizan por motivos prácticos  Proyección generalizada – Admite operaciones sobre los atributos: f1(X1), …, fn(Xn) (R) donde Xi son conjuntos de atributos de R, y fi son funciones sobre ellos  Agrupación y agregación – A1, …, An G f1(B1), …, fn(Bn) (R) donde Ai y Bi son atributos de R, y fi son Count, Sum, Avg, Max, ó Min  Join externo – Incluyen tuplas de uno u otro operando o ambos (left / right / full), las que no tienen tupla asociada en el otro conjunto – Se ponen NULLs en los atributos que corresponderían al otro esquema  Y otras variantes: semijoin, antijoin, división, unión externa…  Limitación: el álgebra relacional no tiene iteración/recursión (tampoco SQL) – P.e. no es posible calcular la raíz de un árbol, distancias en una red social, etc. 37
  • 38. Correspondencia con SQL  atributos (condición (R)) SELECT atributos FROM R WHERE condición  A / C (A, B (condición (R)) SELECT A AS C, B FROM R WHERE condición  S  (atributos (condición (R)) CREATE VIEW S AS SELECT atributos FROM R WHERE condición  atributos (condición (R ⋈ S)) SELECT atributos FROM R NATURAL JOIN S WHERE condición atributos (R ⋈condición S)) SELECT atributos FROM R JOIN S ON condición // O bien: WHERE condición  atributos (condición (R  S)) SELECT atributos FROM R, S WHERE condición  R  S, R  S, R – S R UNION S, R INTERSECT S, R EXCEPT S  atributos G Count(A), Sum(B)… (R) SELECT Count(A), Sum(B)… FROM R GROUP BY atributos Para no hacerlo repetitivo omitimos aquí DISTINCT (pero debe sobreentenderse!) 38
  • 39. Optimización de consultas  El coste de una consulta puede variar mucho según cómo se exprese – Ejemplo: Origen = ‘LCG’ (Destino = ‘LHR’ (VUELO)) Destino = ‘LHR’ ( Origen = ‘LCG’ (VUELO)) Cuál es más eficiente?  Objetivos generales – Reducir el tamaño promedio del resultado de las expresiones – Formar subexpresiones comunes dentro de o entre consultas para ejecutarlas una sola vez  Estrategias generales – Introducción de select hacia subexpresiones más internas El tamaño de un select es menor que el del conjunto al que se aplica; cuanto más internamente se sitúe el select, antes tiene lugar esta reducción Situar los select más restrictivos más al interior que otros menos selectivos – Evitar productos cartesianos en las operaciones más internas; es la operación que genera conjuntos más grandes Es preferible un join R ⋈c S que un producto cartesiano c (R  S) – Introducir proyecciones hacia el interior para operar sólo con los atributos realmente necesarios; la proyección es poco costosa y puede eliminar tuplas duplicadas 39
  • 40. Optimización de consultas (cont) Algunas manipulaciones particulares más para conseguir las estrategias generales  Generación de subexpresiones más pequeñas cuando: a) Podrían reutilizarse b) Podrían optimizarse por separado c) Podrían dar lugar a select con condiciones de un solo atributo sobre esquemas que se pueden optimizar mediante índices Por ejemplo… – – – – – A and B (R) = A (B (R)) = B (A (R)) A or B (R) = A (R)  B (R) cond (R  S) = cond (R)  cond (S) cond (R  S) = cond (R)  cond (S) = cond (R)  S = R  cond (S) cond (R – S) = cond (R) – cond (S) = cond (R) – S  En sentido inverso, puede ser eficiente agregar condiciones en un solo select  Si cond no implica atributos de S, cond (R  S) = cond (R)  S (ídem para ⋈)  Otras técnicas de planificación/optimización de la ejecución de consultas en base a la estimación de costes de expresiones, estadísticas y estimaciones (tamaño) de los esquemas y atributos implicados // No profundizamos en ello 40