Vous êtes sur la page 1sur 15

Algebra relacional

Introduccin
En las secciones anteriores se han estudiado las maneras de modelar informacin de manera "relacional" empleando el concepto de entidades que se relacionan entre s. Esta seccin presenta la manera de hacer consultas a una base de datos empleando algunos conceptos matemticos aplicados a un esquema relacional. Los lenguajes que se analizan ms adelante se derivan precisamente del algebra relacional. El lgebra relacional consiste de algunas simples pero poderosas maneras de construir nuevas relaciones a partir de otras. Si pensamos que las relaciones iniciales son los datos almacenados entonces las nuevas relaciones se pueden ver como respuestas a algunas consultas deseadas.

Conjunto de operaciones en relaciones


R S, la unin de R y S es el conjunto de elementos que estn en R o S o ambos. Un elemento solo aparece una sola vez. R S, el conjunto de elementos que aparecen en ambos R y S R - S, la diferencia de R y S, el conjunto de elementos que estan en R pero no en S. Es importante resaltar que R - S es diferente a S - R. R / S, la divisin de una relacin entre otra, debe cumplirse que para toda tupla en R exista su correspondiente en S.

Restricciones: 1. R y S deben tener esquemas idnticos. 2. El orden de las columnas debe ser el mismo Ejemplos: name Carrie Fisher Mark Hamill address 123 Maple St. 456 Oak Rd. gender F M birthdate 9/9/99 8/8/88

name Harrison Ford Carrie Fisher Unin name Harrison Ford Mark Hamill Carrie Fisher Interseccin name Carrie Fisher Resta name Mark Hamill

address 789 Palm Dr. 123 Maple St.

gender M F

birthdate 7/7/77 9/9/99

address 789 Palm Dr. 456 Oak Rd. 123 Maple St.

gender M M F

birthdate 7/7/77 8/8/88 9/9/99

address 123 Maple St.

gender F

birthdate 9/9/99

address 456 Oak Rd.

gender M

birthdate 8/8/88

Proyeccin

Crea una nueva relacin a partir de otra, pero incluyendo slo algunas de las columnas A1,A3,A6 (R)

title Star Wars Mighty Ducks Wayne's World

year length filmType 1977 124 color 1991 104 color 1992 95 color Movie

studioName Fox Disney Paramount

Ejemplo:
title,year,length(Movie)

title Star Wars Mighty Ducks Wayne's World


filmType(Movie)

year 1977 1991 1992

length 124 104 95

filmType color

Seleccin

Crea una nueva relacin a partir de otra, pero incluyendo slo algunas de las tuplas a partir de un criterio dado. El criterio se basa en restricciones sobre los atributos de la relacin R y no pueden incluirse otras relaciones en dicho criterio que no esten en R A3>16 (R) , A3>16 and A3 < 45 (R), nombre='Carlos' and edad=45 (R) title Star Wars Mighty Ducks Wayne's World year length filmType 1977 124 color 1991 104 color 1992 95 color Movie studioName Fox Disney Paramount

Ejemplos:
length>=100

(Movie) year length 1977 124 1991 104 (Movie) filmType color studioName Fox filmType color color studioName Fox Disney

title Star Wars Mighty Ducks

length>=100 and studioName='Fox'

title Star Wars

year 1977

length 124

title,studioName(

length>=100

(Movie)) studioName Fox Disney

Title Star Wars Mighty Ducks

Asignacin <-Almacena temporalmente el resultado de un operacin en un relacin dada LOLO <-title,studioName( length>=100

(Movie))

Divisin
Sean A a a b e e a B b b c d d b C C E E C E D R D d f f d f e

C C e

D d f S

A a e

B b d R/S

Ejemplo: Estudiantes que han tomado todos los cursos de "IS"


ID,num

depto='IS'

(estudiante_cursos)) /

num(

depto='IS'(cursos))

Producto cartesiano X
Producto cruz o solo producto R X S, los esquemas de ambas relaciones se mezclan y unen. Dados A 1 3 B 2 4 R A 1 1 1 3 3 3 R.B 2 2 2 4 4 4 S.B 2 4 9 2 4 9 RXS B 2 4 9 C 5 7 10 S C 5 7 10 5 7 10 D 6 8 11 6 8 11 D 6 8 11

Outer Join
El outer join es una extensin del join para lidear con informacin no existente. Exiten 3 tipos, izquierdo, derecho y completo. employeestreet city name Coyote Toon Hollywood Rabbit Tunnel Carrotville Death Smith Revolver Valley employee- branchsalary name name Coyote Mesa 1500 Rabbit Mesa 1300 Gates Redmond 5300 Williams Redmond 1500

Williams

Seaview Seattle employee

ft-works

employee-name Coyote Rabbit Williams

street city Toon Hollywood Tunnel Carrotville Seaview Seattle |X|

branch-name Mesa Mesa Redmond

salary 1500 1300 1500

Left Outer Join


employeename Coyote Rabbit Williams Smith street city Toon Hollywood Tunnel Carrotville Seaview Seattle Death Revolver Valley branchname Mesa Mesa Redmond null salary 1500 1300 1500 null

Right Outer Join


employee-name Coyote Rabbit Williams Gates street city Toon Hollywood Tunnel Carrotville Seaview Seattle null null branch-name Mesa Mesa Redmond Redmond salary 1500 1300 1500 5300

Full Outer Join


employeename street city branchname salary

Coyote Rabbit Williams Smith Gates

Toon Hollywood Tunnel Carrotville Seaview Seattle Death Revolver Valley null null

Mesa Mesa Redmond null Redmond

1500 1300 1500 null 5300

Combinacin de operaciones
Cules son los ttulos y aos de las pelculas hechas por Fox y que tengan al menos 100 minutos de duracin. 1. Seleccionar aquellas pelculas que tienen length >=100
length>=100

(Movie)

2. Seleccionar aquellas pelculas que tienen studioName='Fox'


studioName='Fox'

(Movie)

3. Calcular la interseccin de (1) y (2)


length>=100 studioName='Fox'

(Movie)

4. Proyectar nicamente title y year


title,year

length>=100

studioName='Fox'

(Movie) )

Problema: Dadas las 2 relaciones siguientes, indique un query en algebra relacional para encontrar los nombres de las estrellas que trabajan en pelculas cuya duracin sera mayor o igual que 100. Movie (title,year,length,filmType,studioName) Movie_star(title,year,starName)

starName

length>=100

(Movie |X| Movie_star)

Renombramiento
Renombrar una relacin para facilitar la interaccin con otras s (R) Ej.
t.nombre

s.nombre='carlos' and t.curso='IS341'

(PROFE) X

(CURSO) ) )

Renombrar un atributo Suponiendo R (A,B,C) (R) = R(A,X,C)


R(A,X,C)

(R) = S(A,X,C)
s(A,X,C)

A, B as X, C

(R)

B as X

(R)

= R(A,X,C)

= R(X)

Modificaciones a la base de datos


Eliminacin
r <-- r - E depositor <-- depositor customer-name='Smith'(depositor)

Insercin
r <-- r E {(A-973, "Perryridge", 1200)}

account <-- account

Actualizacin
r <-F1,F2,....Fn(r) account-number, branch-name, balance*1.05

account <--

(account)

Si slo queremos actualizar algunas tuplas:

r <--

F1,F2...Fn

P(r))

(r-

P(r))

Suponiendo que se desea que las cuentas con balance superior a $ 10,000 reciban un aumento del 6% y que todas las demas solo el 5% account <-AN, BN, balance*1.06

( (

balance > 10000

AN,BN, balance*1.05

(account)) balance <= 10000 (account))

Operaciones dependientes e independientes


R S=R-(R-S) L( c(RXS))

R |X| S =

Operadores Extendidos
No son parte del estndar del Algebra Relacional, pero al ser includos en los lenguajes de consulta ms populares se han introducido como una extensin.

Eliminacin de duplicidad
A 1 3 1 1 B 2 4 2 2

(R) A 1 3 B 2 4

Operadores de agregacin
A 1 B 2

3 1 1

4 2 2

SUM(B)= 10 AVG(A)= 1.5 MIN(A)=1 MAX(B)=4 COUNT(A)=4

Es importante resaltar que estos operadores nunca devuelven un "valor" sino una relacin conteniendo el valor. SUM(B) 10
SUM(B)

(R)

Agrupacin
A 1 3 1 2 1 2 B 2 4 2 8 2 6

A 1 3 2

SUM(B) 6 4 14
A, SUM(B)

(R)

Ordenamiento

A4,A5

(R) A 1 2 3 SUM(B) 6 14 4 A(
A, SUM(B)(R))

Otros lenguajes de consulta


Clculo relacional de tuplas
accou branc ntbala hnumb nce name er Downt A-101 500 own Perryri A-102 400 dge Brighto A-201 900 n A-215 Mianus 700 Brighto A-217 750 n Redwo A-222 700 od Round A-305 350 Hill account branc hname Brighto n Downt own custo mername custo custo mer- merstreet city Pittsfiel Adams Spring d Brookly Brooks Senator n Curry North Rye Stamfor Glenn Walnut d Harriso Hayes Main n Johnso Palo Alma n Alto customer

branch asset -city s 7100 000 9000 000 4000 00 3700 000 1700 000 3000 00 2100 000 8000 000

Brookly n Brookly n Horsen Mianus eck North Rye Town Perryri Horsen dge eck Bennin Pownal gton Redwo Palo od Alto Round Horsen Hill eck branch

customer- accountname number Hayes A-102 Johnson A-101

loanbranch amou numb -name nt er L-11 RoundH 900

customername Adams Curry

loannumber L-16 L-93

Johnson Jones Lindsay Smith Turner

A-201 A-217 A-222 A-215 A-305

L-14 L-15 L-16 L-17 L-23 L-93 null

depositor

ill Downto wn Perryrid ge Perryrid ge Downto wn Redwoo d Mianus null loan

1500 1500 1300 1000 2000 500 1900

Hayes Jackson Jones Smith Smith Williams Johnson

L-15 L-14 L-17 L-11 L-23 L-17 null

borrower

Encontrar branch-name, loan-number and amount para los prstamos superiores a $1,200 {t|t loan ^ t [amount] > 1200 }

Encontrar el loan-number de cada prstamo cuyo monto sea mayor a $1,200

{t| }

loan ( t [loan-number] = s [loan-number] ^s [amount] > 1200)

Encontrar los nombres de los clientes que tienen un prstamos de la sucursal Perryridge

{t|

s u

borrower (t [customer-name] = s [customer-name] ^ loan ( u[loan-number] = s[loan-number] ^ u[branch-name]="Perryridge" ) ) }

Encontrar todos los clientes que tienen un prstamo, cuenta, o ambos en el banco.

{t| v

s u

borrower ( t [customer-name] = s [customer-name] ) depositor ( t[customer-name] = u[customer-name] ) }

Encontrar todos los clientes que tienen una cuenta en el banco pero no tienen ningn prstamo.

{t|

u s

depositor ( t[customer-name] = u [customer-name] ) ^ borrower ( t[customer-name] = s[customer-name] ) }

Tambin es posible usar el smbolo "para todo" junto con una implicacin P-->Q donde si P es verdadero, Q tambin deber serlo.

Encontrar todos los clientes que tienen una cuenta en todas las sucursales localizadas en Brooklyn

{t|

r (

customer ( r[customer-name] = t [customer-name]) ^ u branch ( u[branch-city]= "Brooklyn" --> s depositor ( t[customer-name] = u

[customer-name] ) ^ w s[account-number] ^ u[branch-name] )))) }

account ( w[account-number] = w[branch-name] =

Expresiones inseguras {t|(t loan ) }

Clculo relacional de dominios


accou branc ntbala hnumb nce name er branc branch asset h-city s name Brighto Brookly 7100 custo mername Adams custo merstreet Spring custo mercity Pittsfiel

A-101 A-102 A-201 A-215 A-217 A-222 A-305

Downt own Perryri dge Brighto n Mianus Brighto n Redwo od Round Hill account

500 400 900 700 750 700 350

n n Downt Brookly own n Horsen Mianus eck North Rye Town Perryri Horsen dge eck Bennin Pownal gton Redwo Palo od Alto Round Horsen Hill eck branch

000 9000 000 4000 00 3700 000 1700 000 3000 00 2100 000 8000 000

d Brookly Brooks Senator n Curry North Rye Stamfor Glenn Walnut d Harriso Hayes Main n Johnso Palo Alma n Alto customer

customer- accountname number Hayes A-102 Johnson A-101 Johnson A-201 Jones A-217 Lindsay A-222 Smith A-215 Turner A-305 depositor

loanbranch amou numb -name nt er RoundH L-11 900 ill Downto L-14 1500 wn Perryrid L-15 1500 ge Perryrid L-16 1300 ge Downto L-17 1000 wn Redwoo L-23 2000 d L-93 Mianus 500 null null 1900 loan

customername Adams Curry Hayes Jackson Jones Smith Smith Williams Johnson

loannumber L-16 L-93 L-15 L-14 L-17 L-11 L-23 L-17 null

borrower

Encontrar branch-name, loan-number and amount para los prstamos superiores a $1,200 { <l,b,a> | <l,b,a> loan ^ a > 1200 }

Encontrar el loan-number de cada prstamo cuyo monto sea mayor a $1,200

{<l>|

b,a ( <l,b,a>

loan ^ a > 1200) }

Encontrar los nombres de los clientes que tienen un prstamo de la sucursal Perryridge

{ <c,a> | ^

l (<c,l>

borrower loan ^ b="Perryridge" ) ) }

b (<l,b,a>

Encontrar todos los clientes que tienen una cuenta en todas las sucursales localizadas en Brooklyn.

{ <c> |

n ( <c,n> customer ) ^ x,y,z ( <x,y,z> branch ^ y = "Brooklyn" --> a,b ( <a,x,b> account ^ <c,a> depositor ) ) }

En este caso nuevamente aparece el "para todo" y el smbolo de implicacin P-->Q, indicando que si P es cierto Q tambin debe serlo.

Vous aimerez peut-être aussi