29
1/2/14 1 © 2013 IST Bases de Dados 2013/2014 Álgebra Relacional Helena Galhardas © 2013 IST Bibliografia Raghu Ramakrishnan, Database Management Systems, Cap. 4 1

Bases de Dados 2013/2014 Álgebra Relacional · conjuntos de tuplos) ... • R contém os mesmos tuplos que o resultado de E ... (eventualmente ligadas através de uma conjunção)

Embed Size (px)

Citation preview

1/2/14  

1  

©  2013  IST  

Bases de Dados 2013/2014 Álgebra Relacional

Helena Galhardas

©  2013  IST  

Bibliografia

•  Raghu Ramakrishnan, Database

Management Systems, Cap. 4

1  

1/2/14  

2  

©  2013  IST  

Sumário

•  Álgebra Relacional

2  

©  2013  IST  

Linguagens Formais de Interrogação Relacionais

•  Linguagem de interrogação: serve para especificar perguntas ou interrogações (queries) que envolvem os dados da BD

•  Duas que servem de base à definição e implementação do SQL –  Álgebra Relacional

•  Interrogações são composições de operadores •  Operacional: especificação passo-a-passo do procedimento

para calcular a resposta •  Representação de planos de execução

–  Cálculo Relacional •  Não operacional •  Declarativo

1/2/14  

3  

©  2013  IST  

Interrogação (query) •  Entrada e saída: relações •  Avaliada usando “instâncias” de cada relação

(tabelas) como entrada e produzindo uma “instância” da relação (tabela) de saída

•  A escrita de uma interrogação é –  dependente do esquema de entrada e saída – mas independente das tabelas

•  Referência a atributos de uma relação – Posicional: usada a ordem pela qual foi criado o

atributo – Nome: pelo nome dado ao atributo

©  2013  IST  

Esquema Relacional para exemplos

Sailors(sid, sname, rating, age) Boats(bid, bname, color) Reserves(sid, bid, day)

sid: FK(Sailors) bid: FK(Boats)

1/2/14  

4  

©  2013  IST  

Exemplos de tabelas

sid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

sid bid day22 101 10/10/9658 103 11/12/96

R1 S1

S2

©  2013  IST  

Operadores relacionais básicos (resumo)

Selecção (σ) Projecção (π)

=!Junção

S

R

União (∪)

⇒ / Divisão (/)

Produto cartesiano (X)

=!X

Intersecção (∩)

S

R

Diferença (-)

R

S

Renomeação(ρ)

1/2/14  

5  

©  2013  IST  

Expressão de álgebra relacional (E)

8  

•  Recursivamente definida como sendo uma relação, um operador algébrico unário aplicado a uma expressão, ou um operador binário aplicado a duas expressões

•  Interrogação obtém-se pela composição de operadores

©  2013  IST  

Projecção

sname ratingyuppy 9lubber 8guppy 5rusty 10

πsname,rating(Sailors)

age35.055.5

πage(Sailors)

•  Extrai colunas de uma relação •  Elimina duplicados, por definição de relação Q: Qual o nome e classificação Q: Qual a idade dos marinheiros? dos marinheiros?

1/2/14  

6  

©  2013  IST  

Selecção

σrating>8(Sailors)

sid sname rating age28 yuppy 9 35.058 rusty 10 35.0

sname ratingyuppy 9rusty 10

πsname,rating(σrating>8(Sailors))

•  Retorna os tuplos de uma relação que obedecem a uma condição

Q: Quais os marinheiros Q: Quais os seus nomes e com classificação superior classificações? a 8?

©  2013  IST  © Instituto Superior Técnico

Selecção (σ)

•  Comparação de valores – operadores

σrating> 8 (Sailors) •  Condições Lógicas

– Operadores σsname = ‘lubber’ Λ rating > 8 (Sailors)

)(),(),( ¬∨∧ notorand

≥≤><≠= ,,,,,

11  

1/2/14  

7  

©  2013  IST  

Exemplos de tabelas

sid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

sid bid day22 101 10/10/9658 103 11/12/96

R1 S1

S2

©  2013  IST  

União

sid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.044 guppy 5 35.028 yuppy 9 35.0

S S1 2∪

•  Retorna uma tabela que contém todos os tuplos de R ou S •  R e S têm que ser compatíveis para união

•  Mesmo número de atributos •  Atributos têm os mesmos domínios

•  O esquema do resultado é idêntico ao de R •  Tuplos duplicados eliminados do resultado.

•  Porquê?

1/2/14  

8  

©  2013  IST  

Intersecção

sid sname rating age31 lubber 8 55.558 rusty 10 35.0

S S1 2∩

•  Retorna uma tabela que contém todos os tuplos que ocorrem em ambas, R e S

•  R e S têm que ser compatíveis para união •  O esquema do resultado é idêntico ao de R

©  2013  IST  

Diferença

sid sname rating age22 dustin 7 45.0

S S1 2−

•  Retorna uma tabela que contém todos os tuplos que ocorrem em R mas não em S

•  R e S têm que ser compatíveis para união •  O esquema do resultado é idêntico ao de R

1/2/14  

9  

©  2013  IST  

Produto Cartesiano

Sailors×Reserves

RXS: Retorna uma tabela cujo esquema contém todos os atributos de R seguidos de todos os atributos de S

©  2013  IST  © Instituto Superior Técnico

Observações sobre o Produto Cartesiano

•  O esquema do resultado é a concatenação dos esquemas –  para desambiguar atributos usa-se a relação original

como prefixo (Sailors.sid,..., Reserves.sid...))

•  O resultado é composto por todos os pares (de conjuntos de tuplos) possíveis –  Se R tem n registos e S tem m então (RXS) tem n*m –  no exemplo anterior, pode acontecer

Sailors.sid ≠ Reserves.sid

17  

1/2/14  

10  

©  2013  IST  

Renomeação

ρ(R(F), E) •  aceita uma expressão algébrica E e retorna uma

nova tabela R •  R contém os mesmos tuplos que o resultado de E •  R tem o mesmo esquema que E, excepto nos

atributos que constam na lista F •  F tem a forma: nome antigo -> nome novo ou

posição -> nome novo •  R e F são opcionais

©  2013  IST  

Exemplo

ρ(C(1−>sid1,5−>sid2),Sailors×Reserves)

1/2/14  

11  

©  2013  IST  

Sumário

•  Álgebra Relacional – Selecção – Projecção – União, intersecção, diferença – Renomeação – Produto cartesiano – Junção

•  Junção Natural

20  

©  2013  IST  

Junção

•  Uma das operações mais importantes e o modo mais comum de combinar dados de relações diferentes – Define-se à custa de um produto cartesiano

mas é interessante torná-la mais eficiente

21  

1/2/14  

12  

©  2013  IST  

Junção Condicional

R c S c R S = ×σ ( )

(sid) sname rating age (sid) bid day22 dustin 7 45.0 58 103 11/12/9631 lubber 8 55.5 58 103 11/12/96

Sailors Sailors.sid<Reserves.sidReserves

©  2013  IST  

Equi-Junção

sid sname rating age bid day22 dustin 7 45.0 101 10/10/9658 rusty 10 35.0 103 11/12/96

Sailors Sailors.sid=Reserves.sidReserves

•  A condição de junção contém apenas igualdades (eventualmente ligadas através de uma conjunção)

•  Está implicita uma projecção adicional em que um dos atributos envolvido na igualdade é removido Q: Quais os marinheiros que reservaram

barcos, que barcos e em que dias?

1/2/14  

13  

©  2013  IST  

Junção Natural

•  Equi-junção em que as igualdades estão especificadas sobre todos os atributos que têm o mesmo nome nas relações de entrada – O resultado garantidamente não tem dois

atributos com o mesmo nome

24  

Sailors Sailors.sid=Reserves.sidReserves==Sailors Reserves

©  2013  IST  

Junção Natural (⋈) •  Calcula o produto cartesiano de duas relações •  Efectua seleção por igualdade de colunas comuns •  Remove registos duplicados •  É associativa: (R ⋈ S) ⋈ T = R ⋈ (S ⋈ T)

Fórmula geral R ⋈ S = Πr U s (σR.A1 = S.A1 Λ R.A2 = S.A2 Λ … (R x S) )

em que: {A1, A2, …, An} = r ∩ s, r: conjunto de atributos de R s: conjunto de atributos de S

© Instituto Superior Técnico 25  

1/2/14  

14  

©  2013  IST  

Sumário

•  Álgebra Relacional – Operadores básicos – Formulação de interrogações – exemplos – Divisão

26  

©  2013  IST  

Exemplos de Tabelas

sid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

sid bid day22 101 10/10/9658 103 11/12/96

R1

S1

S2

Sailors(sid, sname, rating, age) Boats(bid, bname, color) Reserves(sid, bid, day)

sid: FK(Sailors) bid: FK(Boats)

1/2/14  

15  

©  2013  IST  

Exemplos (1)

Q1: Quais os nomes dos marinheiros que reservaram o barco 103?

Q2: Quais os nomes dos marinheiros que

reservaram um barco vermelho?

28  

πsname((σbid=103Reserves) Sailors)

πsname((σcolor='red'Boats) Reserves Sailors)

©  2013  IST  

Exemplos (2)

Q4: Quais os nomes dos marinheiros que reservaram pelo menos um barco?

Q5: Quais os nomes dos marinheiros que

reservaram um barco vermelho ou verde?

29  

πsname(Reserves Sailors)

ρ(tempBoats,(σcolor='red'Boats)∪(σcolor='green'Boats))

πsname(tempBoats Reserves Sailors)

1/2/14  

16  

©  2013  IST  

Exemplos (3)

Q6: Quais os nomes dos marinheiros que reservaram um barco vermelho e um barco verde?

30  

ρ(tempRed,((σcolor='red 'Boats) Reserves))ρ(tempGreen,((σcolor='green'Boats) Reserves))πsname((πsid (tempRed)∩πsid (TempGreen)) Sailors)

©  2013  IST  

Exemplos (4)

Q7: Quais os nomes dos marinheiros que reservaram pelo menos 2 barcos?

31  

ρ(Resvs,πsid,sname,bid(Sailors Reserves))ρ(Pairs,(1→sid1,2→sname1,3→bid1,4→sid2,5→sname2,6→bid2),Resvs×Resvs)πsname1σ(sid1=sid2)∧(bid1≠bid2)(Pairs)

1/2/14  

17  

©  2013  IST  

Exemplos (5)

Q8: Quais os sids dos marinheiros com idade superior a 20 que não reservaram um barco vermelho?

32  

πsid(σage>20Sailors)−

πsid((σcolor='red'Boats) Reserves)

©  2013  IST  

Exemplos (6)

Q: Qual o marinheiro mais velho?

33  

ρ(S,Sailors)πname(Sailors (πageSailors−πSailors.age(σSailors.age<S.ageSailors×S)))

1/2/14  

18  

©  2013  IST  

Divisão •  Expressa interrogações do tipo:

Quais os nomes dos marinheiros que reservaram todos os barcos?

Supondo A(x,y) e B(y), A/B retorna o conjunto de valores de x tal que para

cada valor de y em B, existe um tuplo (x,y) em A, ou

Para cada valor de x em A, consideramos o conjunto de valores de y que ocorrem em tuplos de A com esse valor de x. Se este conjunto contiver todos os valores de y em B, então o valor de x é devolvido.

©  2013  IST  

Divisão

sno pnos1 p1s1 p2s1 p3s1 p4s2 p1s2 p2s3 p2s4 p2s4 p4

pnop2

pnop2p4

pnop1p2p4

snos1s2s3s4

snos1s4

snos1

A

B1 B2

B3

A/B1 A/B2 A/B3

1/2/14  

19  

©  2013  IST  

Exemplo

Q9: Quais os nomes dos marinheiros que reservaram todos os barcos?

36  

ρ(Tempsids,(πsid,bidReserves) /(πbidBoats))πsname(Tempsids Sailors)

©  2013  IST  

Ainda a divisão

•  Qual a relação da divisão com o produto cartesiano?

•  Qual a relação da divisão no modelo relacional com a divisão aritmética?

37  

1/2/14  

20  

©  2013  IST  

Analogia com divisão aritmética

•  Para os inteiros A e B, – A/B é o maior inteiro Q tal que Q * B <= A

•  Para as tabelas A e B, – A/B é a maior tabela Q tal que Q X B ⊆ A

38  

©  2013  IST  

Definição divisão em termos dos operadores básicos

•  Dados: A(x,y) e B(y), queremos obter A/B •  A ideia é calcular todos os valores de x em

A que não se desqualificam •  Um valor de x é desqualificado se, ao

associá-lo a um valor y de B, o tuplo <x, y> ∉ A

– Valores de x desqualificados são dados por: πx((πx(A) X B) – A)

•  A/B = πx(A) - πx((πx(A) X B) – A)

39  

1/2/14  

21  

©  2013  IST  

Extensões à álgebra relacional

•  Projecção generalizada •  Funções de agregação (agreggation) •  Agrupamento (grouping) •  Junção externa (outer-join)

•  Silberchatz, 5ª edição

40  

©  2013  IST  

Exemplo •  BD de um banco:

– Account(account-number, branch-name, balance –  Loan(loan-number, branch-name, amount) – Borrower(customer-name, loan-number)

•  loan-number: FK(Loan) – Depositor(customer-name, account-number)

•  account-number: FK(Account) – Credit-info(customer-name, limit, credit-balance) – Employee(employee-name, street, city) – Works(employee-name, branch-name, salary)

•  employee-name: FK(Employee)

41  

1/2/14  

22  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Projecção Generalizada

Permite utilizar funções aritméticas na projecção Fórmula geral: ΠF1 , F2 , … , Fn (E)

– E é uma expressão algébrica – Fi é uma função aritmética

Exemplo: Πr.a + s.a , r.b – 0.1 * s.b (r ⋈ s)

42  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Exemplo com Projecção Generalizada

Quanto é que cada cliente pode gastar até ao seu limite de crédito? ρ(result(2 ->credit_available), Πcustomer_name, limit – credit_balance (credit_info) )

43  

credit_info   result  

1/2/14  

23  

©  2013  IST  

aumentos

IST ▪ DEI ▪ Bases de Dados

Outro exemplo de projecção generalizada

Como ficaria a tabela account se todos os saldos fossem aumentados 10%? ρ(aumentos(3->balance), Πaccount_number, branch_name, 1.1*balance (account) )

550 440 990 770 825 770 385

account

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Funções de Agregação

Recebem um conjunto de valores e devolvem um único valor como resultado •  avg •  min •  max •  sum •  count •  count-distinct

45  

1/2/14  

24  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Total  dos  salários  dos  funcionários  Gsum(salary)  (works)  

Exemplo com Agregação

16500

works

46  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Exemplo com agregação (2) Número de agências com funcionários assalariados

Gcount-distinct(branch_name) (works)

3

works

1/2/14  

25  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Agrupamento e agregação

ρ(result(2->sum_of_salary) ,

branch_nameGsum(salary) (works) )

48  

result

works

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

Agrupamento e agregação (2) Ρ(result(2->sum_salary, 3->max_salary),

branch_nameGsum(salary), max(salary) (works) )

49  

works

result

1/2/14  

26  

©  2013  IST  

Exemplo Quanto dinheiro tem cada cliente no banco? ρ(total(1->cliente, 2->dinheiro),

customer_nameGsum(balance) (depositor ⋈ account) )

IST ▪ DEI ▪ Bases de Dados

cliente Hayes Johnson Jones Lindsay Smith Turner

dinheiro 400 1400 750 700 700 350

total

©  2013  IST  

Exemplo Quanto dinheiro deve cada cliente ao banco? ρ(dívidas(1->cliente, 2->dívida),

customer_nameGsum(amount) (borrower ⋈ loan) )

IST ▪ DEI ▪ Bases de Dados

cliente Adams Curry Hayes Jackson Jones Smith Williams

dívida 1300 500 1500 1500 1000 2900 1000

dívidas

1/2/14  

27  

©  2013  IST  

Exemplo Qual a diferença entre o dinheiro que cada cliente tem e o que deve ao banco? ρ((2->quantia),Πcliente, dinheiro – dívida (total ⋈ dívidas))

IST ▪ DEI ▪ Bases de Dados

cliente Hayes Johnson Jones Lindsay Smith Turner

dinheiro 400 1400 750 700 700 350

cliente Adams Curry Hayes Jackson Jones Smith Williams

dívida 1300 500 1500 1500 1000 2900 1000

cliente Hayes Jones Smith

quantia -1100 -250 -2200

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

           

Junção Natural

53  

Junção  Natural:  employee  ⋈  works  

employee

works

“Perde  informação”!  

1/2/14  

28  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

         

Junção Externa Esquerda

54  

Junção  Esquerda  (le&  outer  join):  Employee                  works  

employee

works

©  2013  IST  

Junção  Direita  (right  outer  join):  Employee                works  

IST ▪ DEI ▪ Bases de Dados

         

Junção Externa Direita

55  

employee

works

1/2/14  

29  

©  2013  IST  IST ▪ DEI ▪ Bases de Dados

         

Junção Externa Total employee

works

56  

Junção  Total  (full  outer  join):  employee                        works  

©  2013  IST  

Sumário

•  Álgebra Relacional •  Próxima aula: Linguagem SQL

57