SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
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

La actualidad más candente

Modelo de datos Banco
Modelo de datos BancoModelo de datos Banco
Modelo de datos Bancoatrivinho
 
Diagrama UML de Clases
Diagrama UML de ClasesDiagrama UML de Clases
Diagrama UML de ClasesAdal Dg
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacionalLuis Jherry
 
Tipos de atributos y tipos de relaciones
Tipos de atributos y tipos de relacionesTipos de atributos y tipos de relaciones
Tipos de atributos y tipos de relacionesbasilioj
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Jose R. Hilera
 
Comandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos ciscoComandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos ciscoCISCO NETWORKING
 
Modelo entidad relación de base de datos
Modelo entidad relación de base de datosModelo entidad relación de base de datos
Modelo entidad relación de base de datosani_tuza
 
Requerimientos de usuario y del sistema
Requerimientos de usuario y del sistemaRequerimientos de usuario y del sistema
Requerimientos de usuario y del sistemaIsrael Rey
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoFYaskelly Yedra
 
Prueba del comando_iperf_telematica
Prueba del comando_iperf_telematicaPrueba del comando_iperf_telematica
Prueba del comando_iperf_telematicaFinalDP1
 
subneteo de redes
subneteo de redessubneteo de redes
subneteo de redesalexgrz81
 
Tutorial de subneteo clase a
Tutorial de subneteo clase aTutorial de subneteo clase a
Tutorial de subneteo clase aRuben Mamani
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de usoTensor
 
Lenguaje estructurado de consulta
Lenguaje estructurado de consultaLenguaje estructurado de consulta
Lenguaje estructurado de consultaMaria Garcia
 

La actualidad más candente (20)

Modelo de datos Banco
Modelo de datos BancoModelo de datos Banco
Modelo de datos Banco
 
Diagrama UML de Clases
Diagrama UML de ClasesDiagrama UML de Clases
Diagrama UML de Clases
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Diagramas uml
Diagramas umlDiagramas uml
Diagramas uml
 
Tipos de atributos y tipos de relaciones
Tipos de atributos y tipos de relacionesTipos de atributos y tipos de relaciones
Tipos de atributos y tipos de relaciones
 
Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)Patrón de diseño Modelo-Vista-Controlador (MVC)
Patrón de diseño Modelo-Vista-Controlador (MVC)
 
Comandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos ciscoComandos de configuracion de dispositivos cisco
Comandos de configuracion de dispositivos cisco
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Vista lógica
Vista lógicaVista lógica
Vista lógica
 
Modelo entidad relación de base de datos
Modelo entidad relación de base de datosModelo entidad relación de base de datos
Modelo entidad relación de base de datos
 
Requerimientos de usuario y del sistema
Requerimientos de usuario y del sistemaRequerimientos de usuario y del sistema
Requerimientos de usuario y del sistema
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
Prueba del comando_iperf_telematica
Prueba del comando_iperf_telematicaPrueba del comando_iperf_telematica
Prueba del comando_iperf_telematica
 
Recuperación de-datos-en-my sql
Recuperación de-datos-en-my sqlRecuperación de-datos-en-my sql
Recuperación de-datos-en-my sql
 
subneteo de redes
subneteo de redessubneteo de redes
subneteo de redes
 
Tutorial de subneteo clase a
Tutorial de subneteo clase aTutorial de subneteo clase a
Tutorial de subneteo clase a
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de uso
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Lenguaje estructurado de consulta
Lenguaje estructurado de consultaLenguaje estructurado de consulta
Lenguaje estructurado de consulta
 
Acl estandar
Acl estandarAcl estandar
Acl estandar
 

Destacado

etiquetas html
etiquetas htmletiquetas html
etiquetas htmlyampa
 
02. Internet. Aula Abierta. Conectar. Modem. Linux
02. Internet. Aula Abierta. Conectar. Modem. Linux02. Internet. Aula Abierta. Conectar. Modem. Linux
02. Internet. Aula Abierta. Conectar. Modem. LinuxJosé M. Padilla
 
Seminario de Informatica T3 Liliam Alarcón
Seminario de Informatica T3 Liliam AlarcónSeminario de Informatica T3 Liliam Alarcón
Seminario de Informatica T3 Liliam AlarcónLilyAlarcon
 
taller practico de internet
taller practico de internettaller practico de internet
taller practico de internetguest0c9617
 
Presentacion sesión de aprendizaje
Presentacion sesión de aprendizajePresentacion sesión de aprendizaje
Presentacion sesión de aprendizajeMagalidg
 
La beatificación de Álvaro del Portillo en fotos
La beatificación de Álvaro del Portillo en fotosLa beatificación de Álvaro del Portillo en fotos
La beatificación de Álvaro del Portillo en fotosOpus Dei
 
Presentacion Verano Educativo 2009 T Iv Centro
Presentacion Verano Educativo 2009 T Iv CentroPresentacion Verano Educativo 2009 T Iv Centro
Presentacion Verano Educativo 2009 T Iv Centroguest5871d57e
 
Proyecto Glocharid - Bloque 1 - Medio Físico
Proyecto Glocharid - Bloque 1 - Medio FísicoProyecto Glocharid - Bloque 1 - Medio Físico
Proyecto Glocharid - Bloque 1 - Medio FísicoCAESCG.org
 
Palmares. Clara y Lucas. 3er año A
Palmares. Clara y Lucas. 3er año APalmares. Clara y Lucas. 3er año A
Palmares. Clara y Lucas. 3er año ASandra Sanchez
 
Que es un blog listo!!
Que es un blog listo!!Que es un blog listo!!
Que es un blog listo!!Self-Employed
 
Diuréticos REBA
Diuréticos REBADiuréticos REBA
Diuréticos REBAluis Camala
 
HOM - Oportunidade de Negócios Herbalife
HOM - Oportunidade de Negócios HerbalifeHOM - Oportunidade de Negócios Herbalife
HOM - Oportunidade de Negócios HerbalifeVidaNutrir
 
Space Invaders Australia
Space Invaders AustraliaSpace Invaders Australia
Space Invaders AustraliaPrénom RVLEB
 

Destacado (20)

etiquetas html
etiquetas htmletiquetas html
etiquetas html
 
02. Internet. Aula Abierta. Conectar. Modem. Linux
02. Internet. Aula Abierta. Conectar. Modem. Linux02. Internet. Aula Abierta. Conectar. Modem. Linux
02. Internet. Aula Abierta. Conectar. Modem. Linux
 
Andreita
AndreitaAndreita
Andreita
 
PRESS3
PRESS3PRESS3
PRESS3
 
Seminario de Informatica T3 Liliam Alarcón
Seminario de Informatica T3 Liliam AlarcónSeminario de Informatica T3 Liliam Alarcón
Seminario de Informatica T3 Liliam Alarcón
 
taller practico de internet
taller practico de internettaller practico de internet
taller practico de internet
 
Presentacion sesión de aprendizaje
Presentacion sesión de aprendizajePresentacion sesión de aprendizaje
Presentacion sesión de aprendizaje
 
Blogs
BlogsBlogs
Blogs
 
Catalogo 2012
Catalogo 2012Catalogo 2012
Catalogo 2012
 
La beatificación de Álvaro del Portillo en fotos
La beatificación de Álvaro del Portillo en fotosLa beatificación de Álvaro del Portillo en fotos
La beatificación de Álvaro del Portillo en fotos
 
Presentacion Verano Educativo 2009 T Iv Centro
Presentacion Verano Educativo 2009 T Iv CentroPresentacion Verano Educativo 2009 T Iv Centro
Presentacion Verano Educativo 2009 T Iv Centro
 
Proyecto Glocharid - Bloque 1 - Medio Físico
Proyecto Glocharid - Bloque 1 - Medio FísicoProyecto Glocharid - Bloque 1 - Medio Físico
Proyecto Glocharid - Bloque 1 - Medio Físico
 
Palmares. Clara y Lucas. 3er año A
Palmares. Clara y Lucas. 3er año APalmares. Clara y Lucas. 3er año A
Palmares. Clara y Lucas. 3er año A
 
Que es un blog listo!!
Que es un blog listo!!Que es un blog listo!!
Que es un blog listo!!
 
Gauss
GaussGauss
Gauss
 
Diuréticos REBA
Diuréticos REBADiuréticos REBA
Diuréticos REBA
 
Analisis.compo5
Analisis.compo5Analisis.compo5
Analisis.compo5
 
Recetas para un vendedor III
Recetas para un vendedor IIIRecetas para un vendedor III
Recetas para un vendedor III
 
HOM - Oportunidade de Negócios Herbalife
HOM - Oportunidade de Negócios HerbalifeHOM - Oportunidade de Negócios Herbalife
HOM - Oportunidade de Negócios Herbalife
 
Space Invaders Australia
Space Invaders AustraliaSpace Invaders Australia
Space Invaders Australia
 

Similar a Temario de bases de datos: introducción a SQL, modelo relacional y cálculo/álgebra relacional

Ud2 el modelo relacional
Ud2  el modelo relacionalUd2  el modelo relacional
Ud2 el modelo relacionalLesli Pacheco
 
Algoritmos y Diagramas de flujo.ppt
Algoritmos y Diagramas de flujo.pptAlgoritmos y Diagramas de flujo.ppt
Algoritmos y Diagramas de flujo.pptDjJoss
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacionalclaudyabra
 
Hoja de calculo
Hoja de calculoHoja de calculo
Hoja de calculoboldemortt
 
GUÍA RÁPIDA LENGUAJE C/AL
GUÍA RÁPIDA LENGUAJE C/ALGUÍA RÁPIDA LENGUAJE C/AL
GUÍA RÁPIDA LENGUAJE C/ALmakac0 makac0
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacionaljosecuartas
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formaleslaloflatland
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formaleslaloflatland
 
Que es una hoja de calculo instala bles y online
Que es una hoja de calculo instala bles y onlineQue es una hoja de calculo instala bles y online
Que es una hoja de calculo instala bles y onlineRonald Estevez
 
BASES DE DATOS CL2 para PPT.pdf
BASES DE DATOS CL2 para PPT.pdfBASES DE DATOS CL2 para PPT.pdf
BASES DE DATOS CL2 para PPT.pdfAbisSanMartin1
 
Material de apoyo unidad 3. datos y entidades primitivas
Material de apoyo unidad 3.  datos y entidades primitivasMaterial de apoyo unidad 3.  datos y entidades primitivas
Material de apoyo unidad 3. datos y entidades primitivasLeany González
 
Clase 3. Datos y Entidades Primitivas - Sullin Santaella
Clase 3. Datos y Entidades Primitivas - Sullin SantaellaClase 3. Datos y Entidades Primitivas - Sullin Santaella
Clase 3. Datos y Entidades Primitivas - Sullin SantaellaJosé Ricardo Tillero Giménez
 
Clase de datos variables constantes
Clase de datos variables constantesClase de datos variables constantes
Clase de datos variables constantesSol Hernández
 
Recuperacion de yola
Recuperacion de yolaRecuperacion de yola
Recuperacion de yolacathya56
 
Trabajo 1 hojas de calculo tic sección 1022 [sólo lectura]
Trabajo 1 hojas de calculo tic   sección 1022 [sólo lectura]Trabajo 1 hojas de calculo tic   sección 1022 [sólo lectura]
Trabajo 1 hojas de calculo tic sección 1022 [sólo lectura]hguedez28
 

Similar a Temario de bases de datos: introducción a SQL, modelo relacional y cálculo/álgebra relacional (20)

Ud2 el modelo relacional
Ud2  el modelo relacionalUd2  el modelo relacional
Ud2 el modelo relacional
 
Capitulo+1.pdf
Capitulo+1.pdfCapitulo+1.pdf
Capitulo+1.pdf
 
Algoritmos y Diagramas de flujo.ppt
Algoritmos y Diagramas de flujo.pptAlgoritmos y Diagramas de flujo.ppt
Algoritmos y Diagramas de flujo.ppt
 
Algebra relacional
Algebra relacionalAlgebra relacional
Algebra relacional
 
Hoja de calculo
Hoja de calculoHoja de calculo
Hoja de calculo
 
GUÍA RÁPIDA LENGUAJE C/AL
GUÍA RÁPIDA LENGUAJE C/ALGUÍA RÁPIDA LENGUAJE C/AL
GUÍA RÁPIDA LENGUAJE C/AL
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
Que es una hoja de calculo instala bles y online
Que es una hoja de calculo instala bles y onlineQue es una hoja de calculo instala bles y online
Que es una hoja de calculo instala bles y online
 
Tema2 bases dedatosrelacional
Tema2 bases dedatosrelacionalTema2 bases dedatosrelacional
Tema2 bases dedatosrelacional
 
BASES DE DATOS CL2 para PPT.pdf
BASES DE DATOS CL2 para PPT.pdfBASES DE DATOS CL2 para PPT.pdf
BASES DE DATOS CL2 para PPT.pdf
 
P:\Lenguajes Formales
P:\Lenguajes FormalesP:\Lenguajes Formales
P:\Lenguajes Formales
 
Calculo relacional1
Calculo relacional1Calculo relacional1
Calculo relacional1
 
Bases de Datos Cap:IV
Bases de Datos  Cap:IVBases de Datos  Cap:IV
Bases de Datos Cap:IV
 
Material de apoyo unidad 3. datos y entidades primitivas
Material de apoyo unidad 3.  datos y entidades primitivasMaterial de apoyo unidad 3.  datos y entidades primitivas
Material de apoyo unidad 3. datos y entidades primitivas
 
Clase 3. Datos y Entidades Primitivas - Sullin Santaella
Clase 3. Datos y Entidades Primitivas - Sullin SantaellaClase 3. Datos y Entidades Primitivas - Sullin Santaella
Clase 3. Datos y Entidades Primitivas - Sullin Santaella
 
Clase de datos variables constantes
Clase de datos variables constantesClase de datos variables constantes
Clase de datos variables constantes
 
Recuperacion de yola
Recuperacion de yolaRecuperacion de yola
Recuperacion de yola
 
Trabajo 1 hojas de calculo tic sección 1022 [sólo lectura]
Trabajo 1 hojas de calculo tic   sección 1022 [sólo lectura]Trabajo 1 hojas de calculo tic   sección 1022 [sólo lectura]
Trabajo 1 hojas de calculo tic sección 1022 [sólo lectura]
 

Temario de bases de datos: introducción a SQL, modelo relacional y cálculo/álgebra relacional

  • 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