Download Tema 3: El Modelo Relacional Ejemplo de una relación Estructura

Document related concepts

Normalización de bases de datos wikipedia , lookup

Modelo relacional wikipedia , lookup

Álgebra relacional wikipedia , lookup

Optimización de consultas wikipedia , lookup

Cálculo relacional basado en tuplas wikipedia , lookup

Transcript
Tema 3: El Modelo Relacional
Ejemplo de una relación
„ Estructura de bases de datos relacionales
„ Conversión de diseños E-A a relaciones
numero-cuenta
nombre-sucursal
saldo
A-101
Vigo
500
A-102
Pontevedra
400
A-201
Ourense
900
„ Modificaciones de la base de datos
A-215
Santiago
700
„ Vistas
A-217
Ourense
750
„ Cálculo relacional de tuplas
A-222
Lugo
700
„ Cálculo relacional de dominios
A-305
Ferrol
350
„ Integridad de dominio y referencial
„ Álgebra relacional
„ Operaciones del álgebra relacional extendida
Bases de datos
1
Bases de datos
2
Estructura básica
Tipos de atributo
„ Formalmente, dados los conjuntos D1, D2, …. Dn una relación r es
un subconjunto de
se denomina dominio del atributo
„ Los valores de los atributos deben ser (normalmente)
„ Ejemplo: Si
atómicos, es decir, indivisibles
nombre-cliente = {López, Veiga, Suárez, Diéguez}
calle-cliente =
{Príncipe, Norte, Diagonal}
ciudad-cliente = {Madrid, Vigo, Barcelona}
Entonces r = { (López, Príncipe, Madrid),
(Veiga, Norte, Vigo),
(Suárez, Norte, Vigo),
(Diéguez, Diagonal, Barcelona)}
es una relación sobre
nombre-cliente x calle-cliente x ciudad-cliente
Bases de datos
„ Cada atributo de una relación tiene un nombre
„ El conjunto de valores permitidos para cada atributo
D1 x D 2 x … x Dn
Es decir, una relación es un conjunto de n-tuplas (a1, a2, …, an)
donde cada ai ∈ Di
+ P.e. atributos con valores multivaluados no son atómicos
+ P.e. atributos con valores compuestos no son atómicos
„ El valor especial null pertenece a cualquier dominio
„ El valor nulo complica la definición de algunos
operadores
3
Bases de datos
Esquema de una relación
4
Instancia de una relación
„ Los valores actuales (instancia) de una relación se especifican
„ A1, A2, …, An son atributos
mediante una tabla
„ R = (A1, A2, …, An ) es un esquema de relación
„ Un elemento t de r es una tupla, y está representado por una
P.e. Esquema-cliente =
(nombre-cliente, calle-cliente, ciudad-cliente)
columna en una tabla
„ r(R) es una relación sobre el esquema de relación R
P.e.
atributos
(o columnas)
cliente (Esquema-cliente)
nombre-cliente
calle-cliente
ciudad-cliente
López
Veiga
Suárez
Diéguez
Príncipe
Norte
Norte
Diagonal
Madrid
Vigo
Vigo
Barcelona
tuplas
(o filas)
cliente
Bases de datos
5
Bases de datos
6
Las relaciones no tienen orden
Base de datos
„ El orden de las tuplas no es relevante (las tuplas se pueden
„ Una base de datos está formada por un conjunto de relaciones
almacenar en un orden arbitrario)
„ La información sobre una organización se divide en partes y
cada relación almacena una parte de la información
P.e.: cuenta:
almacena información sobre cuentas
depositante: almacena información sobre que cliente
tiene asignada que cuenta
cliente:
almacena información sobre clientes
„ P.e. la relación cuentas con tuplas no ordenadas
numero-cuenta
nombre-sucursal
saldo
A-101
Vigo
500
A-215
Santiago
700
A-102
Pontevedra
400
A-305
Ferrol
350
A-201
Ourense
900
A-222
Lugo
700
A-217
Ourense
750
„ Almacenar toda la información en una sola relación:
banco(numero-cuenta, saldo, nombre-cliente, ..)
da lugar a
+ información repetida (p.e. dos clientes tienen una misma cuenta)
+ necesidad de valores nulos (p.e. información sobre un cliente sin
cuenta)
„ La teoría de la normalización se encarga de como diseñar
esquemas relacionales correctos
Bases de datos
7
8
Determinación de claves a partir de conjuntos
E-A
Claves
„ Dado K ⊆ R
„ Conjunto entidad fuerte. La clave primaria del conjunto
entidad pasa a ser la clave primaria de la relación.
„ K es una superclave de R si los valores de K son suficientes
para identificar cada una de las tuplas de cada relación posible
r(R)
+ por “posible r” indicamos una relación r que pueda existir en la
„ Conjunto entidad débil. La clave primaria de la relación está
formada por la unión de la clave primaria del conjunto entidad
fuerte y el discriminador del conjunto entidad débil.
organización que estamos modelando.
„ Conjunto asociación. La unión de las claves primarias de los
+ Ejemplo: {nombre-cliente, calle-cliente} y
conjuntos entidad participantes es una superclave de la relación.
+ Para conjuntos asociación varios-a-uno, la clave primaria del
{nombre-cliente}
son ambas superclaves de Cliente, si consideramos que dos
clientes no pueden tener el mismo nombre.
conjunto entidad “varios” pasa a ser la clave primaria de la relación.
„ K es una clave candidata si K es mínima
+ Para conjuntos asociación uno-a-uno, la clave primaria de la
Ejemplo: {nombre-cliente} es una clave candidata para Cliente,
dado que es una superclave (asumiendo que dos clientes no
pueden tener el mismo nombre), y ningún subconjunto es una
superclave.
Bases de datos
Bases de datos
relación puede ser la de cualquiera de los conjuntos entidad.
+ Para conjuntos asociación varios-a-varios, la unión de las claves
primarias pasa a ser la clave primaria de las relación.
9
Conversión de esquemas EE-A a relaciones
Bases de datos
10
Representación de conjuntos entidad como
relaciones
„ Un conjunto entidad fuerte se transforma en una relación con los mismos
„ Las claves primarias permiten representar tanto los
atributos.
conjuntos entidad como los conjuntos asociación como
relaciones que representan los contenidos de la base de
datos.
Id-cliente
„ Una base de datos que sigue el esquema E-A se puede
192-83-7465
representar mediante un conjunto de relaciones.
„ Para cada conjunto entidad y cada conjunto asociación
existe una única relación a la que se le asigna el nombre
del conjunto entidad o conjunto asociación
correspondiente.
„ Cada relación tiene columnas (normalmente una por
nombre-cliente
calle-cliente
ciudad-cliente
Sánchez
Alma
Santiago
019-28-3746
Rodríguez
Norte
Vigo
677-89-9011
Gómez
Príncipe
Madrid
182-73-6091
Fernández
Alcalá
Madrid
321-12-3123
Veiga
Príncipe
Madrid
336-66-9999
López
Diagonal
Barcelona
019-28-3746
Rodríguez
Norte
Vigo
atributo), que tienen nombres únicos.
„ Convertir un diagrama E-A a relaciones es la base para
conseguir un diseño relacional a partir de ese diseño E-A
Bases de datos
11
Bases de datos
12
Atributos compuestos y multivalorados
Representación de conjuntos entidad débiles
„ Un conjunto entidad débil se transforma en una relación a la
„ Los atributos compuestos se eliminan creando un nuevo atributo
para cada uno de los campos componentes
+ P.e. dado el conjunto entidad cliente con atributo compuesto nombre con
atributos componentes nombre-comun y primer-apellido, la relación
correspondiente al conjunto entidad tendrá dos columnas
nombre.nombre-comun y nombre.primer-apellido
„ Un atributo multivalorado M de una entidad E se representa
mediante una nueva relación EM
+ La relación EM tendrá como columnas la clave primaria de E y un
atributo que se corresponderá con el atributo multivalorado M
+ P.e. El atributo multivalorado telefonos de empleado se representa
mediante la relación
empleado-telefonos ( id-empleado, numerot)
+ Cada valor de un atributo multivalorado se corresponde con una fila
diferente de la relación EM
P.e., una entidad empleado con clave primaria “Pérez” y teléfonos
que se le añade una columna para la clave primaria del
conjunto entidad fuerte identificador
numero-cuenta
numero-pago
fecha-pago
cantidad-pago
L-11
53
7-junio-2001
125
L-14
69
28-mayo-2001
500
L-15
22
23-mayo-2001
300
L-16
58
18-junio 2001
135
L-17
5
10-mayo-2001
50
L-17
6
7-junio-2001
50
L-17
7
17-junio-2001
100
L-23
11
17-mayo-2001
75
L-93
103
3-junio-2001
900
L-93
104
13-junio-2001
200
“123456” y “234567” se corresponde con dos filas:
(Pérez, 123456) and (Pérez, 234567)
Bases de datos
13
Bases de datos
Representación de conjuntos
asociación como relaciones
Redundancia de relaciones
„ Un conjunto asociación varios a varios se representa con una
„ Los conjuntos asociación varios-a-uno y uno-a-varios se
relación con columnas para las claves primarias de los dos
conjuntos entidad participantes, y también para los atributos
descriptivos del conjunto asociación.
pueden representar añadiendo un atributo extra a la parte de
“varios”, conteniendo la clave primaria de la parte de “uno”
„ Para resolver problemas de inconsistencia se utiliza el
„ P.e.: relación para el conjunto asociación prestatario
Id-cliente
numero-prestamo
019-28-3746
L-11
019-28-3746
L-23
244-66-8800
L-93
321-12-3123
L-17
335-57-7991
L-16
555-55-5555
L-14
677-89-9011
L-15
963-96-3963
L-17
Bases de datos
concepto de clave foránea que definiremos al hablar de
integridad referencial
„ P.e.: En vez de crear una relación para la asociación cuentasucursal, añadimos un atributo sucursal al conjunto entidad
cuenta
ciudad-sucursal
saldo
numero-cuenta
cuenta
15
nombre-sucursal
cuenta-sucursal
activo
sucursal
Bases de datos
16
Representación de especializaciones con
relaciones
Redundancia de relaciones (Cont.)
„ Método 1:
„ Para conjuntos asociación una-a-uno, cualquiera de las
+ Crear una relación para la entidad de nivel alto
participaciones se puede seleccionar para actuar como “varios”
+ Es decir, se puede añadir un atributo extra a cualquiera de las
relaciones correspondientes a los dos conjuntos entidad
„ Si la participación es parcial en la parte de varios, el reemplazar
una relación por un atributo extra en la relación correspondiente
a la parte de “varios” puede dar lugar a valores nulos (null)
„ La relación correspondiente al conjunto asociación que enlaza
un conjunto entidad débil con su conjunto entidad fuerte
identificador es redundante.
+ P.e. La relación pago ya contiene la información que debería
+ Crear una relación para cada conjunto entidad de nivel bajo, que
incluirá la clave primaria del conjunto entidad de nivel alto y los
atributos locales
tabla
persona
cliente
empleado
atributos
nombre, calle, ciudad
nombre, tipo
nombre, salario
+ Problema: obtener información sobre, por ejemplo, empleados
requiere acceder a dos relaciones
aparecer en la tabla prestamo-pago (las columnas numeroprestamo y numero-pago).
Bases de datos
14
17
Bases de datos
18
Representación de especializaciones
con relaciones (Cont.)
„ Método 2:
Relaciones correspondientes a
agregaciones
„ Para representar una agregación, se crea una
+ Crear una relación para cada conjunto entidad con todos los atributos
relación conteniendo
locales y heredados
tabla
atributos
persona
nombre, calle, ciudad
cliente
nombre, calle, ciudad, tipo
empleado
nombre, calle, ciudad, salario
„ la clave primaria de la asociación agregada,
„ La clave primaria del conjunto entidad asociado
„ Cualquier atributo descriptivo
+ Si la especialización es total, la relación para la entidad generalizada
(persona) no tiene que almacenar información
Se puede definir como una relación “vista” que contenga la unión de
las relaciones de especializaicón
Pero aún puede ser necesaria una relación para restricciones de tipo
clave foránea
+ Problema: la información sobre calle y ciudad puede almacenarse de
manera redundante para personas que son a la vez clientes y empleados
Bases de datos
19
Relaciones correspondientes a
agregaciones (Cont.)
Bases de datos
20
Diagrama EE-A para la entidad bancaria
„ P.e. para representar la asociación dirige entre la asociación trabaja-en y
ciudad-sucursal
el conjunto entidad director, creamos una relación
dirige (id-empleado, nombre-sucursal, id-puesto, nombre-director)
numero-cuenta
„ La relación trabaja-en es redundante siempre que permitamos almacenar
nombre-sucursal
saldo
cuenta
sucursal
cuenta-sucursal
valores nulos en el atributo nombre-director en la relación dirige
puesto
empleado
trabaja-en
activos
prestamo
-sucursal
depositante
oficina
cliente
dirige
nombre-cliente
prestatario
prestamo
ciudad-cliente
numero-prestamo
cantidad
calle-cliente
Bases de datos
director
21
Bases de datos
La relación cliente
22
La relación depositante
nombre-cliente
calle-cliente
Suárez
Príncipe
ciudad-cliente
Vigo
Vázquez
Diagonal
Barcelona
nombre-cliente
numero-cuenta
Veiga
Norte
Santiago
Suárez
A-102
Rodríguez
Real
Ourense
Vázquez
A-101
Fernández
Parque
Lugo
Veiga
A-201
Sánchez
Independencia
Ponferrada
Veiga
A-217
Gómez
Colón
Madrid
Rodríguez
A-222
Díaz
Norte
Santiago
Fernández
A-215
Pazo
Pazos
Ferrol
Gómez
A-305
González
Navas
Granada
Rial
Reina
Lugo
García
Ensanche
Barcelona
Bases de datos
23
Bases de datos
24
Restricciones de dominio
Diagrama del esquema para la entidad
bancaria
„ Las restricciones de integridad nos protegen ante daños accidentales en
sucursal
cuenta
depositante
cliente
nombre-sucursal
numero-cuenta
nombre-cliente
nombre-cliente
ciudad-sucursal
nombre-sucursal
numero-cuenta
calle-cliente
activos
saldo
la base de datos, asegurando que los cambios autorizados en la base de
datos no van a producir una pérdida de consistencia en los datos
„ Las restricciones de dominios son la forma más elemental de
restricciones de integridad.
ciudad-cliente
„ Comprueban los valores insertados en la base de datos, y comprueban
las consultas para asegurar que las comparaciones tienen sentido.
„ Se pueden crear nuevos dominios a partir de los tipos de datos existentes
prestamo
prestatario
numero-prestamo
nombre-cliente
nombre-sucursal
numero-prestamo
P.e. create domain Euros numeric(12, 2)
create domain Libras numeric(12,2)
„ No se puede asignar o comparar un valor de tipo Euros con un valor de
cantidad
tipo Libras.
+ No obstante, se pueden convertir tipos:
(cast r.A as Libras)
(Se debería también multiplicar por la conversión euro-a-libra)
Bases de datos
25
Bases de datos
Integridad referencial
26
Integridad referencial en el modelo EE-A
„ Asegura que un valor que aparece en una relación para un
conjunto de atributos determinado también aparece en un conjunto
de atributos de otra relación.
+ Ejemplo: Si “Vigo” es un nombre de sucursal que aparece en una de
„ Consideremos el conjunto asociación R entre los conjuntos
entidad E1 y E2. El esquema relacional de R incluye las claves
primarias K1 de E1 y K2 de E2.
Entonces K1 y K2 son claves foráneas sobre los esquemas
relacionales de E1 y E2 respectivamente.
las tuplas de la relación cuentas, entonces existe una tupla en la
relación sucursales para la sucursal “Vigo”.
E1
„ Definición formal
+ Dadas las relaciones r1(R1) y r2(R2) con claves primarias K1 y K2
respectivamente.
E2
de integridad referencial.
+ El esquema de relación de un conjunto entidad débil debe incluir los
+ El subconjunto α de R2 es una clave foránea referenciando K1 en la
relación r1, si para cada t2 en r2 debe haber una tupla t1 en r1 tal que
t1[K1] = t2[α].
+ Las restricciones de integridad referencial también se denominan
dependencias de subconjunto ya que se pueden expresar como
∏α (r2) ⊆ ∏K1 (r1)
Bases de datos
R
„ Los conjuntos entidad débiles también dan lugar a restricciones
27
Comprobación de integridad referencial
durante una modificación
atributos que forman la clave primaria del conjunto entidad del que
depende
Bases de datos
28
Modificaciones de la base de datos (Cont.)
„
Actualizaciones. Hay dos casos:
+
„ Se deben realizar las siguientes comprobaciones con el fin de
preservar la siguiente restricción de integridad referencial:
Si se actualiza una tupla t2 en la relación r2 y la actualización modifica los valores
de la clave foránea α,entonces se debe hacer un test similar al caso de inserción:
∏α (r2) ⊆ ∏K (r1)
„ Insertar. Si una tupla t2 se inserta en r2, el sistema se debe
asegurar de que hay una tupla t1 en r1 tal que t1[K] = t2[α]. Es
decir
Si t2’ denota el nuevo valor de la tupla t2, el sistema se debe asegurar de que
t2’[α] ∈ ∏K(r1)
+
t2 [α] ∈ ∏K (r1)
„ Eliminar. Si se elimina una tupla t1 de r1, el sistema debe
hallar el conjunto de tuplas de r2 que referencian t1:
Si se actualiza una tupla t1 en r1, y la actualización modifica el valor de la clave
primaria (K), entonces se debe realizar un test similar a la del caso de eliminación:
1.
El sistema debe calcular
σα = t1[K] (r2)
utilizando el valor anterior de t1 (el valor antes de hacer la actualización).
2.
Si el conjunto no es vacío
1.
σα = t1[K] (r2)
la actualización se puede rechazar como un error, o
2. La actualización se puede hacer en cascada sobre las tuplas del
conjunto, o
Si el conjunto no es vacío
+ o bien se rechaza el comando como un error,
+ o bien se deben eliminar las tuplas que referencian a t1
3. Las tuplas del conjunto se pueden eliminar.
(se permiten eliminaciones en cascada)
Bases de datos
29
Bases de datos
30
Lenguajes de consulta
Álgebra relacional
„ Lenguajes con los que el usuario obtiene información
„ Lenguaje procedimental
almacenada en la base de datos.
„ Seis operadores básicos
„ Tipos de lenguajes
+ selección
+ procedimentales
+ proyección
+ No procedimentales
+ unión
„ Lenguajes “puros”:
+ diferencia de conjuntos
+ Álgebra relacional
+ producto cartesiano
+ Cálculo relacional de tuplas
+ renombrar
+ Cálculo relacional de dominios
„ Los operadores se aplican sobre dos o más relaciones y dan
„ Los lenguajes puros son la base de los lenguajes que se utilizan
como resultado una nueva relación.
habitualmente
Bases de datos
31
Bases de datos
Operación de selección
„ Notación:
32
Operación de selección – Ejemplo
σ p(r)
•
„ p se denomina predicado de la selección
Relación r
„ Se define como:
σp(r) = {t | t ∈ r
y p(t)}
donde p es una fórmula en calculo proposicional formada
por términos unidos por : ∧ (y), ∨ (o), ¬ (no)
Cada término tiene la forma:
<atributo> op <atributo> o <constante>
donde op es: =, ≠, >, ≥. <. ≤
A
B
C
D
α
α
1
7
α
β
5
7
β
β
12
3
β
β
23 10
A
B
C
D
α
α
1
7
β
β
23 10
• σA=B ^ D > 5 (r)
„ Ejemplo de selección:
σ nombre-sucursal=“Vigo”(cuenta)
Bases de datos
33
Operación de proyección
Bases de datos
34
Operación de proyección – Ejemplo
„ Notación:
∏A1, A2, …, Ak (r)
„ Relación r:
donde A1, A2 son nombres de atributos y r en un nombre de
relación.
„ El resultado es la relación de k columnas que se obtiene
eliminando las columnas no listadas
„ Las filas duplicadas del resultado se eliminan, ya que las
relaciones son conjuntos
„ ∏A,C (r)
„ P.e. Eliminar el atributo nombre-sucursal de cuentas
∏numero-cuenta, saldo (cuenta)
Bases de datos
35
Bases de datos
A
B
C
α
10
1
α
20
1
β
30
1
β
40
2
A
C
A
C
α
1
α
1
α
1
β
1
β
1
β
2
β
2
=
36
Operación de unión
Operación de unión – Ejemplo
„ Notación: r ∪ s
„ Relaciones r, s:
„ Se define como:
r ∪ s = {t | t ∈ r o t ∈ s}
„ Para que r ∪ s sea válida.
1. r, s deben tener el mismo número de atributos
2. Los dominios de los atributos deben ser compatibles (p.e., la
2ª columna de r contiene el mismo tipo de valores que la
segunda columna de s)
A
B
A
B
α
1
α
2
α
2
β
β
1
r
r ∪ s:
„ P.e. encontrar todos los clientes con cuentas o préstamos
∏nombre-cliente (depositante) ∪ ∏nombre-cliente (prestatario)
Bases de datos
37
Operación diferencia de conjuntos
B
α
1
α
2
β
1
β
3
Bases de datos
38
„ Relaciones r, s:
„ Se define como:
r – s = {t | t ∈ r y t ∉ s}
„ La diferencia de conjuntos se debe realizar entre relaciones
compatibles.
+ r y s deben tener el mismo número de atributos
+ Los dominios de los atributos de r y s deben ser compatibles
A
B
A
B
α
1
α
2
α
2
β
β
1
3
s
r
r – s:
39
A
B
α
1
β
1
Bases de datos
Operación producto cartesiano
40
Operación producto cartesiano - Ejemplo
„ Notación r x s
Relaciones r, s:
„ Se define como:
r x s = {t q | t ∈ r y q ∈ s}
„ Se asume que los atributos de r(R) y s(S) son disjuntos. (Es
A
B
C
D
E
α
1
β
2
α
β
β
γ
10
10
20
10
a
a
b
b
r
decir, R ∩ S = ∅).
„ Si los atributos de r(R) y s(S) no son disjuntos, se debe utilizar la
operación de renombrar.
Bases de datos
A
Operación diferencia de conjuntos – Ejemplo
„ Notación r – s
Bases de datos
3
s
41
s
r x s:
Bases de datos
A
B
C
D
E
α
α
α
α
β
β
β
β
1
1
1
1
2
2
2
2
α
β
β
γ
α
β
β
γ
10
10
20
10
10
10
20
10
a
a
b
b
a
a
b
b
42
Combinación de operaciones
Operación de renombrado
„ Se pueden construir expresiones utilizando varias operaciones
„ Permite nombrar, y por tanto referirnos a, los resultados de las
expresiones de álgebra relacional.
„ Ejemplo: σA=C(r x s)
„ rxs
„ σA=C(r x s)
Bases de datos
A
B
C
D
E
α
α
α
α
β
β
β
β
1
1
1
1
2
2
2
2
α
β
β
γ
α
β
β
γ
10
10
20
10
10
10
20
10
a
a
b
b
a
a
b
b
A
B
C
D
E
1
2
2
α 10
β 20
β 20
a
a
b
α
β
β
„ Permite referirse a una relación con más de un nombre.
Ejemplo:
ρ x (E)
devuelve la expresión E con el nombre X
Si la expresión E en álgebra relacional tiene un orden n, entonces
ρx (A1, A2, …, An) (E)
devuelve la expresión E con el nombre X, y con los atributos
renombrados a A1, A2, …., An.
43
Bases de datos
Ejemplo de banco
44
Ejemplo de consultas
„ Encontrar todos los préstamos de más de 1200 €
sucursal (nombre-sucursal, ciudad-sucursal, activos)
σcantidad > 1200 (prestamo)
cliente (nombre-cliente, calle-cliente, ciudad-cliente)
cuenta (numero-cuenta, nombre-sucursal, saldo)
„Encontrar el número de préstamos para cada préstamo de una
cantidad mayor de 1200 €
prestamo (numero-prestamo, nombre-sucursal, cantidad)
depositante (nombre-cliente, numero-cuenta)
∏numero-prestamo (σcantidad > 1200 (prestamo))
prestatario (nombre-cliente, numero-prestamo)
Bases de datos
45
Bases de datos
Ejemplo de consultas
46
Ejemplo de consultas
„ Encontrar los nombres de todos los clientes que tengan un préstamo
en la sucursal de Vigo.
„ Encontrar los nombres de todos los clientes que tengan una
cuenta, un préstamo, o ambas cosas en el banco.
∏nombre-cliente (prestatario) ∪ ∏nombre-cliente (depositante)
„ Encontrar los nombres de todos los clientes que tienen una
∏nombre-cliente (σnombre-sucursal=“Vigo”
(σprestatario.numero-prestamo = prestamo.numero-prestamo(prestatario x prestamo)))
„ Encontrar los nombres de todos los clientes que tengan un préstamo
cuenta y un préstamos en el banco.
en la sucursal de Vigo pero no tengan una cuenta en ninguna
sucursal del banco.
∏nombre-cliente (prestatario) ∩ ∏nombre-cliente (depositante)
∏nombre-cliente (σnombre-sucursal = “Vigo”
(σprestatario.numero-prestamo = prestamo.numero-prestamo(prestatario x prestamo)))
- ∏nombre-cliente(depositante)
Bases de datos
47
Bases de datos
48
Ejemplo de consultas
Ejemplo de consultas
„ Encontrar los nombres de todos los clientes que tengan un préstamo en
la sucursal de Vigo.
Encontrar la cuenta con el mayor saldo
„ Renombramos la relación cuenta como d
−Consulta 1
„ Consulta:
∏nombre-cliente(σnombre-sucursal = “Vigo” (
σprestatario.numero-prestamo = prestamo.numero-prestamo(prestatario x prestamo)))
∏saldo(cuenta) - ∏cuenta.saldo
(σcuenta.saldo < d.saldo (cuenta x ρd (cuenta)))
− Consulta 2
∏nombre-cliente(σprestamo.numero-prestamo = prestatario.numero-prestamo(
(σnombre-sucursal = “Vigo”(prestamo)) x prestatario))
Bases de datos
49
Bases de datos
50
Definición formal
Otras operaciones
„ Una expresión básica en álgebra relacional puede ser:
Podemos definir más operaciones que no proporcionan nueva
funcionalidad al álgebra relacional pero que simplifican consultas
habituales.
+ Una relación de la base de datos
+ Una relación constante
„ Dadas dos expresiones en álgebra relacional E1 y E2 también
„ Intersección de conjuntos
son expresiones en álgebra relacional:
„ Reunión (join) natural
+ E1 ∪ E2
„ División
+ E1 - E2
„ Asignación
+ E1 x E2
+ σp (E1), P es un predicado sobre los atributos de E1
+ ∏s(E1), S es una lista que contiene algunos atributos de E1
+ ρ x (E1), x es el nuevo nombre del resultado de E1
Bases de datos
51
Operación intersección de conjuntos
„ Notación: r ∩ s
Bases de datos
52
Operación intersección de conjuntos Ejemplo
„ Relaciones r, s:
„ Se define como:
r ∩ s ={ t | t ∈ r and t ∈ s }
„ Asumiendo:
B
α
α
β
1
2
1
r
+ r, s tienen el mismo número de atributos
+ Los atributos de r y s con compatibles
„ r∩s
„ Nota: r ∩ s = r - (r - s)
Bases de datos
A
53
Bases de datos
A
B
α
2
A
B
α
β
2
3
s
54
Operación join natural
„
Notación: r
Operación join natural - Ejemplo
s
„ Relaciones r, s:
„ Dadas dos relaciones r y s sobre los esquemas R y S
respectivamente.
Entonces, r s es una relación sobre el esquema R ∪ S que se
obtiene de la siguiente manera:
+ Se considera cada par de tuplas tr de r y ts de s.
+ Si tr y ts tienen el mismo valor para cada uno de los atributos en R ∩ S,
A
B
C
D
B
D
E
α
β
γ
α
δ
1
2
4
1
2
α
γ
β
γ
β
a
a
b
a
b
1
3
1
2
3
a
a
a
b
b
α
β
γ
δ
∈
se añade una tupla t al resultado, donde
t tiene el mismo valor que t sobre r
r
t tiene el mismo valor que t
„ Ejemplo:
r
s sobre s
r
s
s
R = (A, B, C, D)
S = (E, B, D)
+ Esquema de relación = (A, B, C, D, E)
+ r s se define como:
(σr.B = s.B ∧ r.D = s.D (r x s))
∏
Bases de datos r.A, r.B, r.C, r.D, s.E
55
A
B
C
D
E
α
α
α
α
δ
1
1
1
1
2
α
α
γ
γ
β
a
a
a
a
b
α
γ
α
γ
δ
Bases de datos
Operación división
56
Operación división - Ejemplo
r÷s
Relaciones r, s:
„ Adecuada para consultas que incluyan la expresión “para
todos”.
„ Dadas las relaciones r y s sobre los esquemas R y S
respectivamente, donde
+ R = (A1, …, Am, B1, …, Bn)
+ S = (B1, …, Bn)
El resultado de r ÷ s es una relación sobre el esquema
R – S = (A1, …, Am)
r ÷ s = { t | t ∈ ∏ R-S(r) ∧ ∀ u ∈ s ( tu ∈ r ) }
r ÷ s:
A
A
B
B
α
α
α
β
γ
δ
δ
δ
∈
∈
β
1
2
3
1
1
1
3
4
6
1
2
1
2
s
r
α
β
Bases de datos
57
Bases de datos
Otro ejemplo de división
58
Operación asignación
„ La operación asignación (←) facilita un modo conveniente de
Relaciones r, s:
expresar consultas complejas.
A
B
C
D
E
D
E
α
α
α
β
β
γ
γ
γ
a
a
a
a
a
a
a
a
α
γ
γ
γ
γ
γ
γ
β
a
a
b
a
b
a
b
b
1
1
1
1
3
1
1
1
a
b
1
1
+
Escribir consultas como un programa secuencial consistente en
un conjunto de asignaciones
Seguido por una expresión cuyo valor se muestre como el
resultado de la consulta.
+ La asignación siempre se debe realizar a una variable relación
temporal.
s
„ Ejemplo: r ÷ s se puede expresar como
temp1 ← ∏R-S (r)
temp2 ← ∏R-S ((temp1 x s) – ∏R-S,S (r))
result = temp1 – temp2
r
r ÷ s:
A
α
γ
Bases de datos
+ El resultado de la expresión a la derecha de ← se asigna a la variable
B
a
a
relación de la izquierda de ←.
C
+ La variable se puede utilizar en las expresiones que vienen a
γ
γ
continuación.
59
Bases de datos
60
Ejemplo de consultas
Ejemplo de consultas
„ Encontrar todos los clientes que tengan una cuenta al menos en
las sucursales de “Vigo” y “Pontevedra”.
sucursales de Madrid.
Consulta 1
∏NC(σNS=“Vigo”(depositante
∏nombre-cliente, nombre-sucursal (depositante cuenta)
÷ ∏nombre-sucursal (σciudad-sucursal = “Madrid” (sucursal))
cuenta)) ∩
∏NC(σNS=“Pontevedra”(depositante
„ Encontrar todos los clientes que tengan una cuenta en todas las
cuenta))
donde NC representa nombre-cliente y NS nombre-sucursal.
Consulta 2
∏nombre-cliente, nombre-sucursal (depositante cuenta)
÷ ρtemp(nombre-sucursal) ({(“Vigo”), (“Pontevedra”)})
Bases de datos
61
Bases de datos
62
Proyección generalizada
Operaciones del Álgebra Relacional Extendida
„ Extiende la operación de proyección permitiendo funciones
aritméticas en la lista de proyección.
„ Proyección generalizada
∏ F1, F2, …, Fn(E)
„ Reunión (join) externa
„ E es cualquier expresión en álgebra relacional
„ Funciones agregadas
„ F1, F2, …, Fn son expresiones aritméticas que incluyen
constantes y atributos del esquema de E.
„ P.e. Dada la relación info-credito(nombre-cliente, limite, saldo-
credito), encontrar cuanto puede gastar cada persona:
∏nombre-cliente, limite – saldo-credito (info-credito)
Bases de datos
63
Funciones y operaciones agregadas
„ Las funciones de agregación toman como argumentos un
conjunto de valores y devuelven un valor simple como resultado.
Bases de datos
Operación agregada - Ejemplo
„ Relación r:
avg: valor medio
min: valor mínimo
max: valor máximo
sum: suma de valores
count: número de valores
„ Operación agregada en álgebra relacional
G1, G2, …, Gn
A
B
C
α
α
β
β
α
β
β
β
7
7
3
10
g F1( A1), F2( A2),…, Fn( An) (E)
+ E es cualquier expresión en álgebra relacional
+ G1, G2 …, Gn es una lista de atributos sobre los que agrupar (puede
estar vacía)
g sum(c) (r)
+ Cada Fi es una función agregada
+ Cada Ai es un nombre de atributo
Bases de datos
64
65
Bases de datos
sum-C
27
66
Operación agregada - Ejemplo
Funciones agregadas (Cont.)
„ El resultado de la agregación no tiene nombre
+ Se puede utilizar la operación de renombrado para darle un nombre
„ Relación cuenta agrupada por nombre-sucursal:
nombre-sucursal numero-cuenta
Vigo
Vigo
Madrid
Madrid
Pontevedra
nombre-sucursal
Bases de datos
+ Por conveniencia, se permite el renombrado como parte de la
operación de agregación
saldo
A-102
A-201
A-217
A-215
A-222
400
900
750
750
700
Nombre-sucursal
g sum(saldo) as sum-saldo (cuenta)
g sum(saldo) (cuenta)
nombre-sucursal
saldo
Vigo
Madrid
Pontevedra
1300
1500
700
67
Bases de datos
Join externo
68
Join externo – Ejemplo
„ Es una extensión de la operación de join que evita la
„ Relación prestamo
pérdida de información.
numero-prestamo nombre-sucursal
„ Calcula el join y después añade las tuplas de una
Vigo
Ourense
Madrid
L-170
L-230
L-260
relación que no coinciden con las tuplas de la otra
relación al resultado del join.
cantidad
3000
4000
1700
„ Utiliza valores null:
„ Relación prestatario
+ null significa que el valor es desconocido o no existe
nombre-cliente
+ Todas la comparaciones en las que participa un valor null
son falsas por definición.
Bases de datos
López
Vázquez
García
69
„ Join externo derecho
prestamo
Vigo
Ourense
cantidad
3000
4000
numero-prestamo nombre-sucursal
nombre-cliente
L-170
L-230
L-155
López
Vázquez
Bases de datos
prestamo
prestatario
numero-prestamo nombre-sucursal
Vigo
Ourense
Madrid
Vigo
Ourense
null
cantidad
3000
4000
null
nombre-cliente
López
Vázquez
García
„Join externo total
„Join externo izquierdo
L-170
L-230
L-260
prestatario
prestatario
numero-prestamo nombre-sucursal
prestamo
70
Join externo – Ejemplo
„ Join interno
L-170
L-230
L-170
L-230
L-155
Bases de datos
Join externo – Ejemplo
prestamo
numero-prestamo
cantidad
3000
4000
1700
nombre-cliente
prestatario
numero-prestamo nombre-sucursal
López
Vázquez
null
L-170
L-230
L-260
L-155
71
Bases de datos
Vigo
Ourense
Madrid
null
cantidad
3000
4000
1700
null
nombre-cliente
López
Vázquez
null
García
72
Valores nulos
Valores nulos
„ Las comparaciones con valores null devuelven un valor especial
„ Las tuplas pueden contener valores nulos, denotados por null,
de verdad denominado desconocido
+ Si se usa falso en vez de desconocido, entonces
en algunos de sus atributos
„ null significa valor desconocido o que el valor no existe.
„ El resultado de cualquier expresión aritmética en la que participe
null es null.
no sería equivalente a
not (A < 5)
„ Lógica trivalorada utilizando el valor de verdad desconocido:
+ OR: (desconocido or verdad)
= verdad,
(desconocido or falso)
= desconocido,
(desconocido or desconocido) = desconocido
„ Las funciones agregadas ignoran los valores null
+ Es una decisión arbitraria. Alternativamente se podría haber
devuelto como resultado null.
+ Seguimos la semántica de SQL respecto al manejo de valores nulos
„ Para eliminación de duplicados y agrupamientos, null recibe el
mismo tratamiento que cualquier otro valor, y se asume que dos
nulos son iguales
+ Alternativa: asumir que cada nulo es distinto de los demás
+ Ambas son decisiones arbitrarias. Nosotros seguimos SQL
Bases de datos
A >= 5
73
+ AND: (verdad and desconocido)
= desconocido,
(falso and desconocido)
= falso,
(desconocido and desconocido) = desconocido
+ NOT: (not desconocido) = desconocido
+ En SQL “P es desconocido” se evalúa a verdad si el predicado P
se evalúa a desconocido
„ El resultado de un predicado de selección se trata como falso si
se evalúa como desconocido
Bases de datos
Modificación de la base de datos
74
Borrado
„ El contenido de la base de datos se puede modificar utilizando
„ Una petición de borrado se expresa de manera similar a una
las siguientes operaciones:
+ Borrado
+ Inserción
+ Actualización
consulta, excepto que, en vez de mostrar las tuplas al usuario,
las tuplas seleccionadas se eliminan de la base de datos.
„ Sólo se pueden eliminar tuplas completas; no se pueden
eliminar solo determinados atributos
„ Un borrado se expresa en álgebra relacional como:
„ Todas estas operaciones se expresan mediante el operador de
r←r–E
asignación.
donde r es una relación y E es una consulta en álgebra
relacional.
Bases de datos
75
Bases de datos
Ejemplos de borrado
76
Inserción
„ Para insertar datos en una relación podemos:
„ Borrar todas las cuentas de la sucursal de Vigo.
+ o bien especificar la tupla a insertar
cuentas ← cuentas – σ nombre-sucursal = “Vigo” (cuenta)
+ O bien escribir una consulta cuyo resultado esté formado por las
tuplas a insertar
„Borrar todos los préstamos con cantidades entre 0 y 50
„ En álgebra relacional, una inserción se expresa:
r← r ∪ E
prestamo ← prestamo – σ cantidad ≥ 0 and cantidad ≤ 50 (prestamo)
donde r es una relación y E es una expresión en álgebra
relacional.
„Borrar todas las cuentas de sucursales de Madrid.
r1 ← σ ciudad-sucursal = “Madrid” (cuenta
„ La inserción de una sola tupla se realiza cuando E es una
sucursal)
relación constante que contiene una tupla.
r2 ← ∏ciudad-sucursal, numero-cuenta, saldo (r1)
r3 ← ∏ nombre-cliente, numero-cuenta (r2
depositante)
cuenta ← cuenta – r2
depositante ← depositante – r3
Bases de datos
77
Bases de datos
78
Ejemplos de inserción
Actualización
„ Insertar información en la base de datos especificando que
„ Permite cambiar el valor de una tupla sin cambiar todos los
López tiene 1200€ en la cuenta A-973 en la sucursal de Vigo.
valores de la tupla
„ Para ello se utiliza la operación de proyección generalizada
cuenta ← cuenta ∪ {(“Vigo”, A-973, 1200)}
r ← ∏ F1, F2, …, FI, (r)
depositante ← depositante ∪ {(“López”, A-973)}
„ Cada Fi es
+ el atributo i de r, si el atributo i no se quiere actualizar, o,
„ Dar un premio a todos los préstamos de la sucursal de Vigo
+ si se va a actualizar el atributo i, Fi es una expresión en la que
una cuenta de ahorro con 200€. El número de préstamo se
utilizará como numero de cuenta de ahorro.
r1 ← (σnombre-sucursal = “Vigo” (prestatario
intervienen solamente constantes y los atributos de r, que
proporciona el nuevo valor del atributo
prestamo))
cuenta ← cuenta ∪ ∏nombre-sucursal, numero-cuenta,200 (r1)
depositante ← depositante ∪ ∏nombre-cliente, numeor-prestamo(r1)
Bases de datos
79
Bases de datos
80
Ejemplos de actualización
Vistas
„ Pagar intereses aumentando un 5% todos los saldos.
„ En algunos casos no es deseable que todos los usuarios vean el
modelo lógico completo (es decir, todas las relaciones
almacenadas en la base de datos)
cuenta ← ∏ NC, NS, SAL * 1.05 (cuenta)
donde NC, NS y SAL significan numero-cuenta, nombre-sucursal
y saldo, respectivamente.
„ Pagar a todas las cuentas con saldos de más de 10.000€ un
6% de interés y un 5% al resto
cuenta ←
préstamo de un cliente pero no necesita ver la cantidad
prestada. Esta persona debería ver la siguiente relación descrita
en álgebra relacional
∏nombre-cliente, numero-prestamo (prestatario
prestamo)
„ Cualquier relación que no existe en el modelo conceptual pero
∏ NC, NS, SAL * 1.06 (σ SAL > 10000 (cuenta))
∪ ∏NC, NC, SAL * 1.05 (σSAL ≤ 10000 (cuenta))
Bases de datos
„ Consideremos una persona que necesita saber un número de
se necesita proporcionar a un usuario como una “relación virtual”
se denomina vista.
81
Bases de datos
Definición de vistas
82
Ejemplos de vistas
„ Definir una vista (denominada todos-los-clientes) formada por
„ Una vista se define utilizando una sentencia create view que
sucursales y sus clientes.
tiene la siguiente forma
create view v as <consulta>
create view todos-los-clientes as
∏nombre-sucursal, nombre-cliente (depositante
donde <consulta> es cualquier consulta válida en álgebra
relacional. El nombre de la vista es v.
cuenta)
∪ ∏nombre-sucursal, nombre-cliente (prestatario
prestamo)
„ Una vez definida una vista, el nombre de la vista se utiliza para
referirse a la relación virtual que genera la vista.
„ Podemos encontrar todos los clientes de la sucursal de Vigo con:
„ Definir una vista no es lo mismo que crear una nueva relación
evaluando la consulta
+ La definición de una vista hace que se guarde una expresión de una
∏nombre-sucursal
(σnombre-sucursal = “Vigo” (todos-los clientes))
consulta; la expresión se substituye en las consultas que utilicen la
vista.
Bases de datos
83
Bases de datos
84
Modificaciones a través de vistas
Modificaciones a través de vistas (Cont.)
„ La inserción anterior se debe representar mediante una inserción
„ Las modificaciones de la base de datos que se expresan mediante
en la relación prestamo a partir de la cual se construyó la vista
sucursal-prestamo.
vistas se deben traducir a modificaciones de las relaciones de la base
de datos.
„ Una inserción en prestamo requiere un valor para cantidad. El
„ Consideremos la persona que necesita ver todos los datos de
tratamiento de la inserción puede ser
+ Rechazar la inserción y devolver un mensaje de error al usuario.
+ Insertar una tupla (“L-37”, “Vigo”, null) en la relación prestamo
„ Algunas actualizaciones a través de vistas son imposibles de
transformar en actualizaciones de relaciones en la base de datos
préstamos en la relación prestamo excepto cantidad. La vista que le
demos a esa persona, sucursal-prestamo, se define como:
create view sucursal-prestamo as
∏nombre-sucursal, numero-prestamo (prestamo)
„ Dado que permitimos utilizar un nombre de vista en cualquier lugar
donde pueda aparecer un nombre de relación, el usuario podría
escribir:
+ create view v as (σnombre-sucursal = “Vigo” (cuenta))
v ← v ∪ (L-99, Ourense, 23)
„ Otras no se pueden transformar de manera única
sucursal-prestamo ← sucursal-prestamo ∪ {(“Vigo”, L-37)}
+ todos-los-clientes ← todos-los-clientes ∪ {(“Vigo”, “López”)}
¡Tenemos que elegir préstamo o cuenta y
crear un nuevo número de cuenta/préstamo!
Bases de datos
85
Bases de datos
Vistas definidas utilizando otras vistas
86
Cálculo relacional de tuplas
„ Es un lenguaje de consulta no procedimental, en el que cada
„ Una vista se puede utilizar en la expresión que define otra vista
consulta tiene la forma
{t | P (t) }
„ Una relación vista v1 se dice que depende directamente de una
relación vista v2 si v2 se utiliza en la relación que define v1
„ Es el conjunto de todas las tuplas t tales que el predicado P es
„ Una relación vista v1 se dice que depende de una relación vista
verdadero para t
v2 si, o bien v1 depende directamente de v2, o bien hay un
camino de dependencias desde v1 a v2
„ t es una variable tupla, t[A] denota el valor de la tupla t en el
atributo A
„ Una relación vista v se dice que es recursiva si depende de si
„ t ∈ r denota que la t está en la relación r
misma.
„ P es una fórmula similar a las del cálculo de predicados
Bases de datos
87
Bases de datos
Fórmulas en el cálculo de predicados
1. Conjunto de atributos y constantes
88
Ejemplo de consultas
„ Encontrar el numero-prestamo, nombre-sucursal, y cantidad
de los préstamos de más de 1200€
2. Conjunto de operadores de comparación: (p.e., <, ≤, =, ≠, >, ≥)
{t | t ∈ prestamo ∧ t [cantidad] > 1200}
3. Conjunto de conectivas: y (∧), o (v)‚ no (¬)
4. Implicación (⇒): x ⇒ y, si x es verdad, entonces y es verdad
„ Encontrar el número de préstamo de cada préstamo de más de
x ⇒ y ≡ ¬x v y
1200€
5. Conjunto de cuantificadores:
y
∃ t ∈ r (Q(t)) ≡ ”existe” una tupla t en la relación r
tal que el predicado Q(t) es verdad
y
∀t ∈ r (Q(t)) ≡ Q es verdad “para todas” las tuplas t en la relación r
Bases de datos
{t | ∃ s ∈ prestamo (t[numero-prestamo] = s[numero-prestamo]
∧ s [cantidad] > 1200)}
Notar que la consulta define implícitamente una relación sobre el
esquema [numero-prestamo]
89
Bases de datos
90
Ejemplo de consultas
Ejemplo de consultas
„ Encontrar los nombres de todos los clientes que tienen un
„ Encontrar los nombres de todos los clientes que tengan un
préstamo, una cuenta o ambas cosas en el banco
préstamo en la sucursal de Vigo
{t | ∃s ∈ prestatario( t[nombre-cliente] = s[nombre-cliente])
∨ ∃u ∈ depositante( t[nombre-cliente] = u[nombre-cliente])
„
„ Encontrar los nombres de todos los clientes que tienen un
préstamo y una cuenta en el banco
{t | ∃s ∈ prestatario( t[nombre-cliente] = s[nombre-cliente])
∧ ∃u ∈ depositante( t[nombre-cliente] = u[nombre-cliente])
Bases de datos
91
Ejemplo de consultas
Encontrar los nombres de todos los clientes que tengan un
préstamo en la sucursal de Vigo, pero no tengan una cuenta en
ninguna sucursal del banco
{t | ∃s ∈ prestatario( t[nombre-cliente] = s[nombre-cliente]
∧ ∃u ∈ prestamo(u[nombe-sucursal] = “Vigo”
∧ u[numero-prestamo] = s[numero-prestamo]))
∧ not ∃v ∈ depositante (v[nombre-cliente] =t[nombre-cliente]) }
Bases de datos
92
Seguridad de las expresiones
„ Encontrar los nombres de todos los clientes que tengan un
„ En cálculo de tuplas es posible escribir expresiones que generen
préstamo en la sucursal de Vigo , y las ciudades donde viven
infinitas relaciones.
{t | ∃s ∈ prestamo(s[nombre-sucursal] = “Vigo”
∧ ∃u ∈ prestatario (u[numero-prestamo] = s[numero-prestamo]
∧ t [nombre-cliente] = u[nombre-cliente])
∧ ∃ v ∈ cliente (u[nombre-cliente] = v[nombre-cliente]
∧ t[ciudad-cliente] = v[ciudad-cliente])))}
„ Encontrar los nombres de todos los clientes que tengan una
cuenta en todas las sucursales de Madrid:
{t | ∃ c ∈ cliente (t[nombre-cliente] = c[nombre-cliente]) ∧
Bases de datos
{t | ∃s ∈ prestatario(t[nombre-cliente] = s[nombre-cliente]
∧ ∃u ∈ prestamo(u[nombre-sucursal] = “Vigo”
∧ u[numero-prestamo] = s[numero-prestamo]))}
„ Por ejemplo, {t | ¬ t ∈ r} da lugar a una relación infinita si el
dominio de algún atributo de la relación r es infinito
„ Para prevenir este problema, se restringe el conjunto de
expresiones permitidas a expresiones seguras.
„ Una expresión {t | P(t)} en el cálculo relacional de tuplas es
segura si cada componente de t aparece en una de las
relaciones, tuplas, o constantes que aparecen en P
+ NOTA: esto es más que una simple condición de sintaxis.
∨ true } no es segura --- define un conjunto
infinito con valores de atributo que no aparecen en ninguna
relación, tupla o constante en P.
P.e. { t | t[A]=5
∀ s ∈ sucursal(s[ciudad-sucursal] = “Madrid” ⇒
∃ u ∈ cuenta ( s[nombre-sucursal] = u[nombre-sucursal]
∧ ∃ s ∈ depositante ( t[nombre-cliente] = s[nombre-cliente]
∧ s[numero-cuenta] = u[numero-cuenta] )) )}
93
Bases de datos
Cálculo relacional de dominios
94
Ejemplo de consultas
„ Es un lenguaje de consulta no procedimental equivalente en
„ Encontrar el numero-prestamo, nombre-sucursal, y cantidad para
capacidad expresiva al cálculo relacional de tuplas
préstamos de más de 1200€
{< l, b, a > | < l, b, a > ∈ prestamo ∧ a > 1200}
„ Cada consulta es una expresión de la siguiente forma:
„ Nombre los clientes que tienen un préstamo de más de 1200€
{ < x1, x2, …, xn > | P(x1, x2, …, xn)}
{< c > | ∃ l, b, a (< c, l > ∈ prestatario ∧ < l, b, a > ∈ prestamo ∧ a > 1200)}
+ x1, x2, …, xn representan variables de dominio
„ Encontrar los nombres de todos los clientes que tienen un préstamo
+ P representa una formula similar a las del cálculo de predicados
en la sucursal de Vigo y la cantidad del préstamo:
{< c, a > | ∃ l (< c, l > ∈ prestatario ∧ ∃b(< l, b, a > ∈ prestamo ∧
b = “Vigo”))}
o {< c, a > | ∃ l (< c, l > ∈ prestatario ∧ < l, “Vigo”, a > ∈ prestamo)}
Bases de datos
95
Bases de datos
96
Ejemplo de consultas
„ Encontrar los nombres de todos los clientes que tengan una
cuenta, un préstamo o ambas cosas en la sucursal de Vigo:
{< c > | ∃ l ({< c, l > ∈ prestatario
∧ ∃ b,a(< l, b, a > ∈ prestamo ∧ b = “Vigo”))
∨ ∃ a(< c, a > ∈ prestatario
∧ ∃ b,n(< a, b, n > ∈ cuenta ∧ b = “Vigo”))}
„
Fin del tema 3
Encontrar los nombres de todos los clientes que tienen una
cuenta en todas las sucursales de Madrid:
{< c > | ∃ s, n (< c, s, n > ∈ cliente) ∧
∀ x,y,z(< x, y, z > ∈ sucursal ∧ y = “Vigo”) ⇒
∃ a,b(< x, y, z > ∈ cuenta ∧ < c,a > ∈ depositante)}
Bases de datos
97
Bases de datos
Manuel Ramos Cabrer
98