Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Cliquez pour modifier le style du titre Banco de Dados Álgebra Relacional Profa. Vaninha Vieira (vaninha@dcc.ufba.br) Salvador, Jun/2013 Universidade Federal da Bahia Instituto de Matemática Departamento de Ciência da Computação MATA60 – Banco de Dados 2 Créditos: Parte dos slides utilizados nesta apresentação foram adaptados dos slides do Livro do Elmasri & Navathe, 2011 – 6a Edição. 3 Referências § Esses slides são uma composição de aulas e apostilas dos seguintes professores (disponíveis na Internet) • Aulas § Prof. Alexander Roberto Valdameri § Profa. Jiani Cardoso • Apostila § Prof. Antonio Cesar de Barros Munari 4 § Compreendendo álgebra relacional é mais fácil apreender SQL; § SQL incorpora cada vez mais conceitos de álgebra; § Algoritmos de otimização de consulta definidos sobre álgebra (possível uso internamente no SGBD) § Álgebra desenvolvida para descrever operações sobre uma base de dados relacional § Os objetos sobre os quais a álgebra opera são tabelas § Uma operação possui como operandos e como resultado tabelas § Porque aprender: Algebra Relacional 5 Operações da Álgebra Relacional 6 Relações de Dados Nome_agencia Nro_emprestimo Total Timbo 17 1000 Indaial 23 2000 Blumenau 15 1500 Pomerode 93 500 Gaspar 11 900 Blumenau 16 1300 Nome_Cliente Nro_emprestimo Jonas 17 Silvio 23 Henrique 15 Carlos 93 Silvio 11 William 17 Adalberto 16 emprestimos devedores Nome_Cliente Nro_conta Jonas 11111 Silvio 22222 Henrique 33333 Jackson 44444 contas R A B C a b c d a f c b d S D E F b g a d a f 2 7 Operação de Seleção (SELECT) § Seleciona de uma tabela, as linhas que satisfazem a um determinado predicado § σF (R) Ex. σnome_agencia = “Blumenau” (emprestimo) Nome_agencia Nro_emprestimo Total Blumenau 15 1500 Blumenau 16 1300 SELECT nome_agencia, nro_emprestimo, total FROM emprestimo WHERE nome_agencia = ‘Blumenau’ A condição F pode envolver ⇒ operandos constantes ou número de componente ( $i ) ⇒ operadores aritméticos de comparação ( <, =, >, ≤, ≠, ≥ ) ⇒ operadores lógicos ( ∧, ∨, ¬ ) ( e, ou, não ) 8 Operação de Projeção (PROJECT) § Seleciona uma lista de colunas de uma tabela § Πi1, i2, ..., in(R) Ex. Π nro_emprestimo, total (emprestimo) SELECT nro_emprestimo, total FROM emprestimo Nro_emprestimo Total 17 1000 23 2000 15 1500 93 500 11 900 16 1300 9 Operação de Projeção § Operação de projeção com comparação. Ex. Π nro_emprestimo(σnome_agencia = “Blumenau” (emprestimo)) SELECT nro_emprestimo FROM emprestimo WHERE nome_agencia = ‘Blumenau’ Nro_emprestimo 15 16 10 • O resultado é uma tabela cuja linhas são a combinação das linhas das tabelas R e S tomando-‐‑se uma linha de R e concatenando-‐‑a com uma linha de S Operação Produto Cartesiano R × S Peça CodPeça NomePeça CorPeça PesoPeça CidadePeça P1 Eixo Cinza 10 Porto Alegre P2 Rolamento Preto 16 Santa Maria P3 Mancal Verde 30 Uruguaiana Embarq CodPeça CodFornec QtidEmbarq P1 F1 300 P1 F2 400 P1 F3 200 P2 F1 300 P2 F4 350 § Total de colunas do produto cartesiano: • nº colunas da primeira tabela + nº de colunas da segunda tabela • 6 + 3 = 9 colunas § Nº de linhas do produto cartesiano: • Nº de linhas da primeira tabela x nº de linhas da segunda tabela. • 500 x 600 = 30.000 linhas X Y 1 2 3 X X1 X2 X3 Y1 Y2 Y3 = 11 π NomePeça (σ Embarq. CodPeça= Peça. CodPeça (Embarq X Peça) ) Exemplo de Produto Cartesiano Obtenha os nomes de todas as peças para as quais há embarques Peça CodPeça NomePeça CorPeça PesoPeça CidadePeça P1 Eixo Cinza 10 Porto Alegre P2 Rolamento Preto 16 Santa Maria P3 Mancal Verde 30 Uruguaiana Embarq CodPeça CodFornec QtidEmbarq P1 F1 300 P1 F2 400 P1 F3 200 P2 F1 300 P2 F4 350 NomePeça Eixo Rolamento Tabela Resultante 12 Ex. Π nome_cliente, nro_emprestimo, total (σnome_agencia = “Blumenau” (emprestimo ⋈ devedores)) σ <criterio> (<tabela1> X <tabela 2>)) Operação de junção (join) A combinação de uma operação de seleção aplicada sobre uma operação de produto cartesiano é usual em aplicações de BD. É através dela que dados de tabelas relacionadas são associados. Sintaxe: <tabela1> |X| < criterio> < tabela2> A junção tem como operandos duas tabelas. O resultado é equivalente a executar: SELECT nome_cliente, nro_emprestimo, total FROM emprestimo, devedores WHERE emprestimo.nro_emprestimo = devedores.nro_emprestimo and nome_agencia = ‘Blumenau’ Nome_Cl iente Nro_empre stimo Total Henrique 15 1500 Adalberto 16 1300 3 13 Operação de Junção (Natural) § Operação binária que permite combinar certas relações e um produto cartesiano dentro de uma operação. Operação implícita = igualdade dos atributos com mesmo nome. Cada par de atributos iguais dá origem a um único atributo, com o mesmo nome, no resultado R A B C a b c d b c b b f c a d S B C D b c d b c e a d b A B C D a b c d a b c e d b c d d b c e c a d b R ⋈ S 14 § A álgebra relacional empresta da teoria de conjuntos quatro operadores: União, Interseção, Diferença e Produto Cartesiano § Sintaxe da União: <tabela> 1 ∪ <tabela> 2 § Sintaxe da Intersecção: <tabela> 1 ∩ <tabela> 2 § Sintaxe da Diferença: <tabela> 1 – <tabela> 2 § Nos três casos, a operação possui duas tabelas como operando. E as tabelas devem ser compatíveis: § Possuir mesmo número de colunas; § o mesmo domínio para cada posição da lista de atributos; § quando os nomes das colunas forem diferentes, adota-‐‑ se os nomes das colunas da primeira tabela. Operações da teoria de conjuntos 15 Operações da teoria de conjuntos R A B C a b c d a f c b d S D E F b g a d a f R ∪ S A B C a b c d a f c b d b g a R - S A B C a b c c b d R ∩ S A B C d a f União Intersecção Diferença 16 Operação de União § Operação binária que permite unir dois conjuntos ou relações de dados § Nesta operação, os conjuntos duplicados são eliminados. Ex. Π nome_cliente(devedores) ∪ Π nome_cliente(contas) Nome_Cliente Adalberto Carlos Henrique Jackson Jonas Silvio William SELECT nome_cliente FROM devedores UNION SELECT nome_cliente FROM contas 17 Operação de Interseção § Permite encontrar conjuntos de dados comuns entre duas relações de dados. Nesta operação, os conjuntos duplicados são eliminados. Ex. Π nome_cliente(devedores) ∩ Π nome_cliente(contas) Nome_Cliente Henrique Jonas Silvio SELECT nome_cliente FROM devedores INTERSECT SELECT nome_cliente FROM contas 18 Operação de Diferença § Permite encontrar conjuntos de dados que estão em uma relação e que não estão em outra. Ex. Π nome_cliente(devedores) – Π nome_cliente(contas) Nome_Cliente Adalberto Carlos William SELECT nome_cliente FROM devedores MINUS SELECT nome_cliente FROM contas 4 19 Dom(nome) = varchar(30) Dom(idade) = int Dom(curso) = varchar(5) Dom(depto) = varchar(5) Aluno é compatível com Professor, mas não é com Funcionario. Ex: Aluno = { nome, idade, curso} Professor = { nome, idade, depto.} Funcionario = { nome, depto, idade} Operaçãode União 20 Aluno = {nome, idade, curso} {Zeca, 25, comput. Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput.} Professor = {nome, idade, depto.} {Ari, 35, comput. Wilma, 32, eletr. Zeca, 25, comput.} Aluno ∪ Professor = {nome, idade, curso} { Zeca, 25, comput. Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput. Ari, 35, comput. Wilma, 32, eletr. } Apresente uma relação com todos os alunos e também com todos os professores: Operação de União Tabela Resultante a operação de UNIÃO elimina duplicatas, mas existem SGBDs (ex.:INGRES) que permitem que o usuário determine se tuplas duplicadas devem ser eliminadas do resultado ou não. 21 Aluno = {nome, idade, curso} {Zeca, 25, comput. Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput.} Professor = {nome, idade, depto.} {Ari, 35, comput. Wilma, 32, eletr. Zeca, 25, comput.} Aluno ∩ Professor = {nome, idade, curso} { Zeca, 25, comput} Operação de Intersecção Apresente uma relação de todos os alunos que são professores há operadores de álgebra que são deriváveis de outros. A operação de intersecção é derivável de união e diferença: A ∩ B = A – (A – B) Operadores derivados 22 Aluno = {nome, idade, curso} {Zeca, 25, comput. Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput.} Professor = {nome, idade, depto.} {Ari, 35, comput. Wilma, 32, eletr. Zeca, 25, comput.} Aluno -‐‑ Professor = {nome, idade, curso} { Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput.} Note-‐‑se que a DIFERENÇA não é comutativa ! Professor -‐‑ Aluno = {nome, idade, depto.} {Ari, 35, comput. Wilma, 32, eletr.} Operação de Diferença Apresente uma relação de todos os alunos que não são professores 23 Operação de Divisão § Produz como resultado a projeção de todos os elementos da primeira tabela que se relacionam com todos os elementos da segunda tabela. X1 X2 X3 Y1 Y2 Y3 ÷ X Y 1 2 3 = R A B C D a b c d a b e f b c e f e d c d e d e f a b d e S E F c d e f R/S A B a b e d S E F c d e f R/S A B a b e d (R/S) × S A B E F a b c d a b e f e d c d e d e f / × = = 24 Explicação alternativa § Forma de proceder à divisão • reordenar as colunas de forma a que as últimas correspondam ao quociente • ordenar a tabela pelas primeiras colunas • cada subtupla das primeiras colunas pertence ao resultado se o conjunto de subtuplas das últimas colunas que lhe corresponde contiver o quociente R A B C D a b c d e f d e b c e f e d c d e f S E F c d e f R/S A B a b e d / = 5 25 Operação Renomear § Utilizado para alterar o nome das colunas de uma tabela. Utilizado para relacionamentos onde possam surgir nomes iguais para as colunas, como num relacionamento da tabela com ela mesma. SELECT x AS a, y AS b, z AS c FROM R 26 Operações Atribuição Nome e sobrenome dos funcionários que pertencem ao departamento 002 e que entraram na empresa após 2010 27 Árvore de Expressões § Pode-se combinar vários operadores da Álgebra Relacional em uma expressão, constituindo uma árvore de expressões. Ex. Π nome_cliente, nro_emprestimo, total (σnome_agencia = “Blumenau” (emprestimo ⋈ devedores)) SELECT nome_cliente, nro_emprestimo, total FROM emprestimo, devedores WHERE emprestimo.nro_emprestimo = devedores.nro_emprestimo and nome_agencia = ‘Blumenau’ 28 Árvore de Expressões Π nome_cliente, nro_emprestimo, total σnome_agencia = “Blumenau” ⋈ emprestimo devedores Plano lógico de consulta 29 Árvore de Expressões otimização Π nome_cliente, nro_emprestimo, total ⋈ emprestimo devedores Plano lógico de consulta σnome_agencia = “Blumenau” 30 Exercícios Para os exercícios, considere as tabelas cargo, depto e funcionário 6 31 Exercícios 32 Para casa § Lista de exercícios disponível no site da disciplina (com gabarito) § Próxima aula • Laboratório Prático de Consultas em Álgebra Relacional • Local: Lab Didático I – Sala 140 (IM)
Compartilhar