Você está na página 1de 70

Disciplina:

Técnicas de
Implementação de
Banco de Dados

Aula 1
Prof. Marcondes Alexandre, MsC
Agenda
- Unidade I – Álgebra Relacional e processamento de consulta

- Definição e comandos da álgebra Relacional.


- Conceitos Básicos e Representação de Consultas.
- Implementação de Operadores Relacionais.
Reflexões
• Quais os componentes básicos de um
banco de dados representado no
modelo relacional?
• Qual o papel da linguagem SQL em
relação aos bancos de dados
relacionais?
Linguagens de Consulta
• Conforme visto anteriormente, as linguagens de consulta possibilitam aos
usuários requisitar informações do banco de dados.

• Essas linguagens podem ser classificadas em Procedural ou


Declarativa.

• Pela grande diferença entre modelos de dados, foram desenvolvidas


linguagens de consulta puras, as quais são independente do modelo de
dados utilizado e baseam-se em modelos matemáticos.

• Dentre as principais linguagens puras, a Álgebra Relacional é uma das mais


importante, pois seus fundamentos são usados pelos SGDBs no
processamento de consultas e em técnicas de otimização.
Entenda porque a Álgebra Relacional é considerada uma linguagem formal

LINGUAGENS FORMAIS
Álgebra Relacional
• Linguagem de consulta procedural que contém um conjunto de
operações que permitem manipular o banco de dados.
• Linguagem baseada na representação de expressões algébricas.
• Assim como na álgebra, é possível combinar as operações,
formando expressões mais complexas.

• As operadores da Álgebra Relacional estão divididas em dois


grupos: Fundamentais e Outras Operações.
Álgebra Relacional (cont.)
• A Álgebra Relacional é importante por
vários aspectos:

• Provê um fundamento formal para


operações do modelo relacional.

• É utilizada como base para


implementar e otimizar consultas em
um SGBD.

• Suas operações são a base para outras


linguagens de consulta, como a
linguagem SQL.
Álgebra Relacional (cont.)
• É importante lembrar que o modelo
relacional é baseado na teoria dos
conjuntos.

• As operações que envolvem um ou


mais conjuntos sempre retornam
como resultados novos conjuntos.

• Como as relações são tratadas como


conjuntos de tuplas, as operações usam
uma ou mais relações como entrada e
produzem uma nova relação como
resultado.
Conheça as operações fundamentais da Álgebra Relacional

OPERAÇÕES FUNDAMENTAIS
Operação Seleção
• Na relação empréstimo, quais são os empréstimos (tuplas) cuja cidade da agência é Crato?

CodigoEmprestimo CidadeAgencia ValorEmprestimo


11 Fortaleza 900
14 Sobral 1500
15 Crato 1500
16 Crato 300
17 Sobral 1000
23 Iguatu 2000
93 Aracati 500
Operação Seleção (cont.)
• sCidadeAgencia = “Crato” (emprestimo)
CodigoEmprestimo CidadeAgencia ValorEmprestimo
15 Crato 1500
16 Crato 300
Operação Seleção (cont.)
• Notação: sp(r)
• p é chamado o predicado de seleção, definido como:
• sp(r) = {t | t Î r e p(t)}
• O predicado é uma fórmula em cálculo proposicional, que
permite a conexão de vários termos por: Ù (and), Ú (or) e ¬
(not).
• Verificação do predicado através da Tabela Verdade.
• O formato de cada termo é:
• <atributo> op <atributo> ou <constante>.
• onde op pode ser: =, ¹, >, ³, <, £.
• Equivalente a cláusula WHERE das consultas SQL.
Operação Seleção (cont.)
• Na relação emprestimo, quais são os empréstimos cuja cidade da
agência é Crato e o valor maior que 1000?
CodigoEmprestimo CidadeAgencia ValorEmprestimo
11 Fortaleza 900
14 Sobral 1500
15 Crato 1500
16 Crato 300
17 Sobral 1000
23 Iguatu 2000
93 Aracati 500
Operação Seleção (cont.)
• sCidadeAgencia = “Crato” ^ ValorEmprestimo > 1000(emprestimo)
CodigoEmprestimo CidadeAgencia ValorEmprestimo
15 Crato 1500
Operação Projeção
• Na relação empréstimo, liste todos os códigos dos empréstimos, com seus respectivos
valores.
CodigoEmprestimo CidadeAgencia ValorEmprestimo
11 Fortaleza 900
14 Sobral 1500
15 Crato 1500
16 Crato 300
17 Sobral 1000
23 Iguatu 2000
93 Aracati 500
Operação Projeção (cont.)
• ÕCodigoEmprestimo, ValorEmprestimo (emprestimo)

CodigoEmprestimo ValorEmprestimo
11 900
14 1500
15 1500
16 300
17 1000
23 2000
93 500
Operação Projeção (cont.)
• Notação: Õa1, a2, ..., ak (r)
• a1, a2, ..., ak são os nomes dos atributos.
• r é o nome da relação.
• O resultado é definido como uma relação de k colunas listadas,
excluindo os atributos não citados.
• Linhas duplicadas são removidas do resultado, pois uma relação é
um conjunto e, por isso, não existe repetição dos elementos.
• Equivale a cláusula SELECT da consulta SQL.
Como combinar duas ou mais
operações da Álgebra Relacional?
Combinação de Operações Algébricas
• Observe que, nos exemplos vistos até agora, todos os resultados das
operações relacionais apresentadas geraram uma nova relação.
• Uma expressão na Álgebra Relacional SEMPRE retorna uma
nova relação, independente da quantidade de tuplas que essa
nova relação possui.

• Assim, é possível montar consultas mais complexas, através da


união de diferentes operações da Álgebra Relacional.
Combinação de Operações Algébricas (cont.)

• Exemplo:

ÕCodigoEmprestimo, ValorEmprestimo (sCidadeAgencia = “Crato” (emprestimo))

• Nas operações da Álgebra Relacional, a ordem das operações


influencia no resultado final?
Operação União
• A partir das relações ClienteCC e ClienteEmp, liste todos os nomes dos clientes do banco.

NomeCliente NumeroConta NomeCliente NumeroEmprestimo


Fulano 102 John 16
Sicrano 101 Paul 93
Sicrano 201 Fulano 15
Beltrano 217 Mary 14
Altrano 222 Beltrano 17
Socrano 215 Socrano 11
Delano 305 Socrano 23
Bill 17
Operação União (cont.)
NomeCliente
• ÕNomeCliente (ClienteCC) È ÕNomeCliente (ClienteEmp) Fulano
Sicrano
Beltrano
Altrano
Socrano
Delano
John
Paul
Mary
Bill
Operação União (cont.)
• Notação: r È s
• Definida como: r È s = {t | t Î r ou t Î s}
• Para que r È s seja válido, é preciso que:
• r e s precisam possuir o mesmo número de atributos.
• Propriedade conhecida como aridade.
• Caso existam diferenças, a operação de projeção deve ser
utilizada antes da união.
• Os domínios de atributo precisam ser compatíveis.
• Em outras palavras, do mesmo tipo de dado.
• Equivale a operação UNION da linguagem SQL.
Operação Diferença de Conjuntos
• A partir das relações ClienteCC e ClienteEmp, liste os nomes dos
clientes que possuem conta, mas não possuem empréstimo.
NomeCliente NumeroEmprestimo
NomeCliente NumeroConta
John 16
Fulano 102
Paul 93
Sicrano 101
Fulano 15
Sicrano 201
Mary 14
Beltrano 217
Beltrano 17
Altrano 222
Socrano 11
Socrano 215
Socrano 23
Delano 305
Bill 17
Operação Diferença de Conjuntos
(cont.)
• ÕNomeCliente (ClienteCC) – ÕNomeCliente (ClienteEmp)

NomeCliente
Sicrano
Altrano
Delano
Operação Diferença de Conjuntos (cont.)

• Notação: r – s
• Definida como: r – s = {t | t Î r e t Ï s}
• Para que r – s seja válido, é preciso que:
• r e s precisam possuir mesmo número de atributos
• Os domínios de atributo precisam ser compatíveis
• É importante lembrar que r – s ¹ s – r
• Equivale a operação EXCEPT da linguagem SQL.
Operação Produto Cartesiano
• A partir das relações Cliente e Serviço, combine os clientes com os serviços do
banco.
NomeCliente NumeroConta CodigoServico CodigoServico NomeServico
Fulano 102 2 1 Seguro
Sicrano 101 4 2 Capitalização
Sicrano 201 1 3 Fundos
Beltrano 217 3 4 Empréstimo
Altrano 222 4
Socrano 215 1
Delano 305 2
Operação Produto Cartesiano
(cont.)
• r = Cliente x Servico
Cliente. Cliente. Cliente. Servico. Servico.
NomeCliente NumeroConta CodigoServico CodigoServico NomeServico
Fulano 102 2 1 Seguro
Fulano 102 2 2 Capitalização
Fulano 102 2 3 Fundos
Fulano 102 2 4 Empréstimo
Sicrano 101 4 1 Seguro
Sicrano 101 4 2 Capitalização
Sicrano 101 4 3 Fundos
Sicrano 101 4 4 Empréstimo
... ... ... ... ...
Operação Produto Cartesiano (cont.)
• Definida como: r x s = {t q | t Î r e q Î s}
• Atenção na concatenação de operações.
• Ao cruzar várias relações, utiliza-se o formato
relacao.nome_atributo para distinguir atributos com o mesmo
nome.
• Equivale a listar duas ou mais tabelas na cláusula FROM da consulta
SQL.
Mas essa operação parece inútil...
Ah, e se eu realizar uma seleção?
sServico.NomeServico= “Fundos” (Cliente x Servico)

Cliente. Cliente. Cliente. Servico. Servico.


NomeCliente NumeroConta CodigoServico CodigoServico NomeServico
Fulano A-102 2 3 Fundos
Sicrano A-101 4 3 Fundos
Sicrano A-201 1 3 Fundos
Beltrano A-217 3 3 Fundos
Altrano A-222 4 3 Fundos
Socrano A-215 1 3 Fundos
Delano A-305 2 3 Fundos

AINDA INÚTIL!
Operação Renomeação
• Permite nomear relações, permitindo referenciá-la por mais de
um nome na expressão.
• Notação: rx (r)
• Retorna a relação r sob o nome x.
• Permite renomear também expressões algébrica, pois elas
retornam uma nova relação.
• Se uma relação r tiver aridade n, você pode nomear esta relação
e os seus multiplos atributos:
• rx(a1, a2, ..., an)(r)
• Retorna a relação r com o nome x, e com os atributos
renomeados para a1, a2, ..., an.
• Equivale a cláusula AS da linguagem SQL.
ss.NomeServico= “Fundos” (Cliente x rs(Servico))
Cliente. Cliente. Cliente. Servico. Servico.
NomeCliente NumeroConta CodigoServico CodigoServico NomeServico
Fulano A-102 2 3 Fundos
Sicrano A-101 4 3 Fundos
Sicrano A-201 1 3 Fundos
Beltrano A-217 3 3 Fundos
Altrano A-222 4 3 Fundos
Socrano A-215 1 3 Fundos
Delano A-305 2 3 Fundos
Resultado das Expressões Algébricas
• Uma expressão na álgebra relacional retorna um dos seguintes
resultados:
• Uma relação já existente no banco de dados.
• Uma nova relação constante .
• Composta por tuplas descrita dentro de chaves.
• Exemplo: { (1, Herleson, 26), (2, Priscila, 25), ...}.
• Exemplo:
• ÕNomeCliente (Cliente) È ÕNomeCliente (Emprestimo)
Conheça outras operações da Álgebra Relacional

OUTRAS OPERAÇÕES
Operação Interseção
• A partir das relações ClienteCC e ClienteEmp, liste todos os nomes
dos clientes que possuem conta e empréstimo.
NomeCliente NumeroConta NomeCliente NumeroEmprestimo
Fulano 102 John 16
Sicrano 101 Paul 93
Sicrano 201 Fulano 15
Beltrano 217 Mary 14
Altrano 222 Beltrano 17
Socrano 215 Socrano 11
Delano 305 Socrano 23
Bill 17
Operação Interseção (cont.)
• ÕNomeCliente (ClienteCC) Ç ÕNomeCliente (ClienteEmp)

NomeCliente
Fulano
Beltrano
Socrano
Operação Interseção (cont.)
• Notação: r Ç s
• Definida como: r Ç s = {t | t Î r e t Î s}
• Para que r Ç s seja válido, é preciso que:
• r e s precisam possuir mesmo número de atributos
• Os domínios de atributo precisam ser compatíveis
• Relembrar é viver: r Ç s = r – (r – s)
• Equivale a operação INTERSECT da linguagem SQL.
Operação Junção Natural
• Encontre todos os clientes que possuem conta, com o nome dos serviços
contratados.

NomeCliente NumeroConta CodigoServico CodigoServico NomeServico


Fulano 102 2 1 Seguro
Sicrano 101 4 2 Capitalização
Sicrano 201 1 3 Fundos
Beltrano 217 3 4 Empréstimo
Altrano 222 4
Socrano 215 1
Delano 305 2
Operação Junção Natural (cont.)
• ÕNomeCliente, NumeroConta, NomeServico (Cliente Servico)

NomeCliente NumeroConta NomeServico


Fulano 102 Capitalização
Sicrano 101 Empréstimo
Sicrano 201 Seguro
Beltrano 217 Fundos
Altrano 222 Empréstimo
Socrano 215 Seguro
Delano 305 Capitalização
Operação Junção Natural (cont.)
• Combina as operações de Seleção e de Produto Cartesiano
em uma única operação
• Etapas da Junção Natural:
• Forma o Produto Cartesiano
• Realiza a seleção, forçando igualdade nos atributos que estão presentes nas duas relações
• Remove os atributos duplicados

• Notação: r s
• Definida como: r s = PR È S (sr.i = s.i (r x s)), onde:
• R e S são os atributos das relações r e s respectivamente
• Os atributos r.i e s.i pertencem a r Ç s

• Equivale a operação JOIN da linguagem SQL.


Operação Junção Natural (cont.)

• A operação junção sempre


considera apenas os pares
de tuplas que têm o mesmo
valor no atributo em
comum.
• Se as relações r e s não
possuem atributos em
comum, o resultado da
junção é o produto
cartesiano (CUIDADO!).
Operação Divisão
• A partir das relações Cliente e Serviço, encontre os clientes que
possuem todos os servicos contratados.
NomeCliente NomeServico CodigoServico NomeServico
Fulano Capitalização 1 Seguro
Sicrano Empréstimo 2 Capitalização
Sicrano Seguro
3 Fundos
Beltrano Fundos
4 Empréstimo
Altrano Empréstimo
Sicrano Fundos
Delano Capitalização
Sicrano Capitalização
Operação Divisão (cont.)
• ÕNomeCliente, NomeServico (Cliente) ÷ ÕNomeServico (Servico)

NomeCliente
Sicrano
Operação Divisão (cont.)
• Notação: r ÷ s
• Definida como: r ÷ s = {t | t Î PR – S(r) Ù "u Î s (t u Î r)}
• R e S são os atributos das relações r e s respectivamente.
• A tupla t u significa a concatenação das tuplas t (da relação r) e
u (da relação s) para produzir uma única tupla.
• Relaciona todas as tuplas da relação r que possuem todos os valores
da relação s.
• Adequado para consultas que incluem a frase “para todo...”.
• Equivale ao recurso de consultas aninhadas da linguagem SQL.
Operação Atribuição
• Escrever expressões da algébra relacional pode tornar-se complexo,
dependendo do número de operações envolvidas.
• A operação atribuição (¬) fornece uma maneira conveniente de
expressar consultas complexas, permitindo o armazenamento das
relações resultantes em variáveis temporárias.
Operação Atribuição (cont.)
• Com o uso da atribuição, as consultas podem ser escritas como um
programa sequencial, que consistirá em uma série de atribuições,
seguidas de uma expressão cujo valor é exibido como resultado da
consulta.
• A atribuição precisa sempre ser feita para uma variável de
relação temporária.
• Pode usar variável em expressões subsequentes.
Operação Atribuição (cont.)
• Exemplo:
• ÕNomeCliente (Cliente) Ç ÕNomeCliente (Emprestimo)

• Usado a atribuição:
• a ¬ ÕNomeCliente (Cliente)
• b ¬ ÕNomeCliente (Emprestimo)
• result ¬ a Ç b
Operação Projeção Generalizada
• Estende a operação de projeção, permitindo que funções aritméticas sejam
usadas na lista de projeção.
• Notação: Õf1, f2, ..., fk (r)
• f1, f2, ..., fk são expressões aritméticas envolvendo constantes e atributos
no esquema de r.
• r é o nome da relação.
Operação Projeção Generalizada
(cont.)
• Qual a quantidade de filmes disponíveis?

NomeFilme Total Alugados


Busca Implacável 5 3
De Volta Para o Futuro 2 1
Ultimato Bourne 3 3
A Troca 1 0
Marley & Eu 3 2
Força-G 4 2
Duro de Matar 4.0 2 1
Operação Projeção Generalizada (cont.)

• rx(NomeFilme, Disponiveis)(ÕNomeFilme, Total – Alugados (Filme))


NomeFilme Disponiveis
Busca Implacável 2
De Volta Para o Futuro 1
Ultimato Bourne 0
A Troca 1
Marley & Eu 1
Força-G 2
Duro de Matar 4.0 1
Funções e Operações Agregadas
• As funções agregadas tomam uma coleção de valores e retornam
um único valor como resultado, de acordo com a operação.
• avg: média aritmética
• min: valor mínimo
• max: valor máximo
• sum: soma dos valores
• count: número de valores
Funções e Operações Agregadas (cont.)

• Notação: Goperacao(atributo)(r)
• Exemplo: Gsum(quantidade)(Filme)
• Eliminação de duplicatas através da operação –distinct
após a operação.
• Suporta o recurso de agrupamento, adicionando
o(s) atributo(s) a sere agrupados antes da função
agregada.
• Exemplo: categoriaGsum(quantidade)(Filme)
Operação Junção Externa
• Encontre todos os clientes que possuem conta, com o nome dos
serviços contratados.
NomeCliente NumeroConta CodigoServico CodigoServico NomeServico
Fulano A-102 2 1 Seguro
Sicrano A-101 4 2 Capitalização
Sicrano A-201 1 3 Fundos
Beltrano A-217 3 4 Empréstimo
Altrano A-222 4 5 Cartão Crédito
Socrano A-215 nulo
Delano A-305 2
Operação Junção Externa (cont.)
• ÕNomeCliente, NumeroConta, NomeServico (Cliente Servico)

nome_cliente numero_conta nome_servico


Fulano A-102 Capitalização
Sicrano A-101 Empréstimo
Sicrano A-201 Seguro
Beltrano A-217 Fundos
Altrano A-222 Empréstimo
Delano A-305 Capitalização

O que houve com o cliente Socrano?


E onde está a relação de clientes que possuem o serviço de Cartão de Crédito?
Operação Junção Externa (cont.)
• Uma Junção Externa estende a operação de Junção Natural, exibindo as tuplas
que não possuem associação.
• Evita a perda de informações.
• Basicamente, a junção externa calcula a junção e acrescenta ao resultado
as tuplas de uma relação que não correspondem às tuplas na outra
relação.
• Usa valores nulos para as tuplas sem associação.
• Nulo significa que o valor é desconhecido ou inexistente.
• Todas as comparações envolvendo valores nulos são (grosseiramente
falando) falsas por definição.
Operação Junção Externa (cont.)

Esquerda Direita
(Left) (Right)

Completa
(Full)

NomeCliente NumeroConta CodigoServico CodigoServico NomeServico


Fulano 102 2 1 Seguro
Sicrano 101 4 2 Capitalização
Sicrano 201 1 3 Fundos
Beltrano 217 3 4 Empréstimo
Altrano 222 4 5 Cartão Crédito
Socrano 215 null
Delano 305 2
Operação Junção Externa (cont.)
NomeCliente NumeroConta NomeServico
Fulano 102 Capitalização
Sicrano 101 Empréstimo
Sicrano 201 Seguro
Beltrano 217 Fundos
Altrano 222 Empréstimo
Delano 305 Capitalização
Socrano
null 215
null Cartão null
de Crédito
null null Cartão de Crédito
Manipulação de Dados
• O conteúdo do banco de dados pode ser modificado usando as
seguintes operações:
• Exclusão
• Inserção
• Atualização
• Todas essas operações são expressas na forma algébrica através do
uso do operador de atribuição (¬) entre as relações.
• Nesses casos, o resultado da expressão será armazenado na
relação manipulada pelo código algébrico.
Exclusão
• Uma exclusão nada mais é do que a diferença entre a instância atual da relação
e uma consulta com as tuplas a serem excluídas.
• A exclusão é expressa semelhantemente a uma consulta, exceto que, em vez de
exibir tuplas ao usuário, as tuplas selecionadas são removidas do banco de
dados.
• Pode excluir apenas tuplas inteiras; não pode excluir valores em atributos
específicos.
• Na álgebra relacional, uma exclusão é expressa por:
• r¬r–E
• Onde r é uma relação e E é uma consulta de álgebra relacional.
Exclusão (cont.)
• Exclua todos os empréstimos onde nome_agencia é igual a Sobral.
CodigoEmprestimo NomeAgencia ValorEmprestimo
11 Fortaleza 900
14 Sobral 1500
15 Crato 1500
16 Crato 300
17 Sobral 1000
23 Iguatu 2000
93 Aracati 500
Exclusão (cont.)
• r ¬ r – sNomeAgencia = “Sobral”(rr(Emprestimo))

CodigoEmprestimo NomeAgencia ValorEmprestimo


11 Fortaleza 900
15 Crato 1500
16 Crato 300
23 Iguatu 2000
93 Aracati 500
Inserção
• Uma inserção nada mais é do que a união entre a instância atual da relação e
uma relação com as novas tuplas a serem inseridas.
• Pode ser uma lista de tuplas ou o resultado de uma consulta.
• A inserção é expressa semelhantemente a uma consulta, exceto que, em vez de
exibir tuplas ao usuário, as tuplas selecionadas são adicionadas do banco de
dados.
• Pode adicionar apenas tuplas inteiras; não pode adicionar valores em
atributos específicos.
• A aridade das tuplas a serem inseridas deve ser a mesma da relação que as
receberá.
• Na álgebra relacional, uma inserção é expressa por:
• r¬rÈE
• Onde r é uma relação e E é uma consulta de álgebra relacional.
Inserção (cont.)
• Insira as tuplas da relação EmprestimoSobral na relação de empréstimos do
banco de dados.

CodigoEmprestimo CidadeAgencia ValorEmprestimo


14 Sobral 1500
17 Sobral 1000
Inserção (cont.)
• Emprestimo ¬ Emprestimo È EmprestimoSobral
CodigoEmprestimo CidadeAgencia ValorEmprestimo
11 Fortaleza 900
14 Sobral 1500
15 Crato 1500
16 Crato 300
17 Sobral 1000
23 Iguatu 2000
93 Aracati 500
Atualização
• A atualização permite a mudança de valores em uma tupla sem mudar todos os
valores na tupla.
• Use o operador de projeção generalizada para realizar essa tarefa.
• Notação: r ¬ Õf1, f2, ..., fk (r)
• f1, f2, ..., fk são:
• Os atributos que não serão alterados.
• As expressões que alteram os valores dos atributos a serem
atualizados.
• r é o nome da relação.
Atualização (cont.)
• Aumente os valores das quantias dos empréstimos em 10%
CodigoEmprestimo CidadeAgencia ValorEmprestimo
codigo_emprestimo nome_agencia quantia
11 Fortaleza 900
L-14 Sobral 1500
14 Sobral 1500
L-17 Sobral 1000
15 Crato 1500
16 Crato 300
17 Sobral 1000
23 Iguatu 2000
93 Aracati 500
Atualização (cont.)
• Emprestimo ¬ ÕCodigoEmprestimo, CidadeAgencia, ValorEmprestimo * 1,1 (emprestimo)

codigo_emprestimo nome_agencia quantia


L-11 Fortaleza 990
L-14 Sobral 1650
L-15 Crato 1650
L-16 Crato 330
L-17 Sobral 1100
L-23 Iguatu 2200
L-93 Aracati 550
Álgebra Relacional - Operações
• Fundamentais
• Seleção
• Projeção
• União
• Diferença de conjuntos
• Produto cartesiano
• Renomeação
• Outras Operações
• Interseção
• Junção natural
• Divisão
• Atribuição
• Projeção generalizada
• Funções agregadas
• Junção externa
• Manipulação de Dados
• Exclusão
• Inserção
• Alteração
Vamos Praticar!

Você também pode gostar