Download - Bases de Dadosweb.ist.utl.pt/diogo.ferreira//bd/2008-2009/aula05.pdf• exemplo: nomes dos clientes com conta mas sem empréstimo Π customer_name (depositor) –Π customer_name (borrower)

Transcript

1

Bases de Dados

Álgebra Relacional

2IST ▪ DEI ▪ Bases de Dados

Selecção (σσσσ)

� Seleccionar os tuplos que satisfazem uma condição

• exemplo: empréstimos da agência de Perryridge

σbranch_name = “Perryridge” (loan)

2

3IST ▪ DEI ▪ Bases de Dados

Outros exemplos de selecção

� Empréstimos superiores a 1200

• operadores

σamount > 1200 (loan)

� Combinação de predicados

• operadores

σbranch_name = “Perryridge” Λ amount > 1200 (loan)

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

≥≤><≠= ,,,,,

4IST ▪ DEI ▪ Bases de Dados

Projecção (Π)

� Listar apenas alguns atributos da relação

• os restantes ficam de fora

• os tuplos duplicados são eliminados

• exemplo: números e quantias dos empréstimos

Πloan_number, amount (loan)

3

5IST ▪ DEI ▪ Bases de Dados

Composição de operações

� O resultado de uma operação relacional é uma relação

• resultado pode ser passado como argumento

• exemplo: nomes dos clientes que vivem na cidade de Harrison

Πcustomer_name (σcustomer_city = “Harrison” (customer))

� As operações de álgebra relacional podem ser compostas para formar expressões

6IST ▪ DEI ▪ Bases de Dados

Composição de operações

Πcustomer_name (σcustomer_city = “Harrison” (customer))

4

7IST ▪ DEI ▪ Bases de Dados

União (U)

� Juntar os tuplos de duas relações

• exemplo: nomes dos clientes que têm conta ouempréstimo (ou ambos)

Πcustomer_name (depositor) U

Πcustomer_name (borrower)

• porque é que só dá

10 linhas em vez de

7 + 8 = 15 ?

8IST ▪ DEI ▪ Bases de Dados

Diferença (–)

� Encontrar os tuplos que estão numa relação mas não em outra

• exemplo: nomes dos clientes com conta mas sem empréstimo

Πcustomer_name (depositor) – Πcustomer_name (borrower)

5

9IST ▪ DEI ▪ Bases de Dados

Aplicação da união e diferença

� As operações de união (r U s) e diferença (r – s) só podem ser aplicadas

• se as relações r e s tiverem o mesmo número de atributos

• se o domínio de cada atributo for igual nas duas relações

� r e s podem ser relações ou resultados de expressões

10IST ▪ DEI ▪ Bases de Dados

Produto cartesiano (x)

� Combinar a informação de duas relações (r x s)

• exemplo: borrower x loan

… … … … …

6

11IST ▪ DEI ▪ Bases de Dados

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

(customer_name, borrower.loan_number, loan.loan_number, branch_name, amount)

� No resultado aparecem todos os pares possíveis

• se r tem n tuplos e s tem m então (s x r) tem n*m

• pode acontecert[borrower.loan_number] ≠ t[loan.loan_number]

12IST ▪ DEI ▪ Bases de Dados

Exemplos de produto cartesiano

� Nomes dos clientes com empréstimo na agência de Perryridge

7

13IST ▪ DEI ▪ Bases de Dados

Exemplos de produto cartesiano

� Nomes dos clientes com empréstimo na agência de Perryridge – passo 1

σbranch_name = “Perryridge” (borrower x loan)

14IST ▪ DEI ▪ Bases de Dados

Exemplos de produto cartesiano

� Nomes dos clientes com empréstimo na agência de Perryridge – passo 2

σborrower.loan_number = loan.loan_number (

σbranch_name = “Perryridge” (borrower x loan) )

8

15IST ▪ DEI ▪ Bases de Dados

Exemplos de produto cartesiano

� Nomes dos clientes com empréstimo na agência de Perryridge – passo 3

Πcustomer_name (

σborrower.loan_number = loan.loan_number (

σbranch_name = “Perryridge” (borrower x loan) ) )

16IST ▪ DEI ▪ Bases de Dados

Renomeação (ρ)

� Renomear relações e resultados de expressões

• fórmula geral: ρx(A1, A2,… An)(E)

• exemplo: maior saldo em conta▫ obter todos os saldos que não são o maior

▫ subtrair esses saldos ao conjunto de todos os saldos

9

17IST ▪ DEI ▪ Bases de Dados

Renomeação (ρ)

� Maior saldo em conta

18IST ▪ DEI ▪ Bases de Dados

Exemplo de renomeação

� Maior saldo em conta

• passo 1 – obter os saldos que não são os maiores

Πaccount.balance (

σaccount.balance < d.balance (

account x ρd (account) ) )

10

19IST ▪ DEI ▪ Bases de Dados

Exemplo de renomeação

� Maior saldo em conta

• passo 2 – subtrair esses saldos ao conjunto de todos os saldos

Πbalance (account) –

Πaccount.balance (

σaccount.balance < d.balance (

account x ρd (account) ) )

20IST ▪ DEI ▪ Bases de Dados

Outro exemplo de renomeação

� Encontrar o nome de todos os clientes que vivem na mesma rua e cidade que o cliente chamado Smith

11

21IST ▪ DEI ▪ Bases de Dados

Outro exemplo de renomeação

� Encontrar o nome de todos os clientes que vivem na mesma rua e cidade que o cliente chamado Smith

• passo 1 – obter a rua e cidade em causa

Πcustomer_street, customer_city (

σcustomer_name = “Smith” (customer) )

22IST ▪ DEI ▪ Bases de Dados

Outro exemplo de renomeação

� Encontrar o nome de todos os clientes que vivem na mesma rua e cidade que o cliente chamado Smith

• passo 2 – renomear para usar em seguida

ρsmith_addr(street,city) (

Πcustomer_street, customer_city (σcustomer_name = “Smith” (customer) ) )

12

23IST ▪ DEI ▪ Bases de Dados

Outro exemplo de renomeação

� Encontrar o nome de todos os clientes que vivem na mesma rua e cidade que o cliente chamado Smith

• passo 3 – combinar e seleccionar

σcustomer.customer_street = smith_addr.street Λ

customer.customer_city = smith_addr.city (

customer x ρsmith_addr(street,city) (

Πcustomer_street, customer_city (σcustomer_name = “Smith” (customer) ) ) )

24IST ▪ DEI ▪ Bases de Dados

Outro exemplo de renomeação

� Encontrar o nome de todos os clientes que vivem na mesma rua e cidade que o cliente chamado Smith

• passo 4 – projectar para obter o resultado final

Πcustomer.customer_name (

σcustomer.customer_street = smith_addr.street Λ

customer.customer_city = smith_addr.city (

customer x ρsmith_addr(street,city) (

Πcustomer_street, customer_city (σcustomer_name = “Smith” (customer) ) ) ) )

13

25IST ▪ DEI ▪ Bases de Dados

Resumo: operadores básicos

� Operações fundamentais da álgebra relacional

• σp (E1) em que p é um predicado sobre os atributos de E1

• ∏s(E1) em que S é uma lista de atributos de E1

• E1 U E2

• E1 – E2

• E1 x E2

• ρ x (E1) em que x é o novo nome para E1

Bases de Dados

Álgebra Relacional – operações adicionais

14

27IST ▪ DEI ▪ Bases de Dados

Intersecção (∩)

� Encontrar os tuplos comuns a duas relações

• (r ∩ s) é uma operação equivalente a (r – (r – s))

• sujeita aos mesmo requisitos que a diferença▫ aridade

▫ compatibilidade

• exemplo: nomes dos clientes que têm conta eempréstimo

Πcustomer_name (borrower) ∩

Πcustomer_name (depositor)

28IST ▪ DEI ▪ Bases de Dados

Junção Natural (⋈⋈⋈⋈)

� Simplificar expressões típicas de produto e selecção

• calcula o produto cartesiano de duas relações

• efectua selecção por igualdade de atributos comuns

• remove tuplos duplicados

� Fórmula geral

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

em que: R ∩ S = {A1, A2, …, An}

15

29IST ▪ DEI ▪ Bases de Dados

Exemplo de junção natural

� Nomes dos clientes com empréstimo, número do respectivo empréstimo e quantia

• sem recorrer à junção natural

Πcustomer_name, loan_number, amount (

σborrower.loan_number = loan.loan_number (

borrower x loan) )

30IST ▪ DEI ▪ Bases de Dados

Exemplo de junção natural

� Nomes dos clientes com empréstimo, número do respectivo empréstimo e quantia

Πcustomer_name, loan_number, amount (borrower ⋈ loan)

16

31IST ▪ DEI ▪ Bases de Dados

Outros exemplos de junção natural

� Nomes de todas as agências com clientes que possuem conta e vivem na cidade de Harrison

Πbranch_name (

σcustomer_city = “Harrison” (

customer ⋈ account ⋈ depositor ) )

� A junção natural é associativa

• customer ⋈ (account ⋈ depositor)

• (customer ⋈ account) ⋈ depositor

32IST ▪ DEI ▪ Bases de Dados

Outros exemplos de junção natural

� Nomes de todos os clientes com empréstimo e conta no banco

Πcustomer_name (borrower ⋈ depositor)

� O mesmo resultado pode ser obtido por expressões diferentes

Πcustomer_name (borrower) ∩ Πcustomer_name (depositor)

17

33IST ▪ DEI ▪ Bases de Dados

Casos particulares de junção natural

� Se r(R) e s(S) são tais que R ∩ S = Ø

• então: r ⋈ s = r x s

� Diferentes condições de selecção (junção-θ)

r ⋈θ s = σθ (r x s)

• exemplo

account ⋈account.balance < d.balance ρd (account)