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)
Top Related