Está en la página 1de 61

Bases de Datos Relacionales

Definicin de base de datos relacional


lgebra relacional
lgebra relacional extendida
Vistas

3.1

Bases de Datos Relacionales


Tablas (ejemplo en la pgina siguiente)

Una BB.DD. relacional consta de un conjunto de tablas.


Las operaciones (razonamiento sobre los datos) con atributos
(columnas de la tabla) se realizan mediante operaciones
lgicas (true/false o quiz NULL)
Filas

Las filas no estn ordenadas pero las columnas si


E-Relationship - relation
Relacin (adelanto de la definicin)
Subconjunto del conjunto cartesiano de los dominios de los
atributos (telfono DNI)

El dominio de los atributos debe ser atmico (no se puede


subdividir)
3.2

Relacin Cliente
nombre-cliente

direccin-cliente

3.3

ciudad-cliente

Atributos
Cada atributo de una relacin tiene un nombre
El conjunto de todos los valores posibles para un determinado

atributo es el dominio del atributo

Los atributos deben ser atmicos, esto es, indivisibles

Los atributos multivaluados no son indivisibles atmicos


Los atributos compuestos no son atmicos
El valor NULO pertenece a todos los dominios
En general se debe intentar evitar que el valor de los atributos

sea nulo (crea problemas con las operaciones lgicas)

3.4

Definicin Formal de Relacin


Dados los conjuntos D1, D2, . Dn una relacin r es un

subconjunto de D1 x D2 x x Dn
Esto es, una relacin es un subconjunto de n-tuples (a1, a2, , an)
donde cada ai Di

Ejemplo: si

nombre-cliente = {Jones, Smith, Curry, Lindsay}


direccion-cliente = {Main, North, Park}
ciudad-cliente = {Harrison, Rye, Pittsfield}
Entonces r = { (Jones, Main, Harrison),
(Smith, North, Rye),
(Curry, North, Rye),
(Lindsay, Park, Pittsfield)}
es una relacin sobre nombre-cliente x direccion-cliente x ciudadcliente

3.5

Instancia de una Relacin


Los valores actuales (instancia) de una relacin se especifican

mediante una tabla.

Un elemento t de r es una tupla, se representa mediante una

fila en una tabla

nombre-cliente
customer-name Direccion-cliente
customer-street

Jones
Smith
Curry
Lindsay

Main
North
North
Park
cliente

3.7

Ciudad-cliente
customer-city

Harrison
Rye
Rye
Pittsfield

atributos
(o columnas)

tupla
(o filas)

Las Relaciones no Estn Ordenadas


El orden de las tuplas es irrelevante

Numero-cuenta

Sucursal-cuenta

3.8

Saldo-cuenta

lgebra Relacional

apuntar operadores

Lenguaje no procedural
Seis operaciones bsicas

seleccionar
proyectar
unir
diferencia (de conjuntos)
Producto cartesiano
renombrar
Los operadores toman una o ms relaciones como entrada y

proporcionan una nueva relacin como salida.

3.12

Operador Seleccin Ejemplo


Relacin r

A=B ^ D > 5 (r)

12

23 10

23 10
3.13

Operador Seleccin
Notacin:

p(r)

p se llama el predicado de la seleccin


Definido como:

p(r) = {t | t r and p(t)}


Donde p es una formula consistente en expresiones
conectadas por : (and), (or), (not)
Cada expresion es del tipo:
<atributo>

<atributo> o <constante>

op

donde op es: =, , >, . <.


Ejemplo de seleccin:

nombre-sucursal=Perryridge(cuenta)

3.14

Operador Proyeccin Ejemplo,redundancia


Relacin r:

A,C (r)

10

20

30

40

3.15

Operador Proyeccin
Notacin:

A1, A2, , Ak (r)


donde A1, A2 son atributos y r una relacin
El resulta es una relacin de k columnas obtenida borrando las

columnas no enumeradas

Las filas duplicadas se suprimen


Esto es, para eliminar el atributo nombre-sucursal de cuenta.

numero-cuenta, saldo (cuenta)

3.16

Operador Unin Ejemplo


Relaciones r, s:

r s:

3
3.17

Operador Unin
Notacin: r s
Definido como:

r s = {t | t r or t s}
Para que r s este definido.

1. r, s deben tener el mismo numero de atributos


2. Los dominios de los atributos deben ser compatibles. (esto
es, la segunda columna de r deben almacenar el mismo tipo de
valores que la segunda columna de s)
Ejemplo: encontrar todos los clientes con un prstamo o una

cuenta.
nombre-cliente (cliente-cuenta) nombre-cliente (clienteprestamo)

3.18

Operador diferencia de conjuntos, Ejemplo


Relaciones r, s:

r s:

3.19

Operador diferencia de conjuntos


Notacin r s
Definido como:

r s = {t | t r and t s}
El operador necesita que las relaciones s y r sean compatibles

3.20

Producto Cartesiano Ejemplo


Relaciones r, s:

10
10
20
10

a
a
b
b

r x s:
A

1
1
1
1
2
2
2
2

10
10
20
10
10
10
20
10

a
a
b
b
a
a
b
b
3.21

Operador Producto Cartesiano


Notacin r x s
Definido como:

r x s = {t q | t r and q s}

3.22

Composicin de Operadores
Se pueden construir expresiones concatenando operadores
Por ejemplo: A=C(r x s)
rxs

A=C(r x s)

1
1
1
1
2
2
2
2

10
10
20
10
10
10
20
10

a
a
b
b
a
a
b
b

1
2
2

10
20
20

a
a
b

3.23

Operador Renombramiento
Permite nombrar (y referirse con este nuevo nombre) al

resultado de una expresin de lgebra relacional

Nos permite referirnos a una relacin por ms de un nombre.

Ejemplo:

x (E)
Devuelve la expresin E bajo el nombre X

x (A1, A2, , An) (E)


Devuelve los resultados de la expresin E bajo el nombre de X con
los atributos renombrados como: A1, A2, ., An.

3.24

Ejemplo Banco

copiar

sucursal (nombre-sucursal, ciudad-sucursal, capital)


cliente (nombre-cliente, calle-cliente, ciudad-cliente
cuenta (numero-cuenta, nombre-sucursal, saldo)
prestamo (numero-prestamo, nombre-sucursal, cantidad)
cliente-cuenta (nombre-cliente, nmero-cuenta)
cliente-prestamo (nombre-cliente, numero-prestamo)

3.26

Ejemplos de Preguntas
Encontrar todos los prestamos de ms de 1200

cantidad > 1200 (prestamo)


Encontrar el numero-prstamo para todos los prestamos de una
cantidad superior a 1200

numero-prestamo (cantidad > 1200 (prestamo))

3.28

Ms ejemplos
Cules son los nombres de los clientes que tiene un prstamo,

una cuenta (o ambos) (2formas)

nombre_cliente (cliente-prestamo) nombre_cliente (cliente-cuenta)


Cuales son los nombres de los clientes que tienen una cuenta
y un prstamo
nombre-cliente (cliente-prestamo) nombre-cliente (cliente-cuenta)
Pero bueno no lo hemos definido!!
No importa puesto que es equivalente a: r - (r - s)

3.29

Ms ejemplos
Encontrar los nombres de todos los clientes que tienen un prstamo en

la sucursal Perryridge.

nombre-cliente (nombre-sucursal=Perryridge Pa3-Pa4


(c-prestamo.numero-prestamo= prestamo.numero-prestamoPa2
(cliente-prestamo x prestamo))) Pa1
Nombres de los clientes que tienen un prstamo en la sucursal
Perryridge pero no tienen una cuenta en dicha sucursal.
nombre-cliente (nombre-sucursal = Perryridge

(c-prestamo.numero-prestamo = prestamo.numero-prestamo (cliente-

prestamo x prestamo)))

nombre-cliente (nombre-sucursal = Perryridge Pb1-2


(c-cuenta.numero-cuenta = cuenta.numero-cuenta (cliente-cuenta x cuenta)))
3.30

Ms Ejemplos
Nombre de todos los clientes que tienen un prstamo en la sucursal

Perryridge.

solucin 1

nombre-cliente(nombre-sucursal = Perryridge (

cliente-prestamo.numero-prestamo = prestamo.numero-prestamo
(cliente-prestamo x prestamo)))

solucin 2
cliente-nombre(prestamo.numero-prestamo =

c-prestamo.numero-prestamo (

(nombre-sucursal = Perryridge(prestamo)) x
cliente-prestamo))
3.31

todava ms
Encuentra el mayor saldo (para cualquier cuenta)
Renombra la relacin cuenta como d
entonces:

saldo(cuenta) - cuenta.saldo Pc3


(cuenta.saldo < d.saldo (cuenta x d (cuenta) Pc1)) Pc2

3.32

Operaciones adicionales

copy

Las siguientes operaciones no aaden ninguna funcionalidad nueva


pero facilitan la formacin de preguntas a la base de datos.
Interseccin de conjuntos
producto natural (natural join)
Divisin
Asignacin

3.33

Interseccin de conjuntos, ejemplo


Relacin r, s:

1
2
1

2
3

r
rs

3.34

Interseccin de conjuntos
Notacin: r s
Definido como:
r s ={ t | t r and t s }
Se asume que los atributos de s y r son compatibles.
Nota: r s = r - (r - s)

3.35

Producto Natural, Ejemplo


Relacin r, s:

1
2
4
1
2

a
a
b
a
b

1
3
1
2
3

a
a
a
b
b

s
A

1
1
1
1
2

a
a
a
a
b

3.36

Producto Natural

Notacin: r

Sea r y s relaciones con esquemas R y S respectivamente.

entonces, r s es una relacin con esquema R S obtenida


como se especifica a continuacin:
Considrese cada par de tuplas tr de r y ts de s.
Si tr y ts tienen los mismos valores en cada atributo de R S, se aade
la tupla t como resultado, donde
t tiene los mismos valores que tr en r
t tiene los mismos valores que ts en s

Ejemplo:
R = (A, B, C, D)
S = (E, B, D)

Esquema resultante = (A, B, C, D, E)


r

s se define como:

r.A, r.B, r.C, r.D, s.E (r.B = s.B r.D = s.D (r x s))
3.37

Producto Natural
Se utiliza para simplificar consultas que requieren el producto

cartesiano.

Sobre todo cuando el producto cartesiano va seguido de una

seleccin.

3.38

Operacin Divisin
rs
Adecuada para preguntas que incluyan la fase para todos.
Sean las relaciones r y s con esquemas R y S respectivamente

donde

R = (A1, , Am, B1, , Bn)


S = (B1, , Bn)
El resultado de r s es una relacin con el esquema
R S = (A1, , Am)

r s = { t | t R-S(r) u s ( tu r ) }

3.39

Operacin Divisin. Ejemplo


Relaciones r, s:

r s:

1
2
3
1
1
1
3
4
6
1
2

1
2
s

3.40

Otro ejemplo con Divisin


Relaciones r, s:

r s:

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

a
a

3.41

Operacin Asignacin
El operador asignacin () permite fragmentar las

consultas.

permite realizar las consultas como:


una serie de asignaciones
seguidas de una expresin.
Tambin permite insertar y modificar datos
Ejemplo: r s puede escribirse como:

temp1 R-S (r)


temp2 R-S ((temp1 x s) R-S,S (r))
result = temp1 temp2
El resultado del lado derecho de se asigna a la variable al
lado izquierdo

3.43

Ejemplos
Clientes que tienen una cuenta en (por lo menos) las sucursales

Downtown y Uptown.
Solucin 1

NC(NS=Downtown(cliente-cuenta
NC(NS=Uptown(cliente-cuenta

cuenta))
cuenta))

donde NC significa nombre-cliente y NS nombre sucursal.

3.44

Ms Consultas
Clientes con cuentas en todas las sucursales de la ciudad de

Brooklyn.

nombre-cliente, nombre-sucursal (cliente-cuenta

cuenta)

nombre-sucursal (ciudad sucursal = Brooklyn (sucursal))

3.45

Ms Operaciones (Algebra lineal


extendida)
Projeccin Generalizada
Funciones de agregacin/Funciones de grupos de filas

3.46

Projeccin generalizada
Extiende la operacin proyeccin permitiendo el uso de

funciones aritmticas en el predicado.


F1, F2, , Fn(E)

E es una expresin de lgebra relacional.


F1, F2, , Fn son expresiones aritmeticas que utilizan constantes

y atributos del esquema E.

Dada la relacin credit-info(nombre-cliente, lmite, credito),

encontrar cuanto puede gastar cada persona


nombre-cliente, limite credito (credit-info)

3.47

Funciones de agregacin y Operadores


Las funciones de agregacin toman como entrada un conjunto

de valores y devuelven un nico valor.

avg: valor medio


min: valor mnimo
max: valor mximo
sum: suma
count: nmero de valores
El operador agregacin: se define en algebra relacional como
volver ms tarde

G1, G2, , Gn

g F1( A1), F2( A2),, Fn( An) (E)

E es una expresion de algebra relacional


G1, G2 , Gn lista de atributos a agrupar (puede no existir)
Cada Fi es una funcin de agregacin
Cada Ai es el nombre de un atributo

3.48

Operador agregacin, Ejemplo:


Relacin r:

g sum(c) (r)

10

sum-C
27

3.49

Operador Agregacin, Ejemplo:


Relacin cuenta agrupada por sucursal-nombre
Nombre-sucursal

Perryridge
Perryridge
Brighton
Brighton
Redwood
Nombre-sucursal

sum(saldo)

Numero-cuenta

saldo

A-102
A-201
A-217
A-215
A-222

400
900
750
750
700

(cuenta)

Nombre-sucursal

XXXX

Perryridge
Brighton
Redwood

1300
1500
700

3.50

Funciones de agregacin (cont)


El resultado de una agregacin no tiene nombre

Se puede nombrar usando el operador renombrar

3.51

Valores Nulos
El valor de una tupla puede ser nulo para alguno de sus

atributos (normalmente se denota con NULL)

NULL significa que el valor es desconocido o no existe


El resultado de una operacin aritmtica que involucre NULL es

NULL

Las funciones de agregacin ignoran los valores NULL

Es una decisin arbitraria, podan haber devuelto NULL.


Para las operaciones de agrupamiento y eliminacin de

duplicados se asume que dos valores NULL representan lo


mismo
Es una decisin arbitraria

3.56

Valores Nulos
La comparacin con NULL devuelve el valor UNKNOWN que

suele tratarse como TRUE

Lgica usando unknown:

OR: (unknown or true)


= true,
(unknown or false)
= unknown
(unknown or unknown) = unknown
AND: (true and unknown)
= unknown,
(false and unknown)
= false,
(unknown and unknown) = unknown
NOT: (not unknown) = unknown
En SQL P is unknown es TRUE si el predicado P es igual to
UNKNOWN

3.57

Modificacin de las bases de datos


El contenido de una base de datos se puede moificar mediante

los operadores siguientes:


Eliminacin
Insercin
Actualizacin

Todas estan operaciones se realizan usando el operador

asignacin.

3.58

Eliminacin
Solo se pueden eliminar tuplas enteras (no los valores de

algunos atributos determinados)

La eliminacin se expresa como:

rrE
donde r es una relacin y E una consulta del lgebra relacional.

3.59

Ejemplos de eliminacin
Eliminar todas las cuentas de la sucursal Perryridge.

cuenta cuenta nombre-sucursal = Perryridge (cuenta )


Eliminar todos los prestamos con un valor entre 0 y 50

(varias relaciones)

prestamo prestamo cantidad 0and cantidad 50 (prestamo )


Borrar todas las cuentas en las sucursales localizadas en Needham.
r1 ciudad-sucursal = Needham (cuenta

sucursal)

r2 nombre-sucursal, numero-cuenta, saldo (r1)


r3 nombre-cliente, numero-cuenta (r2

cliente-cuenta)

cuenta cuenta r2
cuenta_cliente cuenta_cliente r3
3.60

Insercin
La insercin se expresa como:

r r E
donde r es una relacin y E es una expresin de lgebra
relacional.
La insercin de un nica tupla se consigue haciendo E igual a

una relacin constante.

3.61

Ejemplos de insercin
Inserte informacin en la base de datos especificando que Smith tiene

1200 en la cuenta A-973 en la sucursal Perryridge. Asumir que Smith


y Perrydge ya existen pero la cuenta A-973 no

cuenta cuenta {(Perryridge, A-973, 1200)}


Cliente-cuenta cliente-cuenta {(Smith, A-973)}
Por Navidad el banco regala a todos los clientes con un
prestamo en la sucursal Perryridge, una cuenta corriente con
saldo de 200. El numero de prestamo ser el numero de la
nueva cuenta.
r1 (sucursal-nombre = Perryridge (cliente-prestamo

prestamo))

cuenta cuenta nombre-sucursal, numero-cuenta, 200 (r1)


cliente-cuenta cliente-cuenta nombre-cliente, nmero-prestamo(r1)
3.62

Por Navidad el banco regala a todos los clientes con un


prestamo en la sucursal Perryridge, una cuenta corriente con
saldo de 200. El numero de prestamo ser el numero de la
nueva cuenta.
r1 sucursal-nombre = Perryridge (cliente-prestamo
r2

(nombre_cliente,numero_prestamo)

(r1)

r3 (nombre_cliente,numero_cuenta) (r2)
cliente-cuenta cliente-cuenta r3
r4

(numero_cuenta)

r3

r5 r4 x Perryridgex200
r6 (numero_cuenta,nombre_sucursal,saldo) r5

cuenta cuenta r6
3.63

prestamo)

Actualizacin
Um mecanismo para cambiar un/os valor/es de una tupla sin

modificar toda la tupla

Se usa la projeccin generalizada

r F1, F2, , FI, (r)


Cada Fi es uno de los siguientes

el atributo i-esimo de r, si el i-esimo atribute no se modifica.


Si el atributo se modifica Fi es una expresin formada por
constantes y los atributos de r a actualizar.

3.64

Ejemplos de Actualizacin
Abono intereses incrementando el saldo de todas las cuentas en un

5 por ciento
cuenta NC, NS, SAL * 1.05 (cuenta)

donde NC, NS and SAL significa numero-cuenta, nombresucursal y saldo.


Paga a todas las cuentas con ms de 10,000 6 por ciento de
interes y paga al resto un 5 por ciento
cuenta

NC, NS, SAL * 1.06 (

SAL 10000 (cuenta))

NC, NS, SAL * 1.05 (SAL 10000 (cuenta))

3.65

Vistas
En algunos caso no es deseable que un usuario vea (o tenga

acceso) a todas las relaciones almacenadas en la base de


datos.

Supongamos el caso en que se necesite saber el nombre-

prstamo pero no la cantidad del prstamo. Esta persona debe


ver una relacin descrita por:
nombre-cliente, numero-prestamo (cliente-prestamo

prestamo)

Cualquier relacin que no es parte del modelo conceptual pero

que se presenta al usuario como una relacin virtual se llama


vista.

3.66

Creacin/definicin de una vista


Una vista se define usando la sentencia create view que tiene

la sintaxis siguiente:

create view v as <expresin de consulta>


donde <expresin de consulta> es cualquier expresin valida de
lgebra relacional. A la vista se le asigna el nombre v.
Una vez definida la vista puede usarse en lugar de la expresin

de consulta que la gener.

Definir una vista NO es lo mismo que crear una nueva relacin

mediante la evaluacin de una consulta

Definir la vista solo almacena una expresin que ser utilizada cada
vez que se hagan consultas usando la vista.

3.67

Ejemplos de vistas
Considerese la vista (que llamaremos todos-clientes)

consistentes en las entidades y sus clientes.

create view todos-clientes as


nombre-entidad, nombre-cliente (cliente-cuenta

cuenta)

nombre-entidad, nombre-cliente (cliente-prestamo


prestamo)
Una vez definida la vista, podemos encontrar todos los
clientes en la sucursal Perryridge escribiendo

nombre-sucursal = Perryridge (todos-clientes)

3.68

Actualizaciones por medio de Vistas


Las vistas son tiles pero problematicas a la hora de actualizar porque:

las modificaciones sobre relaciones virtuales conseguidas mediante


vistas deben transladarse a modificaciones de la base de datos
subyacente.

Considerese un usuario que necesita tener acceso a todos los datos

relacionados con prestamos excepto la cantidad. La vista usada por esa


persona sera:
create view sucursal-prestamo as
nombre-sucursal, numero-prestamo (prestamo)

Puesto que una vista puede ser usada donde usariamos una relacin se

podra escribir:

sucursal-prestamo sucursal-prestamo {(Perryridge, L-37)}

3.69

Actualizaciones por medio de Vistas(Cont.)


La insercin debe convertirse en una insercin en la relacin

prstamo (a partir de la cual fue creada).

Una insercin en prstamo requiere un valor para cantidad. As

que la insercin debe :

o rechazar la actualizacin y devolver un mensaje de error.


insertar la tupla (L-37, Perryridge, null) en la relacin prestamo
Algunas actualizaciones usando vistas no tienen ninguna

traduccin a actualizaciones de la base de datos subyacente


create view v as nombre-sucursal = Perryridge (cuenta))
v v (L-99, Downtown, 23)

Otras se pueden entender de varias formas

(todos-clientes def

todos-clientes todos-clientes {(Perryridge, John)}


Hay que elegir si este cliente va a tener una cuenta o un prestamo!

3.70

END

3.71

Ejemplos

3.72

También podría gustarte