Bancos de Dados
6. Álgebra Relacional e
Álgebra Relacional
• Além da definição da estrutura e das restrições do banco de dados, o modelo de dados deve incluir um conjunto de
operações para manipular os dados
• A álgebra relacional é o conjunto de operações previsto no modelo relacional
• Essas operações possibilitam a especificação de operações básicas de recuperação de dados
• Uma seqüência de operações forma uma expressão da álgebra relacional
Álgebra Relacional
• Operações de conjunto
– UNIÃO (UNION)
– INTERSEÇÃO (INTERSECTION)
– DIFERENÇA entre conjuntos (DIFFERENCE)
• Operações concebidas especificamente para BD relacionais
– SELECIONAR (SELECT) – PROJETAR (PROJECT) – JUNTAR (JOIN)
• Operações adicionais
– RENAME, produto cartesiano, DIVISÃO
– SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT – Fechamento recursivo, outer join, outer union,
SELECT
• A operação SELECT é usada para selecionar um
subconjunto das tuplas de uma relação que satisfaça a uma condição de seleção
• A condição de seleção constitui um filtro, e é uma
expressão booleana especificada sobre os atributos da relação
• Ex.: selecionar empregado cujo departamento seja 4
σ
NUD=4(EMPREGADO)• Ex.: selecionar empregado cujo salário seja inferior a 2000
SELECT
• Notação genérica
σ
<condição>(R)– R é uma expressão da álgebra relacional, cujo resultado é uma relação; a expressão mais simples é o nome de uma relação – A relação resultante de
σ
possui os mesmos atributos de R – A condição pode ser constituída de cláusulas relacionadas poroperadores booleanos ou de comparação
SELECT
• SELECT é um operador unitário, ou seja, é aplicado a apenas uma relação
• A condição de seleção é aplicada a cada tupla
individualmente, e portanto as condições de seleção não podem envolver mais de uma tupla
• O grau da relação resultante é o mesmo de R
• O número de tuplas da relação resultante é menor que ou igual ao número de tuplas em R
• A fração das tuplas selecionadas é chamada de seletividade da condição
SELECT
• SELECT é comutativa:
σ
<cond1>(σ
<cond2>(R)) =σ
<cond2>(σ
<cond1>(R))• Uma cascata de seleções pode ser combinada usando “E”
PROJECT
• Enquanto SELECT filtra algumas linhas da tabela, PROJECT seleciona algumas colunas
• É usada quando se tem interesse em apenas alguns dos atributos de uma relação, daí o nome: “projetar” a relação ao longo desses atributos
• Ex.:
π
NOME, SOBRENOME, SALÁRIO(EMPREGADO) • Forma genérica:PROJECT
• Caso a lista de atributos inclua somente atributos que não são chave de R, é possível que ocorram tuplas duplicadas, o que faria com que o resultado não fosse uma relação
válida
– PROJECT elimina tuplas duplicadas do resultado
– Se a lista de atributos for uma superchave de R, então o número de tuplas resultante é igual ao número de tuplas de R
• O grau da relação resultante é sempre menor que ou igual ao grau de R
• O número de tuplas da relação resultante é sempre menor que ou igual ao número de tuplas em R
PROJECT
• Propriedades:
π<lista 1>(π<lista 2) (R)) = π<lista 1>(R)
– (apenas se lista 2 contiver os atributos de lista 1, senão a expressão é inválida)
RENAME e seqüências de
operações
• As relações exibidas na fig. 7.8 não têm nome
• Pode ser interessante atribuir um nome a uma relação
resultante de uma expressão algébrica, para uso futuro ou como resultado intermediário de uma operação mais
complexa
• Ex.: listar nome e salário dos empregados do depto. 5
π
NOME, SOBRENOME, SALARIO(σ
NUD=5(EMPREGADO))• Equivale a:
– DEP5_EMP <-
σ
NUD=5(EMPREGADO))RENAME e seqüências de
operações
• É possível renomear atributos:
TEMP <-
σ
NUD=5(EMPREGADO))R(N, SN, SAL) <-
π
NOME, SOBRENOME, SALARIO(DEP5_EMP)• Notação
ρ
S(B1, B2, ..., Bn)(R) : renomeia atributos e a relaçãoρ
S(R) : renomeia apenas a relaçãoρ
(B1, B2, ..., Bn)(R) : renomeia apenas os atributosOperações da Teoria de
Conjuntos
• A álgebra relacional inclui operações típicas de conjuntos, como UNIÃO, INTERSEÇÃO e DIFERENÇA entre
conjuntos
• Servem para combinar resultados
– Ex.: empregados que trabalham no depto 5 OU que supervisionam diretamente um empregado do depto 5
DEP5_EMP <- σNUD=5(EMPREGADO))
RESULTADO1 <- πNSS(DEP5_EMP)
RESULTADO2(NSS) <- πNSSSUPER(DEP5_EMP)
RESULTADO <- RESULTADO1 RESULTADO2 ∪
Operações da Teoria de
Conjuntos
• As operações UNIÃO, INTERSEÇÃO e DIFERENÇA são binárias, ou seja, cada uma é aplicada a dois conjuntos
• Quando adaptadas a BD relacionais, definiu-se que as duas relações devem possuir o mesmo tipo de tuplas:
compatibilidade para união
• Duas relações R(A1, A2, ..., An) e S(B1, B2, ..., Bn) são consideradas compatíveis para união quando
– possuem o mesmo grau (n)
Operações da Teoria de
Conjuntos
• Definições (aplicam-se a relações compatíveis para união):
– UNIÃO: O resultado, , é uma relação que inclui todas as tuplas que estão em R ou em S ou em ambos. Tuplas duplicadas são eliminadas.
– Interseção: o resultado, , é uma relação que inclui todas as tuplas que estão tanto em R quanto em S
– Diferença: o resultado, R-S, é uma relação que inclui todas as tuplas que estão em R, porém não estão em S.
• R – S <> S – R
• Adota-se a convenção de que a relação resultante possui os mesmos nomes de atributos que a primeira relação (R)
S R ∪
S R ∩
Operações da Teoria de
Conjuntos
• Propriedades R S S R Porém T S R T S R T S R T S R idade Associativ R S S R R S S R dade Comutativi − ≠ − ∩ ∩ = ∩ ∩ ∪ ∪ = ∪ ∪ ∩ = ∩ ∪ = ∪ ) ( ) ( ) ( ) ( : :Produto Cartesiano
• Também conhecida como “produto cruzado” (cross product) ou “junção cruzada” (cross join), serve para combinar exaustivamente tuplas de duas relações
) , , , , , , , ( ) , , , ( ) , , , (A1 A2 An S B1 B2 Bm Q A1 A2 An B1 B2 Bm R K × K → K K
Produto Cartesiano
• A relação resultante Q tem n + m atributos, ou seja, a soma do grau das duas relações R e S originais
• Se R possui nR tuplas, e S possui nS tuplas, então Q terá nR * nS tuplas
• Aplicada individualmente, a operação de produto
cartesiano faz pouco sentido; deve ser seguida por uma seleção
• Ex.: selecionar empregados do sexo feminino e seus dependentes ) _ ( ) _ ( _ _ _ ) _ ( _ ) ( _ _ , , , , " " ATUAIS S DEPENDENTE RESULTADO EMP S DEPENDENTE ATUAIS S DEPENDENTE DEPENDENTE EMP NOMES EMP S DEPENDENTE MULHERES EMP EMP NOMES EMPREGADO MULHERES EMP dependente nome sobrenome nome NSSE NSS nss sobrenome nome F sexo π σ π σ ← ← × ← ← ← = =
Produto Cartesiano
• O que faz sentido no produto cartesiano é a seleção de
combinações de tuplas apenas no caso em que existe algum relacionamento, como no exemplo
• Como esse tipo de operação é realizado com muita freqüência, o modelo relacional inclui uma operação
especial, chamada JUNÇÃO, para fazer todas as operações como as do exemplo em um único passo
JOIN
• Utilizada para combinar tuplas relacionadas de duas relações em uma única tupla
• É a operação que viabiliza os relacionamentos entre relações
• Nesse caso, JOIN substitui um produto cartesiano seguido de uma seleção
• Ex:
GER_DEP <- DEPARTAMENTO NSSGER=NSS EMPREGADO
JOIN
• Na operação anterior, NSSGER é uma chave estrangeira de DEPARTAMENTO em EMPREGADO
• A operação é viabilizada pela restrição de integridade referencial, que garante que existam tuplas relacionadas • O mesmo resultado pode ser obtido usando:
• Ou: ) _ ( _ _ _ EMP S DEPENDENTE ATUAIS S DEPENDENTE DEPENDENTE EMP NOMES EMP S DEPENDENTE NSSE NSS= ← × ← σ
JOIN
• Notação completa: a junção de duas relações R(A1, A2, ..., An) e S(B1, B2, ..., Bm) é denotada por
• O resultado da junção é uma relação Q(A1, A2, ..., An, B1, B2, ..., Bm), com n+m atributos
• Q possui uma tupla para cada combinação de tuplas de R e de S que satisfaça à condição de junção
JOIN
• A condição geral de junção é da forma
– <condição> E <condição> E ... E <condição>
– Cada condição individual é da forma Ai θ Bj, sendo θ um dos operadores de comparação (<, >, =, <>, >=, <=)
– Ai é um atributo de R, Bj é um atributo de S, e o domínio de ambos é o mesmo
– Tuplas cujos atributos de junção sejam nulos não aparecem no resultado
– JUNÇÃO TETA
• Quando a operação é apenas a igualdade, a operação é denominada EQUIJUNÇÃO (EQUIJOIN)
JUNÇÃO NATURAL
• No resultado da equijunção, um par de atributos com
valores idênticos faz parte do resultado, o que é supérfluo • A junção natural é definida como uma equijunção seguida
da remoção desses atributos, e é denotada com “*”
• Na junção natural exige-se que os nomes dos dois atributos sejam idênticos Æ atributo de junção
• Ex: renomear o atributo NUMERODEP para NUMD e realizar a junção natural
Álgebra Relacional: operações
• Foi demonstrado matematicamente que o conjunto básico de operações da álgebra relacional (σ, π,U, -, X) é completo
– Qualquer uma das outras operações da álgebra pode ser definida em função dessas operações
– Interseção pode ser definido em função de união e diferença
– Junção pode ser definida em função de produto cartesiano e seleção – Junção natural pode ser definida em função de produto cartesiano,
renomear, selecionar e projetar
• No entanto, não é conveniente especificar operações complexas sempre que for necessário usar algumas dessas operações
DIVISION
• Útil para alguns tipos especiais de consulta
– Ex.: recuperar os nomes dos empregados que trabalham nos mesmos os projetos nos quais “John Smith” trabalha
SMITH Å
σ
NOME=’JOHN’ e SOBRENOME=’SMITH’(EMPREGADO)SMITH_NUMPS Å
π
NUMP(TRABALHA_EM NSSE=NSSSMITH)NSS_NUMPS Å
π
NSSE,NUMP(TRABALHA_EM)NSSS(NSS) Å NSS_NUMPS
÷
SMITH_NUMPSDIVISION
• A definição formal de DIVISION é a seguinte:
– R(Z) ÷ S(X), onde X está contido em Z e ambos são conjuntos de atributos
– Seja Y = Z – X (ou seja, Z é a união de X e Y, e Y é o conjunto de atributos de R que não estão em S)
– O resultado da divisão é uma relação T(Y) que inclui cada tupla t para a qual tR[Y] = t e tR[X] = tS para todas as tuplas tS em S.
– Para figurar no resultado, os valores em t devem aparecer em R em combinação com todas as tuplas de S
Operações Relacionais
Adicionais
• Agregação e agrupamento • Fechamento recursivo
Agregação e Agrupamento
• Operações como SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT aplicadas a grupos de tuplas ou a toda a relação
• Notação:
– <atributos de agrupamento>
F
<lista de funções>(R)• Exemplo:
ρR(NUD,NUM_EMPR,MÉDIA_SAL)(NUD F COUNT NSS, AVERAGE SALARIO(EMPREGADO))
• Caso nenhum atributo de agrupamento seja especificado, o resultado é uma relação com uma única tupla
– Mesmo que a tupla resultante tenha um só atributo, ainda assim o resultado é uma relação
Operações de Fechamento
Recursivo
• Aplicada a auto-relacionamentos
• Exemplo: selecionar todos os empregados supervisionados por um empregado dado, em todos os níveis (ou seja,
retornar os supervisionados diretos, mais os supervisionados destes, e assim por diante)
• Em geral não é possível especificar esse tipo de consulta com um número indeterminado de níveis sem recorrer a algum mecanismo de looping
Outer Join e Outer Union
• Extensões de Join e de Union
• Na junção natural R * S apenas figuram tuplas que se
combinam, portanto as demais são eliminadas do resultado, junto com tuplas com nulo nos atributos de junção
• Outer Joins permitem manter todas as tuplas de R (ou de S), mesmo que não possuam correspondente na outra relação
Outer Join
• Exemplo: listar todos os empregados e os departamentos que gerenciam, caso gerenciem algum departamento
– Usa LEFT OUTER JOIN
TEMP Å EMPREGADO NSS=NSSGERDEPARTAMENTO)
Outer Join: outras formas
• LEFT OUTER JOIN • RIGHT OUTER JOIN • FULL OUTER JOIN
Outer Union
• Realiza a união entre duas relações mesmo que elas não sejam totalmente compatíveis para união
– É esperado que a lista de atributos compatíveis para união inclua uma chave para ambas as relações
– Tuplas com a mesma chave são representadas apenas uma vez, com valores para todos os atributos
– Atributos não compatíveis para união são mantidos no resultado, e tuplas que não possuem valores para esses atributos recebem valor nulo
• Ex: ALUNO(Nome, CPF, Departamento, Nota) e PROFESSOR (Nome, CPF, Departamento, Disciplina) retorna R(Nome, CPF, Departamento, Nota, Disciplina)
– Tuplas de alunos terão valor nulo em DISCIPLINA e tuplas de professores terão valor nulo em NOTA
Exemplos de Consultas
• Vide seção 6.5 do livro texto
• Essas consultas são repetidas no cap. 8, sob a forma de expressões SQL
Cálculo Relacional
• O cálculo relacional (também chamado de cálculo
relacional de tuplas) é uma linguagem formal de consultas voltada ao modelo relacional
• Enquanto a álgebra relacional é uma linguagem procedural, o cálculo relacional é uma linguagem declarativa (não-procedural)
• A ordem de comandos na álgebra relacional influencia a estratégia para a avaliação da consulta
• No cálculo relacional, a maneira que uma expressão é composta não indica como deve ser avaliada
Cálculo Relacional
• Foi demonstrado que a álgebra relacional e o cálculo relacional têm exatamente o mesmo poder de expressão • Outras linguagens de consulta são definidas por
comparação ao cálculo relacional
– Uma linguagem de consulta L é dita relacionalmente completa se for possível expressar em L qualquer consulta que possa ser
formulada em cálculo relacional
• A maioria das linguagens de consulta é relacionalmente completa, e tem poder de expressão maior do que o do cálculo relacional, devido ao acréscimo de operações
Variáveis de Tupla
• Uma variável de tupla cobre toda uma relação, ou seja, a variável pode assumir, como valor, qualquer tupla da relação
• As expressões do CR são definidas como conjuntos
– {t | COND(t)} Æ conjunto das tuplas t que atendem à condição COND
– {t | EMPREGADO(t) AND t.salario > 1000} Æ
conjunto dos dados (tupla completa) de empregado cujo salário seja maior que 1000.
• EMPREGADO(t) define que a relação de extensão da tupla é a relação empregado
– {t.nome, t.dn | EMPREGADO(t) AND t.salario > 1000} Æ retorna apenas o nome e a data de nascimento, dentre os atributos de empregado
Variáveis de Tupla
• Uma expressão do CR contém:
– Para cada variável de tupla t, a relação de extensão para t, na forma R(t)
– Uma condição para selecionar tuplas particulares, que será
avaliada para cada combinação possível de relações de extensão das variáveis de tupla envolvidas
– Um conjunto de atributos que serão recuperados para cada combinação de tuplas que tenha sido selecionada
Expressões e Fórmulas
• Uma expressão do CR é da forma
{t1.Aj, t2.Ak, ..., tnAm | COND(t1, t2, ..., tn, tn+1,... tn+m)}
– t1, t2, ..., tn, tn+1,... tn+m são variáveis de tupla
– Cada Ai é um atributo da relação sobre a qual ti se estende – COND é uma fórmula (ou fórmula bem formada, well-formed
Expressões e Fórmulas
• A fórmula é formada por átomos do cálculo de predicados, que podem ser:
– Um átomo na forma R(t), que especifica a relação de extensão – Um átomo na forma ti.A op tj.B, onde op é um operador de
comparação (=, <>, <, >, >=, <=), ti e tj são variáveis de tupla, A é um atributo da relação pela qual ti se estende e B é um atributo da relação pela qual tj se estende
– Um átomo na forma ti.A op c ou c op tj.B, onde c é uma constante
• Cada átomo é avaliado para um valor booleano, chamado valor
verdade do átomo
Expressões e Fórmulas
• A fórmula pode ser definida recursivamente:
1. Cada átomo é uma fórmula
2. Se F1 e F2 são fórmulas, então (F1 AND F2), (F1 OR F2), NOT(F1) e NOT(F2) também são fórmulas
Quantificadores
• Dois símbolos adicionais podem aparecer em fórmulas
– Quantificador universal ( ) – Quantificador existencial ( )
• Uma variável de tupla é livre ou limitada em uma fórmula de acordo com as seguintes regras:
– A ocorrência de uma variável de tupla em uma fórmula F que é um átomo é livre em F
– A ocorrência de uma variável de tupla t é livre ou limitada em uma
fórmula composta por operadores AND, OR, NOT (como F1 AND F2) se ela for livre ou limitada em F1 ou em F2
• Observe que uma variável de tupla pode ser livre em F1 e limitada em F2, ou vice-versa
– Todas as ocorrências livres de uma variável de tupla t em F são limitadas em uma fórmula F’ da forma
ou seja, a variável de tupla fica limitada pelo quantificador especificado em F’ ∀ ∃ ) )( ( ' __ __ ) )( ( ' t F ou F t F F = ∃ = ∀
Quantificadores
• Exemplo
• A variável de tupla d está livre em F1 e F2, mas limitada pelo quantificador em F3 ) ' 333445555 ' . )( ( : 3 ) . . )( ( : 2 ' ' . : 1 = ∀ = ∃ = MGRSSN d d F DNO t DNUMBER d t F RESEARCH DNAME d F
Expressões e Fórmulas,
complemento• A fórmula pode ser definida recursivamente:
1. Cada átomo é uma fórmula
2. Se F1 e F2 são fórmulas, então (F1 AND F2), (F1 OR F2), NOT(F1) e NOT(F2) também são fórmulas
3. Se F é uma fórmula, então também é, e é verdadeira se F puder ser avaliada como verdadeira para alguma (pelo menos uma) tupla designada para ocorrências livres de t em F
4. Se F é uma fórmula, então também é, e é verdadeira se F puder ser avaliada como verdadeira para todas as tuplas (do universo) designadas para ocorrências livres de t em F
) )( (∃t F ) )( (∀t F
Exemplos
• Recuperar os nomes e endereços de todos os empregados que trabalham para o departamento ‘Pesquisa’
• Mais exemplos: seções 6.6.4, 6.6.5, 6.6.6
)} . . __ __ ' ' . __ __ ) ( )( ( __ __ ) ( | . , . { NUMDEP t NUMERODEP d AND Pesquisa NOMEDEP d AND d DEPTO d AND t EMPREGADO ENDERECO t NOME t = = ∃
Expressões Seguras
• Uma expressão segura do cálculo relacional é aquela que, garantidamente, produz um número finito de tuplas como resultado.
• A expressão {t | NOT (EMPREGADO(t))} é insegura,
pois retorna todas as tuplas do universo que não pertencem à relação empregado.
Cálculo Relacional de Domínio
• O cálculo relacional de tuplas é a base para o SQL, e foi desenvolvido em um centro de pesquisa da IBM
• O cálculo relacional de domínio foi desenvolvido ao
mesmo tempo em outro centro de pesquisa da IBM, e é a base para a linguagem QBE (Query By Example)
Referências
• Capítulo 6 de Elmasri & Navathe
• Codd, E. A Relational Model for Large Shared Data Banks. Communications of the ACM 13:6, June 1970.