Banco de Dados I Profa. Jiani Cardoso 2/2005 Algebra Relacional Banco de Dados I Profa. Jiani Cardoso 2/2005
Algebra Relacional Á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: 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)
Operadores da Algebra Relacional Operadores originários da teoria de conjuntos: União (union) : Intersecção (intersect): Diferença (minus): - Operadores específicos da álgebra relacional: Seleção (select): Projeção (project): Junção (join): || Renomeação (rename): Divisão: ÷
<critério de seleção> (< tabela>) Operação de Seleção () O resultado é uma tabela que contém as linhas que obedecem a um determinado critério. Sintaxe: onde <tabela> é o nome de uma tabela ou uma expressão de álgebra relacional que resulta em uma tabela e <critério de seleção> é uma expressão booleana que envolve literais e valores de atributos da tabela <critério de seleção> (< tabela>) O resultado da seleção tem colunas com os mesmos nomes e domínios da tabela de entrada.
BD exemplo
codPeça = ‘P1’ (Peça) Exemplo de Seleção () O resultado da seleção tem colunas com os mesmos nomes e domínios da tabela de entrada. codPeça = ‘P1’ (Peça) Resulta em uma tabela que contém todos os dados da peça de código P1.
(StatusFornec > 5 and CidadeFornec = ‘Rio de Janeiro’ (Fornec)) Exemplo de Seleção () Ex.:Mostre os dados de todas os fornecedores que tenham status maior que 5 e que sejam do Rio de Janeiro. (StatusFornec > 5 and CidadeFornec = ‘Rio de Janeiro’ (Fornec)) Tabela Resultante
<lista de colunas> (<tabela>) Operação de Projeção () A Projeção tem como operando uma tabela. O resultado é uma tabela que contém apenas as colunas selecionadas. Sintaxe: <lista de colunas> (<tabela>) Ex.: Apresente os códigos e os nomes de todas as peças: CodPeça, NomePeça (Peça) Tabela Resultante
Operação de Projeção () A Projeção pode resultar também na eliminação de linhas, caso a(s) coluna(s) que são parte da chave forem eliminadas. Se uma coluna cujos valores distinguem diferentes linhas é eliminada, surgem linhas duplicadas na tabela, que devem ser eliminadas. Exemplo: CidadeFornec (Fornec) Resulta em uma tabela que contém todas as cidades em que há fornecedores. Note- se que se houver múltiplos fornecedores na mesma cidade, as diferentes linhas são eliminadas. CidadeFornec São Paulo Rio de Janeiro Tabela Resultante
CodFornec, QtidEmbarq Aninhamento de Operadores Operadores diferentes podem ser aninhados Ex.: Mostre o código de fornecedor e quantidade embarcada para cada embarque da peça de código P1. CodFornec, QtidEmbarq (CodPeça = ‘P1’ (Embarq) ) Tabela Resultante
Operações da teoria de conjuntos A álgebra relacional empresta da teoria de conjuntos quatro operadores: União, Intersecçã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 o 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.
Aluno é compatível com Professor, mas não é com Funcionario. Operação de União Ex: Aluno = { nome, idade, curso} Professor = { nome, idade, depto.} Funcionario = { nome, depto, idade} 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.
Operação de União Apresente uma relação com todos os alunos e também com todos os professores: Professor = {nome, idade, depto.} {Ari, 35, comput. Wilma, 32, eletr. Zeca, 25, comput.} Aluno = {nome, idade, curso} {Zeca, 25, comput. Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput.} Aluno Professor = {nome, idade, curso} { Zeca, 25, comput. Zico, 21, eletr. Juca, 19, odonto. Tuca, 19, comput. Ari, 35, comput. Wilma, 32, eletr. } 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.
Operação de Diferença Apresente uma relação de todos os alunos que não são professores 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 Intersecção Apresente uma relação de todos os alunos que são professores 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} Operadores derivados 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)
CodFornec ( (StatusFornec > 5 (Fornec) ) Operação de Intersecção Ex.: Obtenha os códigos de todos os fornecedores que tem embarques e que tem status maior que 5. CodFornec (Embarq) CodFornec ( (StatusFornec > 5 (Fornec) ) CodFornec F2 F4 Tabela Resultante
<tabela1> X <tabela 2> Operação Produto Cartesiano Sintaxe: <tabela1> X <tabela 2> O produto cartesiano possui como operadores duas tabela. O resultado é uma tabela cuja linhas são a combinação das linhas das tabelas <tabela1> e <tabela 2> tomando-se uma linha da <tabela1> e concatenando-a com uma linha da < tabela 2> 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
Operação de Produto Cartesiano Embarq X Peça Normalmente o produto cartesiano é combinado com uma seleção que envolve as diversas tabelas multiplicadas.
Exemplo de Produto Cartesiano Obtenha os nomes de todas as peças para as quais há embarques NomePeça ( Embarq. CodPeça= Peça. CodPeça (Embarq X Peça) ) Tabela Resultante NomePeça Eixo Rolamento
<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: <criterio> (<tabela1> X <tabela 2>))
( Embarq.codFornec=Fornec.CodFornec (Embarq x Fornec) ) Exemplo de Junção (join) <tabela1> |X| < criterio> < tabela2> Embarq |x| (Embarq.codFornec=Fornec.CodFornec) Fornec Equivalente: ( Embarq.codFornec=Fornec.CodFornec (Embarq x Fornec) ) Critério da junção: qualquer expressão booleana, inclusive comparações do tipo <, >, <>, ... entre os valores de atributos das tabelas envolvidas na junção. Essa operação de junção é chamada Junção Theta.