Buscar

Álgebra Relacional

Prévia do material em texto

Álgebra Relacional
Álgebra relacional, é uma coleção de operações utilizadas para manipular relações. Essas operações são usadas para selecionar tuplas de uma determinada relação ou para combinar tuplas relacionadas a diversas relações com o propósito de especificar uma consulta - uma requisição de recuperação - sobre a base de dados. As operações da álgebra relacional são normalmente divididas em dois grupos. O primeiro deles inclui um conjunto de operações da teoria de conjuntos. As operações são UNION, INTERSECTION, DIFFERENCE e CARTESIAN PRODUCT. O segundo grupo consiste de operações desenvolvidas especificamente para bases de dados relacionais, tais como: SELECT, PROJECT e JOIN entre outras.
Operações SELECT e PROJECT
O Operador SELECT
A operação SELECT é usada para selecionar um subconjunto de tuplas de uma relação as quais devem satisfazer uma condição de seleção.
Em geral, a operação SELECT é denotada por: σ <condição de seleção> (<nome da relação>)
Onde o símbolo σ é usado para denotar o operador SELECT e a condição de seleção é uma expressão Booleana especificada sobre atributos da relação especificada.
A relação resultante da operação SELECT tem os mesmos atributos da relação especificada em <nome da relação>. A expressão booleana especificada em <condição de seleção> é construída a partir de cláusulas da forma: 
<nome de atributo> <operador de comparação> <valor constante>, ou 
<nome de atributo> <operador de comparação> <nome de atributo>
Onde <nome de atributo> é o nome de um atributo da relação, <operador de comparação> é normalmente um dos operadores relacionais {=,<,>, ...} <valor constante> é um valor constante. As cláusulas podem ser utilizadas em conjunto com os operadores lógicos {AND, OR NOT} para formar uma condição de seleção composta.
Funcionarios
	código
	Nome
	Idade 
	Sexo 
	Departamento
	Salario 
	13001
	Alberto Francisco
	34
	M 
	1
	7000
	13002
	Luana Artur
	28
	F 
	2
	7000
	13003
	Juliana Borba
	41
	F 
	2
	5000
	13004
	Guilherme Santos
	31
	M 
	1
	7000
	13005
	Fernando Augusto
	35
	M 
	2
	5000
	13006
	Pinto Raimundo
	28
	M 
	1
	4000
Ex1: Para selecionar funcionarios que trabalham no departamento 2: σ Departamento = 2 (Funcionarios)
	código
	Nome
	Idade 
	Sexo 
	Departamento
	Salario 
	13003
	Juliana Borba
	41
	F 
	2
	5000
	13002
	Luana Artur
	28
	F 
	2
	7000
	13005
	Fernando Augusto
	35
	M 
	2
	5000
Ex2: Para selecionar funcionarios que tenham idade maior que 30 e tenham salario maior que 5000, ou que tenham idade menor que 30 e tenham salario menor que 5000.
σ (Idade > 30 AND salario>5000) OR (Idade < 30 AND salario < 5000) (Funcionarios)
	código
	Nome
	Idade 
	Sexo 
	Departamento
	Salario 
	13001
	Alberto Francisco
	34
	M 
	1
	7000
	13004
	Guilherme Santos
	31
	M 
	1
	7000
	13006
	Pinto Raimundo
	28
	M 
	1
	4000
O operador SELECT é unário; isto é, ele é aplicado somente a uma relação. Assim, o SELECT não pode ser usado para selecionar tuplas de mais de uma relação. Observe também que a operação de seleção é aplicada individualmente para cada tupla. Assim, as condições de seleção não podem ser aplicadas a mais que uma tupla. O grau da relação resultante é a mesma que a relação original. O número de tuplas da relação resultante é sempre menor ou igual ao número de tuplas da relação original.
Note que o operador SELECT é comutativo; isto é,
σ <cond1> (σ <cond2> (R))= σ<cond2> (σ<cond1> (R))
Assim, uma seqüência de SELECTs pode ser aplicada em qualquer ordem. Além disso, podese sempre trocar operadores SELECT em cascata com a conjuntiva AND; isto é:
σ <cond1> (σ <cond2> (...(σ <condn> (R))...))= σ <cond1> AND <cond2> AND ... AND <condn>(R).
O Operador PROJECT
O operador PROJECT, seleciona certas colunas da tabela se existir interesse sobre certos atributos da relação.
A forma geral do operador PROJECT é: π <lista de atributos> (<nome da relação>)
onde π é o símbolo usado para representar o operador PROJECT e <lista de atributos> é uma lista de atributos da relação especificada por <nome da relação>. A relação resultante tem apenas os atributos especificados em <lista de atributos> e estes atributos aparecem na mesma ordem em que foram especificados. Assim, o grau é igual ao número de atributos em <lista de atributos>.
Se a lista de atributos não contem atributos chaves, então é provável que tuplas duplicadas apareçam no resultado. A operação PROJECT remove implicitamente quaisquer tuplas duplicadas, tal que o resultado da operação PROJECT seja um conjunto de tuplas e assim, uma relação válida. Por exemplo, considere a seguinte operação:
π Sexo, Salario (Funcionarios)
	Sexo 
	Salario 
	M 
	7000
	F 
	7000
	F 
	5000
	M 
	5000
	M 
	4000
A tupla <F, 2500> aparece apenas uma vez, mesmo que esta combinação de valores apareça duas vezes na relação Funcionarios. Dessa maneira, se duas ou mais tuplas idênticas aparecerem quando aplicada a operação PROJECT, apenas uma será mantida no resultado; isto é conhecido como eliminação de duplicidade e é necessário para assegurar que o resultado da operação também seja uma relação – um conjunto de tuplas.
O número de tuplas na relação resultante sempre será igual ou menor que a quantidade de tuplas na relação original. Note-se que:π <lista1> (π <lista2> (R)) = π <lista1> (R) caso <lista2> contenha os atributos de <lista1>; caso contrário, o lado esquerdo da igualdade acima estará incorreto. A comutatividade não é válida para PROJECT.
Sequência de Operações
As relações resultants não possuem nomes. Em geral, existe a necessidade de se aplicar várias operações da álgebra relacional uma após a outra. Pode-se escrever essas operações em apenas uma única expressão da álgebra relacional ou aplicar uma única operação por vez e criar relações intermediárias. Neste último caso, deve-se dar nomes às relações intermediárias.
Ex: para selecionar nome, idade salario de todos funcionarios que trabalham no departamento 1, isso pode ser feito aplicando os operadores SELECT e PROJECT.
π Nome,Idade,Salario (σ Departamento=1 (Funcionarios))
Alternativamente, pode-se explicitar a sequência de operações, dando um nome para cada relação intermediária:
DEP1_FUNC ← σ Departamento=1 (Funcionarios)
RESULT ← π Nome, Idade,Salario (DEP1_FUNC)
DEPT1_FUNC
	código
	Nome
	Idade 
	Sexo 
	Departamento
	Salario 
	13001
	Alberto Francisco
	34
	M 
	1
	7000
	13004
	Guilherme Santos
	31
	M 
	1
	7000
	13006
	Pinto Raimundo
	28
	M 
	1
	4000
RESULT
	Nome
	Idade 
	Salario 
	Alberto Francisco
	34
	7000
	Guilherme Santos
	31
	7000
	Pinto Raimundo
	28
	4000
Renomeando Atributos
Normalmente, é mais simples dividir uma sequência de operações especificando as relações intermediárias ao invés de escrever uma única expressão da álgebra relacional. Pode-se, também, utilizar a técnica de renomear atributos nas relações intermediárias. Para renomear atributos de uma relação, que resultou da aplicação de uma operação da álgebra relacional, basta listar os nomes dos atributos entre parênteses:
DEP1_FUNC ← σ Departamento=1 (Funcionarios)
RESULT(NovoNome, NovaIdade, NovoSalario) ← π Nome, Idade, Salario (DEP1_FUNC)
Operações da Teoria dos Conjuntos
Existem várias operações da teoria de conjuntos que são utilizadas para agrupar elementos de dois conjuntos, entre elas estão: UNION, INTERSECTION e DIFFERENCE. Estas operações são binárias; isto é, elas necessitam de dois conjuntos. Quando essas operações são adaptadas para a base de dados relacional, deve-se assegurar que essas operações resultem sempre em relações válidas. Para conseguir isso, as duas relações aplicadas a qualquer uma das três operações acima devem ter o mesmo tipo de tuplas; esta condição é chamada união compatível. Duas relações R(A1, A2, ..., An) e S(B1, B2,....Bn) são união compatível se elas tiverem o mesmo grau n, e dom(Ai)=dom(Bi) para 1 ≤ i ≤ n. Isso significa que as duas relações têm o mesmo número de atributos e que cada par de atributos correspondentes tem o mesmo domínio. Pode-sedefinir as três operações UNION, INTERSECTION e DIFFERENCE sobre duas relações que sejam união compatível R e S:
· UNION ⎯ O resultado da operação, denotado por R ∪ S, é uma relação que inclui
todas as tuplas de R e todas as tuplas de S. Tuplas duplicadas são eliminadas.
· INTERSECTION ⎯ O resultado desta operação, denotado por R ∩ S, é a relação
que inclui todas as tuplas que são comuns a R e S.
· DIFFERENCE ⎯ O resultado desta operação, denotado por R - S, é a relação que
inclui todas as tuplas de R, mas que não estão em S.
as operações UNION e INTERSECTION são operações comutativas:
R U S = S U R, e R ∩ S = S ∩ R.
Estas operações podem ser aplicadas a qualquer número de relações, e ambas são associativas:
R U (S U T) = (R U S) U T, e
R ∩ (S ∩ T) = (R ∩ S) ∩ T.
A operação DIFFERENCE não é comutativa:
R - S ǂ S - R.

Continue navegando