INSTITUTO DE EXATAS E TECNOLÓGICAS Curso de Ciência da Computação

BANCO DE DADOS aula 6 – álgebra relacional -

professor: Juliano Varella de Carvalho

5.1. Álgebra Relacional – relações de exemplo
conta nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 0008 saldo 1200 3000 4500 4000 1500 200 3750 1800 agencia nome_agencia NOH-1 SAL-1 POA-1 SAL-2 depositante nome_cliente João Pedro Francisco cliente nome João Pedro Francisco Maria Paulo José Ana Beatriz rua Getúlio Vargas Getúlio Vargas Olavo Bilac João Pessoa Cecília Meireles João Goulart Assis Brasil Floriano Peixoto cidade São Leopoldo São Leopoldo Novo Hamburgo Porto Alegre São Leopoldo Novo Hamburgo Porto alegre Novo Hamburgo devedor nome_cliente João Ana Helena emprestimo nome_agencia SAL-1 POA-1 NOH-1 num_emprestimo E-001 E-005 E-008 total 40000 25400 5420 num_emprestimo E-001 E-005 E-008 Maria Paulo José Ana numero_conta 0001 0002 0003 0004 0007 0006 0005 cidade_agencia Novo Hamburgo São Leopoldo Porto Alegre São Leopoldo saldo 260050 455580 1250369 125588

5.2. Álgebra Relacional – conceitos
• Linguagens de Consulta: linguagem por meio da qual os usuários obtêm informações do banco de dados. Podem ser: - procedurais: o usuário descreve uma seqüência de operações para obter o resultado desejado; Ex: pascal, pl-sql, transact-sql, etc. - não procedurais: o usuário descreve a informação desejada, sem instruir como esta será obtida. Ex: sql, QBE (Query by example), etc. • Álgebra Relacional: linguagem de consulta que consiste em um conjunto de operações, tendo como entrada uma ou duas relações e produzindo como resultado uma nova relação. Operações mais importantes: select; project; Union; namely natural join assignment; set difference; cartesian product; rename; set intersection; division;

- Operações primárias: operam sobre uma única relação: select, project, rename. - Operações binárias: operam sobre duas relações: union, set difference, cartesian product.

5.3. Álgebra Relacional – operações fundamentais
• Operação SELECT: seleciona as tuplas que satisfaçam um determinado predicado. A letra sigma representa a seleção, o predicado aparece subscrito a sigma, e a relação utilizada é colocada entre parênteses. Ex: σnome_agencia = “SAL-1”(conta) : seleciona as tuplas da relação conta cuja agência é igual a “SAL-1”.
nome_agencia numero_conta 0001 0002 saldo 1200 3000 SAL-1 SAL-1

O resultado da seleção é

- podem ser usados comparações do tipo: =,≠,≥,>,≤,< e os conectivos: ∧ (e) ∨ (ou) • Operação PROJECT: denotada pela letra grega pi (π), esta operação retorna a relação com somente os atributos selecionados, eliminando as linhas em duplicidade. Os atributos aparecem ao lado de pi, subscrito, e a relação aparece entre parênteses.

Ex: πnome_agência,saldo(agencia)
nome_agencia NOH-1 SAL-1 POA-1 SAL-2 cidade_agencia Novo Hamburgo São Leopoldo Porto Alegre São Leopoldo saldo 260050 455580 1250369 125588 agencia nome_agencia NOH-1 SAL-1 POA-1 SAL-2 saldo 260050 455580 1250369 125588

5.3. Álgebra Relacional – operações fundamentais
- Juntando operações SELECT E PROJECT: pode-se unir operações desde que elas tratem de relações. πnome_agencia,saldo(σnome_agencia = “SAL-1”(conta) )
conta nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 saldo 1200 3000 4500 4000 1500 200 3750 nome_agencia SAL-1 SAL-1 numero_conta 0001 0002 saldo 1200 3000 nome_agencia SAL-1 SAL-1 saldo 1200 3000

• Operação UNION: considere a seguinte consulta: selecionar todos os nomes de clientes que tenham um empréstimo, uma conta ou ambos. Deve-se utilizar as relações “depositante” e “devedor”.

πnome_cliente(devedor) ∪ πnome_cliente(depositante)
(depositante) (estão nas 2 relações) (devedor)

nome_cliente João Pedro Francisco Maria Paulo José Ana Helena

5.3. Álgebra Relacional – operações fundamentais
- Uma operação UNION entre duas relações “r” e “s” só é possível se: i. as relações “r” e “s” têm o mesmo número de atributos; ii. os domínios dos i-ésimo atributo de “r” e o i-ésimo atributo de “s” devem ser os mesmos para todo “i”. • Operação Diferença entre conjuntos: sendo “r” e “s” duas relações, “r-s” tem como resultado o conjunto de tuplas que estão na relação “r”, mas não encontram-se na relação “s”. - Ex: selecionar todos os clientes que tem conta mas não tem empréstimo. πnome_cliente(depositante) - πnome_cliente(devedor)

nome_cliente João Pedro

Linhas eliminadas

Clientes com contas Mas sem empréstimos

Francisco Maria Paulo José Ana

5.4. Álgebra Relacional – operações adicionais
• Operação de Interseção de conjuntos: captura todas as tuplas que encontram-se em uma relação “r”, e que também encontram-se na relação “s”. - Ex: Selecionar os nomes de clientes que possuem uma conta e um empréstimo.

πnome_cliente(devedor) ∩ πnome_cliente(depositante)
depositante nome_cliente João Pedro Francisco Maria Paulo José Ana numero_conta 0001 0002 0003 0004 0007 0006 0005 nome_client e João Ana nome_client e João Ana Helena E-001 E-005 E-008 devedor num_emprestimo

r ∩ s = r – (r - s)

r r-s
r – (r - s)

s

5.3. Álgebra Relacional – operações fundamentais
• Operação Produto Cartesiano: permite combinar informações de duas relações quaisquer. Representado por “r x s”. Ex: Qual o produto cartesiano entre as relações devedor e emprestimo. (devedor)x(emprestimo) = (nome_cliente, num_emprestimo, nome_agencia, num_emprestimo, total) Obs: Para evitar o problema da duplicidade de nomes de atributos insere-se o nome da relação antes do atributo: total) (nome_cliente, devedor.num_emprestimo, nome_agencia, emprestimo.num_emprestimo,

- Quantas e quais tuplas aparecerão na relação (devedor x emprestimo) ? Se a relação (devedor) possui “n” tuplas e a relação empréstimo tem “m” tuplas, então o produto cartesiano (devedor x empréstimo) tem n*m tuplas.
devedor x emprestimo nome_cliente João João João Ana Ana Ana Helena Helena Helena devedor.num_emprestimo E-001 E-001 E-001 E-005 E-005 E-005 E-008 E-008 E-008 nome_agencia SAL-1 POA-1 NOH-1 SAL-1 POA-1 NOH-1 SAL-1 POA-1 NOH-1 emprestimo.num_emprestimo E-001 E-005 E-008 E-001 E-005 E-008 E-001 E-005 E-008 total 40000 25400 5420 40000 25400 5420 40000 25400 5420

5.3. Álgebra Relacional – operações fundamentais
- Agora, deve-se encontrar todos os nomes de clientes que tenham um empréstimo na agência “SAL-1”, através da operação:
Apenas João fez empréstimo em SAL-1.
nome_client e João Ana Helena

σnome_agência = “SAL-1”(devedor x emprestimo)
devedor.num_emprestimo E-001 E-005 E-008 nome_agencia SAL-1 SAL-1 SAL-1 emprestimo.núm_emprestimo E-001 E-001 E-001 total 40000 40000 40000

OPS !!!
Obs: Como a operação produto cartesiano associa todas as tuplas de empréstimos a todas as tuplas de devedor, então existem empréstimos que estão relacionados erroneamente a alguns clientes. Para contornar este problema, devemos exigir que o atributo devedor.num_emprestimo seja igual ao atributo emprestimo.num_emprestimo. - Assim temos: σdevedor.num_emprestimo = emprestimo.num_emprestimo (σnome_agência = “SAL-1” (devedor x empréstimo))
nome_client e João devedor.num_emprestimo E-001 nome_agencia SAL-1 emprestimo.num_emprestimo E-001 total 40000

πnome_cliente(σdevedor.num_emprestimo = emprestimo.num_emprestimo (σnome_agência = “SAL-1” (devedor x empréstimo)))
nome_client e João

5.3. Álgebra Relacional – operações fundamentais
• Operação Rename: representado pela letra grega rho (ρ), permite dar um nome a uma determinada expressão. Assim, a expressão em álgebra relacional E abaixo tem por resultado uma expressão sob o nome x.
nome_cliente João Pedro Francisco Maria Paulo José rua_cliente Getúlio Vargas Getúlio Vargas Olavo Bilac João Pessoa Cecília Meireles João Goulart Assis Brasil Floriano Peixoto

cliente cidade_cliente São Leopoldo São Leopoldo Novo Hamburgo Porto Alegre São Leopoldo Novo Hamburgo Porto alegre Novo Hamburgo

ρx(E)
Ex: Desejamos o nome dos clientes que moram na mesma cidade de Francisco. Primeiro, é necessário descobrir em qual cidade Francisco mora, fazendo uma seleção: σnome_cliente = “Francisco”(cliente), E depois uma projeção: πcidade_cliente(σnome_cliente = “Francisco”(cliente)) Para encontrar os outros clientes, é necessário fazer uma varredura na relação cliente, comparando o atributo cidade_cliente com o atributo da relação obtida após a projeção anterior, ficando assim: πnome_cliente(σcliente.cidade_cliente = cid_francisco.cidade_cliente (cliente x
nome_cliente João Pedro Francisco Maria Paulo José Ana Beatriz

Ana Beatriz

nome_cliente Francisco

rua_cliente Olavo Bilac

cidade_cliente Novo Hamburgo

cidade_cliente Novo Hamburgo

rua_cliente Getúlio Vargas Getúlio Vargas Olavo Bilac João Pessoa Cecília Meireles João Goulart Assis Brasil Floriano Peixoto

cidade_cliente São Leopoldo São Leopoldo Novo Hamburgo Porto Alegre São Leopoldo Novo Hamburgo Porto alegre Novo Hamburgo

cidade_cliente Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo Novo Hamburgo

nome_cliente Francisco José Beatriz

ρcid_francisco(π

cidade_cliente

(σnome_cliente = “Francisco”(cliente)))))

5.4. Álgebra Relacional – operações adicionais
• Operação de Junção Natural: a junção natural ou natural join é uma operação binária que permite combinar seleções e um produto cartesiano em uma só operação. - Ex: encontrar todos os nomes de clientes que tenham um empréstimo no banco, bem como o total emprestado. Utilizando apenas as operações fundamentais, poderia ser resolvido assim:

π

nome_cliente, emprestimo.num_emprestimo, total(

σ

devedor.num_emprestimo = emprestimo.num_emprestimo

(devedor x emprestimo))

No entanto, é possível simplificar esta operação utilizando o símbolo da junção natural: A junção natural forma um produto cartesiano das duas relações, e já executa uma seleção, fazendo a equivalência dos atributos que aparecem em ambos os esquemas da relação, e por último, remove os atributos em duplicidade.

π

nome_cliente, num_emprestimo total(devedor

empréstimo)

nome_client e João Ana Helena

num_emprestimo E-001 E-005 E-008

total 40000 25400 5420

5.4. Álgebra Relacional – operações adicionais
Formalizando: Sendo R e S dois esquemas de relação, ou seja, uma lista de atributos e r(R) e s(S) duas relações, a junção natural de r e s (r s ) é uma relação formalmente definida assim:

r

s=

π

R∪S(

σr.A1=s.A1∧ r.A2=s.A2∧... ∧r.An=s.An(r x s))

Em que R ∩ S = {A1,A2,...,An} Propriedades: - a junção natural é associativa, portanto: cliente conta depositante = (cliente conta) depositante = cliente s=rxs (conta depositante)

- se r(R) e s(S) são relações sem atributos comuns, então r

5.4. Álgebra Relacional – operações adicionais
• Operação de Divisão: a divisão de duas relações R ÷ S, onde os atributos de S estão contidos nos atributos de R, A(R) ⊆ A(S), resulta na relação T, onde A(T) = { A(R) – A(S) }, onde para cada tupla t que aparece no resultado, os valores de t devem aparecer em R, combinando com cada tupla de S. Esta operação é utilizada nas consultas em que se emprega a frase “para todos”;

S A1 a1 a2 a3

R A1 a1 a2 a3 a4 a1 a3 a2 R A2 b1 b1 b1 b1 b2 b2 b3 b3 b3 b4 b4 b4

÷

S

a3 a4 a1 a2 a3

A2 b1 b4

5.4. Álgebra Relacional – operações adicionais
- Ex: encontrar todos os clientes que tenham conta em todas as agências localizadas em São Leopoldo.
conta nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 0008 saldo 1200 3000 4500 4000 1500 200 3750 1800 agencia nome_agencia NOH-1 SAL-1 POA-1 SAL-2 cidade_agencia Novo Hamburgo São Leopoldo Porto Alegre São Leopoldo saldo 260050 455580 1250369 125588 depositante nome_cliente João Pedro Francisco Maria Paulo José Ana João numero_conta 0001 0002 0003 0004 0007 0006 0005 0008

π

nome_agencia(σcidade_agencia = “São Leopoldo”(agencia))
nome_agência SAL-1 SAL-2 cidade_agência São Leopoldo São Leopoldo saldo 455580 125588 nome_agência SAL-1 SAL-2

π

nome_cliente, nome_agencia(depositante
nome_cliente João Pedro Francisco Maria Paulo José Ana João

conta)

nome_agencia SAL-1 SAL-1 NOH-1 POA-1 SAL-2 NOH-1 POA-1 SAL-2

π π

nome_cliente, nome_agencia(depositante

conta)

÷

nome_agencia(σcidade_agencia = “São Leopoldo”(agencia))

nome_cliente João

5.4. Álgebra Relacional – operações adicionais
• Operação de Atribuição (Assignment Operation): trabalha de maneira similar à atribuição das linguagens de programação. Representada por ← - Atribui-se a relação resultante de uma operação à direita de ←, a uma variável temporária, à esquerda, a qual poderá ser utilizada em relações subseqüentes. - Ex: operação de divisão anterior poderia ser descrita como: temp1 ← temp2 ←

πnome_agencia(σcidade_agencia = “São Leopoldo”(agencia)) πnome_cliente, nome_agencia(depositante
conta)

resultado ← temp2 ÷ temp1

5.5. Álgebra Relacional – operações estendidas
• Projeção generalizada: estendem as projeções, permitindo que operações aritméticas sejam usadas nas projeções.

π

F1, F2, ..., Fn

(E)

Onde E é uma expressão em álgebra relacional e cada Fi são expressões aritméticas envolvendo constantes e atributos no esquema de E. - Ex: Dada a relação crédito, descobrir quanto cada cliente ainda pode utilizar do seu crédito pessoal.

π
nome_cliente José Ana Pedro Maria Flávia limite_credito 4000 3200 1200 5800 3600

nome_cliente, limite_credito – credito_usado

(credito)

credito credito_usado 2200 100 1500 5000 3600 nome_cliente José Ana Pedro Maria Flávia limite_credito - credito_usado 1800 3100 -300 800 0

5.5. Álgebra Relacional – operações estendidas
• Junção externa (outer join): extensão da operação de join para resolver informações omitidas. - Ex: Dadas as relações a seguir com os seguintes esquemas: empregado(nome_empregado, rua, cidade) trabalhador_integral(nome_empregado, nome_agencia, salario)
empregado nome_empregado José Ana Pedro Maria rua João Goulart Assis Brasil Getúlio Vargas João Pessoa cidade Novo Hamburgo Porto Alegre São Leopoldo Porto Alegre nome_empregado José Ana Flávia Maria trabalhador_integral nome_agencia NOH-1 POA-1 SAL-1 POA-1 salario 5000 4800 3200 6500

Descobrir a rua, cidade, agência e salário de todos os empregados. Alternativa natural é fazer uma seleção com uma junção natural:

π

nome_empregado, rua, cidade, nome_agencia, salario(empregado

trabalhador_integral)
salario 5000 4800 6500

nome_empregado José Ana Maria

rua João Goulart Assis Brasil João Pessoa

cidade Novo Hamburgo Porto Alegre Porto Alegre

nome_agencia NOH-1 POA-1 POA-1

problema: os dados de rua e cidade do empregado Pedro foram perdidos, bem como os dados de agência e salário foram perdidos da empregada Flávia. solução: utilizar as operações de junções externas para evitar perda de informações, que podem ser:

5.5. Álgebra Relacional – operações estendidas
Junção externa a esquerda
empregado
nome_empregado José Ana Maria Pedro

trabalhador_integral
rua João Goulart Assis Brasil João Pessoa Getúlio Vargas cidade Novo Hamburgo Porto Alegre Porto Alegre São Leopoldo nome_agencia NOH-1 POA-1 POA-1 Nulo salario 5000 4800 6500 Nulo

A junção à esquerda pega todas as tuplas da relação à esquerda que não encontraram par entre as tuplas da relação à direita, preenchendo com “nulo” os valores não encontrados. Estas tuplas são adicionadas ao resultado da junção natural.

Junção externa a direita
empregado
nome_empregado José Ana Maria Flávia

trabalhador_integral
rua João Goulart Assis Brasil João Pessoa Nulo cidade Novo Hamburgo Porto Alegre Porto Alegre Nulo nome_agencia NOH-1 POA-1 POA-1 SAL-1 salario 5000 4800 6500 3200

A junção à direita pega todas as tuplas da relação à direita que não encontraram par entre as tuplas da relação à esquerda, preenchendo com “nulo” os valores não encontrados. Estas tuplas são adicionadas ao resultado da junção natural.

Junção externa total
empregado
nome_empregado José Ana Maria Pedro Flávia

trabalhador_integral
rua João Goulart Assis Brasil João Pessoa Getúlio Vargas Nulo cidade Novo Hamburgo Porto Alegre Porto Alegre São Leopoldo Nulo nome_agencia NOH-1 POA-1 POA-1 Nulo SAL-1 salario 5000 4800 6500 Nulo 3200

A junção externa total faz ambas operações acima.

5.5. Álgebra Relacional – operações estendidas
• Funções agregadas: são aquelas que, quando aplicadas, tomam uma coleção de valores e retornam um valor simples como resultado.
trabalhador_integral

- função sum: descobrir a soma total dos salários de todos os empregados de tempo integral. sum
salario

nome_empregado José Ana

nome_agencia NOH-1 POA-1 SAL-1 POA-1

salario 5000 4800 3200 6500

(trabalhador_integral)

sum salario 14505

Flávia Maria

-função count: descobrir o número de agências existentes na tabela de tempo integral. count
nome_agencia

(trabalhador_integral)

count nome_agencia 4

count-distinct

nome_agencia

(trabalhador_integral)

count-distinct nome_agencia 3

- função avg: descobrir a média dos salários. avg
salario

(trabalhador_integral)

avg salario 3626.25

- função min: descobrir o menor salário. min
salario

min salario 3200

(trabalhador_integral)

- função max: descobrir o maior salário. max
salario

max salario 6500

(trabalhador_integral)

5.5. Álgebra Relacional – operações estendidas
• Em alguns casos, aplicam-se as funções agregadas não somente a um único conjunto de tuplas, mas a diversos grupos, onde cada grupo é um conjunto de tuplas. Isto é realizado através da operação chamada agrupamento. Ex: descobrir a soma total dos salários dos empregados de tempo integral, por agência. solução: particionar a relação trabalhador_integral em grupos, com base na agência as quais os empregados fazem parte e, por fim aplicar a função agregada a cada um destes grupos.
nome_empregado José Ana Flávia Maria Fernando Beatriz Bruno nome_agencia NOH-1 POA-1 SAL-1 POA-1 POA-1 SAL-1 NOH-1 salario 5000 4800 3200 6500 4000 1000 3000

trabalhador_integral

nome_agencia

g sum

salario

(trabalhador_integral)

nome_agencia

g sum

salario

min

salario

(trabalhador_integral)
sum salario 8000 15300 4200 min salario 3000 4000 1000

nome_agencia NOH-1 POA-1 SAL-1

sum salario 8000 15300 4200

nome_agencia NOH-1 POA-1 SAL-1

- Formalmente:

G1, G2, ..., Gn

g F1A1, F2A2, FmAm (E), onde:

E: é uma expressão qualquer em álgebra relacional; Cada Gi constitui um atributo que será agrupado; Cada Fi é uma função agregada; Cada Ai é o nome de um abtributo;

5.5. Álgebra Relacional – modificações no BD
• exclusão: permite a exclusão de tuplas inteiras de uma relação. É expressa por: r ← r – E, onde: r: é uma relação; E: é uma consulta em álgebra relacional Ex: excluir todos as contas do cliente João. conta ← conta -

σ

nome_cliente = “João”

(conta)

Ex: excluir todas as contas das agências localizadas em São Leopoldo. r1 ← r2 ←

σ π

cidade_agencia = “São Leopoldo”

(conta (r1)

agencia)

nome_agencia, numero_conta, saldo

conta ← conta – r2

5.5. Álgebra Relacional – modificações no BD
• inserção: permite a inserção de um conjunto de tuplas em uma relação. É expressa por: r ← r ∪ E, onde r é uma relação e E: é uma consulta em álgebra relacional Obs: i. os valores dos atributos das tuplas a inserir devem ser membros do domínio dos atributos; ii. As tuplas inseridas devem ter o mesmo grau da relação. Ex: inserir que o cliente Saulo tem 3800 na conta 010 da agência NOH-1. conta ← conta ∪ {(“NOH-1”, 010, 3800)} depositante ← depositante ∪ {(“Saulo”, 010)} Ex: inserir uma nova caderneta de poupança de 100 reais para todos os clientes da agência SAL-1, sendo o número do empréstimo o mesmo número usado para esta conta poupança. r1 ← r2 ←
devedor nome_client e João Ana Helena emprestimo nome_agencia SAL-1 POA-1 NOH-1 num_emprestim o E-001 E-005 E-008 total 40000 25400 5420 nome_agencia SAL-1 SAL-1 NOH-1 POA-1 POA-1 NOH-1 SAL-2 SAL-2 numero_conta 0001 0002 0003 0004 0005 0006 0007 0008 depositante nome_cliente João Pedro Francisco Maria Paulo José Ana

conta saldo 1200 3000 4500 4000 1500 200 3750 1800

numero_conta 0001 0002 0003 0004 0007 0006 0005

num_emprestimo E-001 E-005 E-008

σ cidade_agencia = “SAL-1” (devedor π nome_agencia, num_emprestimo (r1)

emprestimo)

conta ← conta ∪ (r2 x {(100)}) depositante ← depositante ∪

π nome_cliente, num_emprestimo (r1)

5.5. Álgebra Relacional – modificações no BD
• atualização: permite a mudança de uma tupla sem mudar todos os valores dela. Para isso usa-se o operador de projeção generalizada: r← F1, F2, ..., Fn (r), em que cada Fi é o i-ésimo atributo de “r” se o i-ésimo atributo não for atualizado, ou, se o i-ésimo atributo for atualizado, então cada Fi é uma expressão envolvendo somente constantes e os atributos de “r”, que dá novos valores a esses atributos. Ex: A taxa de juros aumentou e o saldo de todas as contas aumentou 5%. conta ←

π

π

nome_agencia, numero_conta, saldo ← saldo * 1.05

(conta)

Ex: As contas com saldo acima de 2500 recebem 10%, e os demais 5%.

conta ←

π

nome_agencia, numero_conta, saldo ← saldo * 1.1

saldo > 2500

(conta)) ∪

π

nome_agencia, numero_conta, saldo ← saldo * 1.05

saldo <= 2500

(conta))

Sign up to vote on this title
UsefulNot useful