Вы находитесь на странице: 1из 12

Processamento de Transações

•Gerenciar dados é uma tarefa crítica em todas as organizações.


•SGBD oferece o melhor ambiente para armazenar e recuperar os dados em um modo econômico.
•Os usuários do SGBD realizam operações de acesso aos dados durante a execução dos processos
diários.
•A essas operações de escrita ou leitura chamamos de transações.
Elementos chave no gerenciamento
•Objeto: o menor dado que é lido ou atualizado pela transação.
•Transação (T): é definida como sendo a execução do SQL pelo SGBD.
•Operação de Leitura (R): é a recuperação dos dados dentro da transação.
•Operação de escrita (W): é a atualização dos dados dentro da transação.
•COMMIT: termo utilizado para encerrar a transação com sucesso.
•ABORT: termo utilizado para encerrar a transação sem sucesso.
Gerenciamento de Transação
•Inúmeros algoritmos são utilizados para gerenciar o acesso dos diferentes usuários a um dado SGBD.
•Para garantir que o SGBD irá atender aos acessos, deve-se permitir certas execuções concorrentes.
•O Gerenciador de Transações é o responsável por programar as transações e prover meios seguros de
completá-las.
ACID
•Para manter os dados durante a fase de acesso concorrente e em caso de falhas do sistema, o SGBD
necessita garantir quatro importantes propriedades.
•Essas propriedades são chamadas de ACID. Cujo significado é: Atomicidade, Consistência,
Isolamento e Durabilidade.
•As relações mais fortes entre essas propriedades são entre Atomicidade e Durabilidade e Consistência
e Isolamento.
Atomicidade
•Ou todos os comandos da transação são executados ou nenhum é. Isto significa que a transação não
pode ser subdividida, e mais ela deve ser processada em sua totalidade ou não ser processada.
•Em caso de falha de sistemas os usuários do SGBD não devem se preocupar com o resultado e ter a
certeza de que o banco não ficará num estado inconsistente.
Durabilidade
•Visa a persistência do resultado das transações no banco de dados.
•Se os resultados forem persistidos para o banco, esses dados não serão alterados a não ser por uma
nova transação.
•Para que seja possível desfazer transações incompletas em caso de falha é que existem os arquivos de
log, os quais são escritos antes da efetivação dos dados.
Consistência
•Define que o sistema permanecerá em um estado consistente antes e depois de concluir a transação.
Independente se foi concluída com sucesso ou não.
•Esta propriedade define que apenas dados consistentes serão escritos para o banco e que em caso de
inconsistência de algum comando, todos os demais serão desfeitos.
Isolamento
Refere-se ao requisito de que os dados parciais de uma transação não devem ser visualizados ou
manipulados por outra transação concorrente até que a transação principal seja finalizada.
Concorrência baseada em bloqueios
•Controle de concorrência é o que garante que as transações no SGBD são executadas e finalizadas de
modo seguro e consistente.
•Para implementar este controle foram criados os mecanismos de bloqueio (locks) dos recursos
utilizados em cada transação.
•Este é o melhor método por tomar o menor custo de tempo e a menor complexidade de programação
do gerenciador.
Bloqueio (Lock)
•É uma propriedade dos objetos de banco definida durante as transações.
•É um tipo de permissão concedida pelo gerenciador de transação às transações para realizar operações
sobre os objetos de interesse.
•Cada transação interessada num dado objeto deve obter esta autorização do gerenciador para
manipular o objeto.
•Basicamente, todo dado solicitado para ser atualizado deve bloqueado para aquela transação e ter o
acesso negado para as demais.

Transações serializadas

•As transações são concorrentes e acontecem em paralelo dentro do SGBD.


•Quando duas transações concorrem por um dado objeto, é utilizado o mecanismo de bloqueio (lock)
para serializar tais transações e garantir a consistência dos dados.

Tipos básicos de bloqueio (lock)

•Shared Lock: significa que um mesmo objeto (ex.:tabela) pode receber mais de um lock de transações
diferentes simultaneamente, desde que em registros distintos.
•Exclusive Lock: significa que um dado objeto não pode ter mais de um lock implementado
simultaneamente.

Deadlock

•É a ocorrência de locks bloqueando objetos de modo que transações concorrentes passam a depender
dos mesmos objetos e por isso não podem ser finalizadas normalmente.
•Acontecem com mais facilidade quanto são estipulados locks do tipo exclusivo.
•Por meio de algoritmo de recuperação o SGBD irá abortar uma das transações e dar seguimento na
outra.

Exemplo de deadlock

•T1, T2 e T3 são transações


•O1, O2, e O3 são objetos
•As transações começam com T1 e T3 definindo lock exclusivo sobre os objetos O1 e O3,
respectivamente.
•O deadlock (DL) surge após T1 e T3 solicitarem acesso de escrita aos objetos O3 e O1,
respectivamente.
•Uma vez que eles já estão bloqueados, as novas solicitações ficaram pendentes e um deadlock
acontecerá.
Introdução
A Álgebra Relacional é uma linguagem de consulta formal, porém procedimental, ou seja, o
usuário dá as instruções ao sistema para que o mesmo realize uma seqüência de operações na base
de dados para calcular o resultado desejado.

Formalmente, na terminologia formal de modelo relacional:

• Uma linha é chamada de tupla


• O cabeçalho da coluna é chamado de atributo
• Tabela é chamada de relação
• O tipo de dados que descreve os tipos de valores que podem aparecer em cada coluna é
chamado de domínio

A álgebra relacional é uma forma de cálculo sobre conjuntos ou relações.

Há seis operações fundamentais na álgebra relacional. Estas operações


são: seleção, projeção, renomear, produto cartesiano, união e diferença entre conjuntos. Todas essas
operações produzem uma nova relação como seu resultado.

Em adição às operações fundamentais há outras de uso comum que são frequentemente


utilizadas: interseção de conjuntos, junção natural, divisão e junção theta.

Uma aplicação prática da álgebra relacional é na execução de consultas a bancos de dados


relacionais. Por essa razão, foram criadas novas operações, denominadas estendidas, que
são: Eliminação de duplicatas, ordenação,agrupamento e agregação e junção externa.

As álgebras relacionais recebiam pouca atenção até a publicação do modelo relacional de dados
de E.F Codd, em 1970. Codd propôs tal álgebra como uma base para linguagens de consulta em
banco de dados.

A álgebra relacional tem poder de expressão essencialmente equivalente ao do cálculo relacional


(também ao da Lógica de primeira ordem); esse resultado é conhecido como teorema de Codd.
Algum cuidado, porém, deve ser tomado para evitar divergência que pode surgir entre as duas
linguagens, já que a negação, aplicada a fórmula do cálculo, constrói uma fórmula que pode ser
verdadeira em um grupo infinito de tuplas possíveis, enquanto o operador de diferença da álgebra
relacional retorna um resultado finito. Para sobrepor essas dificuldades, Codd restringiu os operados
da álgebra relacional somente para relações finitas, e também propôs uso restrito da negação (NOT)
e disjunção (OR). Analogamente restrições são encontradas em muitas outras linguagens de
computação baseadas em lógica. Codd definiu o termo completeza relacional para referir uma
linguagem que é completa no que diz respeito a calculo de predicados de primeira ordem à parte
das restrições por ele propostas. Na prática as restrições não tem efeito adverso na aplicabilidade
da álgebra relacional para propósitos de banco de dados.

[editar]Operadores Primitivos
Como em qualquer álgebra, alguns operadores são primitivos e os outros, que são descritos em
termos dos primitivos, são definidos como derivados. É útil que a escolha dos operadores paralelos
primitivos faça uso dos operadores lógicos primitivos. Embora seja sabido que na lógica do E, OU e
NÃO a escolha é um pouco arbitrária, Codd usou de escolha semelhantes para a sua álgebra.

Os seis operadores primitivos de Codd na álgebra são o de seleção, projeção, produto


cartesiano(também chamado de produto cruz ou junção cruz), união, diferença e renomeação. (Na
verdade, Codd omite o renomear, para proceder, mas a sua inclusão foi mostrada pelos inventores
da ISBL.) Estes seis operadores são fundamentais no sentido de que nenhum deles pode ser omitido
sem perder poder expressivo. Muitos outros operadores foram definidos em termos destes seis.
Entre os mais importantes são interseção, divisão e o natural join. Na verdade a ISBL fez a
substituição do produto cartesiano pelo natural join, dado que o produto cartesiano é um caso
degenerado.

Ao todo, os operadores da álgebra relacional têm potência expressiva idêntica à de calculo de


domínio relacional ou calculo de tuplas relacionais. No entanto, pelas razões apontadas na
introdução acima, a álgebra relacional tem estritamente menos expressiva do que o poder da lógica
de primeira ordem sem função símbolos. Álgebra relacional efectivamente corresponde a um
subconjunto da lógica de primeira ordem que é a cláusula de horn sem recursão e negação

[editar]Operações de Conjuntos
[editar]Projeção (π)
Ver artigo principal: Projeção (álgebra relacional)

A projeção é uma operação unária escrita como onde é um conjunto


de atributos. O resultado de tal projeção é definida como conjunto que é obtido quando todas

as enuplas em R são restritas ao conjunto .

[editar]Seleção (σ)
Ver artigo principal: Seleção (álgebra relacional)

Uma seleção generalizada é uma operação unária escrita como onde é


uma fórmula proposicional que consiste de atoms como é permitido na seleção normal e operadores

lógicos (e), (ou) e (negação). Esta seleção seleciona todas

as tuplas em R para cada .

[editar]Seleção e cruzamento de produto

Cruzamento de produto é o de maior custo de operação para avaliar. Se a entrada de relação


tem N e M linhas, o resultado irá conter NM linhas. Portanto isso é muito importante para ter um
menor tamanho de ambos os operadores antes de ser aplicado o operador de cruzamento de
produto.
Isso pode ser feito de forma eficaz, se o cruzamento de produto for seguido de um operador de
seleção, ex. σA(R × P). Considerando a definição de seleção, isto é o caso mais provável. Se o
cruzamento de produto não for seguido de um operador de seleção, podemos tentar descer até um
nível mais baixo a partir de níveis mais altos da árvore de expressões usando outra regra de
seleção.
No caso acima quebramos a condição A introduzindo a condição B, C e D usando regras de divisão

sobre complexas condições de seleção, de modo que A = B C


D e B somente contém atributos de R, C contém atributos somente de P e D contém partes
de A que contém os atributos tanto de R como de P. Observe que B, C ou D podem ser
possívelmente vazios. Depois os seguintes detém:

[editar]Renomear (ρ)
Ver artigo principal: Renomear (álgebra relacional)

Renomear é uma operação unária escrita como ρa / b(R) onde o resultado é idêntico ao R exceto
que o campo b em todas as tuplas é renomeado para um campo a. Isto é simplesmente usado para
mudar o nome do atributo de uma relação ou a relação em si.

[editar]Junções e operações com as junções

[editar]Junção natural ( )

Junção natural é uma operação binária que é escrita como (R S) onde R e S são
relações.[1] O resultado da junção natural é uma tabela com todas as combinações das tuplas
em R e S que seu atributos em comum são iguais. Por exemplo, considerando as
tabelas Empregado e Departamento e sua junção natural:

Empregado Empregado Departamento


Nome EmpId DeptNome Nome EmpId DeptNome Gerente
Harry 3415 Finanças Harry 3415 Finanças George
Sally 2241 Vendas Sally 2241 Vendas Harriet
George 3401 Finanças George 3401 Finanças George
Harriet 2202 Vendas Harriet 2202 Vendas Harriet
Departamento
DeptNome Gerente
Finanças George
Vendas Harriet
Produção Charles

Isso também pode ser usado para definir as composição das relações. Na teoria das categorias, a
junção é, precisamente, o produto fibrado.

A junção natural é, indiscutivelmente, uma das mais importante operações visto que ela é a
contraparte relacional do E lógico. Observe com atenção que se as mesmas variáveis forem
utilizadas nos dois predicados que são conectados pelo E, então essa variável representa a mesma
coisa e ambas as aparências sempre devem ser substituídas pelo mesmo valor. Particulamente,
junção natural permite a combinação de relações que são associados por uma chave estrangeira. No
exemplo a seguir, provavelmente existe uma chave estrangeira
em Empregado.DeptNome para Departamento.DeptNome e então a junção natural
de Empregado e Departamento combina todos os empregados com seus departamentos. Note que
isso funciona, porque a chave estrangeira detém os atributos de mesmo nome. Se esse não for o
caso, como em uma chave estrangeira de Departamento.Gerente para Empregado.número-emp,
deve-se, então, renomear essas colunas antes de fazer a junção natural. Essa é, as vezes,
uma equijoin (veja θ-join).

Mais formalmente, a semântica da junção natural é definida como segue:

onde p é um predicado que é verdadeiro para uma relação binária r Se e somente se r é uma
relação funcional binária. Normalmente, é necessário que R e S tenham, pelo menos, um atributo
em comum, mas se essa restrição é omitida, então a junção natural torna-se, exatamente, o produto
cartesiano.
A junção natural pode ser simulada com Codd's primitives, como segue. Supoem-se que b1,
…,bm são nomes de atributos comuns em R, S, a1,…,an são os atributos de nome único de R e c1,
…,ck são os atributos de nome único de S. Além disso, assume-se que os nomes dos atributos d1,
…,dm não são nem de R ou de S. Primeiramente, nós podemos mudar, agora, o nome do atributo
em comum em S:

Então toma-se o produto cartesiano e faz-se a seleção as tuplas que devem ser ligadas:

Finalmente, pegue a projeção para se livrar dos atributos renomeados:

[editar]Anti-junção

A antijunção, escrito como R S onde R e S são relações, é similar à junção natural, mas o
resultado de uma antijunção é apenas aquelas tuplas em R para as quais NÃO existe uma tupla
em S que possua os mesmos nomes de atributos.

Por exemplo, considerando as tabelas Empregado e Departamento e sua antijunção:

Empregado Empregado Departamento


Nome EmpId DeptNome Nome EmpId DeptNome
Harry 3415 Finanças Harry 3415 Finanças
Sally 2241 Vendas George 3401 Finanças
George 3401 Finanças
Harriet 2202 Produção
Departamento
DeptNome Gerente
Vendas Harriet
Produção Charles

A antijunção é formalmente definida como segue:

R S={t:t R s S : fun

(t s) }

ou

R S={t:t R, não existe uma tupla s de S que satisfaz fun

(t s) }

onde fun(r) está definida como na junção natural.

A antijunção também pode ser definida como o complemento da semi-junção, como segue:

R S=R-R S

Sendo assim, a antijunção às vezes é chamada de anti-semi-junção, e o operador de antijunção às

vezes é escrito como um símbolo da semi-junção com uma barra acima, ao invés de .

[editar]Outer Joins
Considerando que o resultado de um join (ou inner join) consiste em combinar tuplas
correspondentes nos dois operandos, um outer join contém essas tuplas e mais algumas formadas
pelo "enchimento" dos valores que não casam em um operador com cada atributo do outro
operador.

Os operadores definidos nessa seção assumem que existe um valor null(ω), que não definem, para
ser utilizado para o "enchimento" de valores. Não se deve assumir que é o NULL definido para a
linguagem SQL, nem que o ω é uma marca em vez de um valor.

Três operadores outer join são definidos: left outer join, rigth outer join, e full outer join. (Algumas
vezes a palavra outer é omitida.)

[editar]Left Outer Join

O left outer join é escrito comoR =X S onde R e S são relações. O resultado do left join é o conjunto
de todas as combinações das tuplas em R e S que seus atributos em comum são iguais , além disso,
tuplas em R que não tem correspondencia em S.

Por exemplo considere as tabelas Empregado e Departamento e seu left outer join:

Empregado Empregado =X Departamento


Nome EmpId DeptNome Nome EmpId DeptNome Gerente
Harry 3415 Finanças Harry 3415 Finanças ω
Sally 2241 Vendas Sally 2241 Vendas Harriet
George 3401 Finanças George 3401 Finanças ω
Harriet 2202 Vendas Harriet 2202 Vendas Harriet
Tim 1123 Executivo Tim 1123 Executivo ω
Departamento
DeptNome Gerente
Vendas Harriet
Produção Charles

Na relação resultante, tuplas em S que não tem valores com os mesmos nomes de atributos com
tuplas em R recebem um valor null, ω.

Dado que não existem tuplas em Departamento com DeptNome igual a Finanças ou Executivo, ωs
aparecem na relação resultante onde tuplas em DeptNome tem Finanças ou Executivo.
Sendo r1, r2, …, rn atributos da relação R e {(ω, …, ω)} os únicos atributos que são unique para a
relação S (aqueles que não são atributos de R). Então o left outer join pode ser excrito em termos
do natural join(utilizando operadores básicos) como segue:

[editar]Right Outer Join

Se comporta da mesma maneira que o anterios, só que os buracos da tabela são comutados.

O right outer join das relações R e S é escrito como R X= S. O resultado do right join é é o conjunto
de todas as combinações das tuplas em R e S que seus atributos em comum são iguais, além disso,
tuplas em S que não possuem correspondênca com tuplas em R.

Por exemplo considere as tabelas Empregado e Departamento e seu right outer join:

Empregado Empregado X= Departamento


Nome EmpId DeptNome Nome EmpId DeptNome Gerente
Harry 3415 Finanças Sally 2241 Vendas Harriet
Sally 2241 Vendas Harriet 2202 Vendas Harriet
George 3401 Finanças ω ω Produção Charles
Harriet 2202 Vendas
Tim 1123 Executivo
Departamento
DeptNome Gerente
Vendas Harriet
Produção Charles

Na relação resultante, tuplas em R que não tem valores com os mesmos nomes de atributos com
tuplas em S recebem um valor null, ω.

Dado que não existem tuplas em Empregado com DeptNome igual a Produção, ωs aparecem na
relação resultante onde tuplas em DeptNome tem tuplas com Produção.
Sendo s1, s2, …, sn atributos da relação S e {(ω, …, ω)} os únicos atributos que são unique para a
relação R (aqueles que não são atributos de S). Então, como no left join, o right outer join pode ser
excrito em termos do natural join(utilizando operadores básicos) como segue:

[editar]Outer Join

O outer join ou full outer join combina os efeitos dos resultados do left e do rigth outer joins.

O full outer join é escrito como R =X= S onde R e S são relações. O resultado do full outer join é o
conjunto de todas as combinações em R e S que são iguais em seus atributos com nomes iguais,
além de tuplas em S que não possuem casamento com tuplas em R e tuplas em R que não possuem
casamento com tuplas em S em seus atributos com nomes iguais.

Por exemplo, considere as tabelas Empregado e Departamento e o outer join:

Empregado Empregado =X= Departamento


Nome EmpId DeptNome Nome EmpId DeptName Gerente
Harry 3415 Finanças Harry 3415 Finanças ω
Sally 2241 Vendas Sally 2241 Vendas Harriet
George 3401 Finanças George 3401 Finanças ω
Harriet 2202 Vendas Harriet 2202 Vendas Harriet
Tim 1123 Executivo Tim 1123 Executivo ω
Departamento ω ω Produção Charles
DeptNome Gerente
Vendas Harriet
Produção Charles

Na relação resultante, tuplas em R que não têm valores em comum nos nomes dos atributos com as
tuplas em S recebem um valor null", ω. Tuplas em S que não têm valores em comum nos nomes dos
atributos com as tuplas em Stambém recebem um valor null", ω.

O full outer join pode ser simulado usando o left e o rigth outer joins (e, conseqüentemente,
o natural join e união) como segue:

R=X=S = (R=XS) (RX=S)

[editar]Operações para o domínio computacional


[editar]Operação de Agregação
Existem cinco operações de agregação que são incluídas na maioria dos bancos de dados. Esses
operadores são Soma, Contagem, Média, Máximo e Minimo. Na álgebra relacional, é escrito
comoExp1,Exp2,Exp3…Gfunc1,func2,func3…(Relação). Enquanto um deve especificar a função a
utilizar, as expressões, porém, são opcionais. Vamos assumir que temos uma tabela chamada Conta
com três colunas, a saber Número_conta, Nome_ramo e Equilíbrio. Queremos encontrar o máximo
de equilíbrio de cada ramo. Isto é realizado por Nome_ramo G Max (Equilíbrio) (Conta). Para
encontrar o maior saldo de todas as contas, independentemente do ramo, poderíamos
simplesmente escrever G Max (Equilíbrio) (Conta).
[editar]Limitação da álgebra relacional
Embora a álgebra relacional pareça suficientemente poderosa para a maioria dos efeitos práticos,
existem alguns operadores simples e naturais nas relações que não podem ser expressos pela
álgebra relacional. O fecho transitivo de uma relação binária é um deles. Dado um domínioD, a
relação binária R é um subconjunto deDxD. O encerramento transitivo R+de R é o menor
subconjunto deDxD contendo'R que satisfaz a seguinte condição:

x y z ((x,y) R+ (y,z)

R+ (x,z) R+)

Isto pode provar que não existe uma expressão de álgebra relacional E(R), tendo R como argumento
variável que produz R+. A prova é baseada no fato de que, dada uma expressão relacional E cujo se
alegou que E(R) = R+, onde R é uma variável, podemos sempre encontrar uma instância r de R(e
um domínio correspondente d), de modo que E( r) ≠' r+.

[editar]Uso das propriedades algébricas para optmização de consultas


Banco de dados relacional pode ser representado como uma árvore, onde

• Os nodos internos são operadores,


• Folhas são as relações,
• Subárvores são sub-expressões;
Nosso principal objetivo é transformar a expressão de árvores expressões equivalentes de árvores,
onde a dimensão média das relações geradas por sub-expressões na árvore são menores do que
eram antes da otimização. Nosso segundo objetivo é tentar formar sub-expressões comuns dentro
de uma única consulta, ou se houver mais de uma consulta a ser avaliada, ao mesmo tempo, em
todas essas consultas. A lógica subjacente é a de que o segundo objetivo é o suficiente para
computar sub-expressões comuns uma vez, e os resultados podem ser utilizados em todas as
consultas que contenham essa sub-expressão.

Aqui, apresentamos um conjunto de regras, que podem ser utilizados em tais transformações.

[editar]Seleção

Regras sobre operadores de seleção desempenham papel mais importante na otimização da busca.
Seleção é um operador que de forma muito eficaz diminui o número de linhas no seu operando, por
isso, se nós conseguirmos passar as seleções em uma árvore de expressão para as folhas, as
relações internas (geradas por sub-expressões) provavelmente irão encolher.

[editar]Propriedades básicas de seleção

Seleção é Idempotência (múltiplas aplicações de seleção não tem o mesmo efeito adicional além do
primeiro), e comutativa (a ordem que as seleções são aplicadas em não tem qualquer efeito sobre o
eventual resultado).

1.

2.
[editar]Quebrando seleções com condições complexas

Uma seleção cuja condição é uma conjunção de condições mais simples é equivalente a uma
seqüência de seleções com as mesmas condições individuais, e a seleção cuja a condição é
uma disjunção é equivalente a uma união de seleções. Essas identidades podem ser usadas para
mesclar seleções de modo que menos seleções precisem de ser avaliadas, ou para dividir-las de
modo a que a componente seleções possa ser movida ou otimizada separadamente.

1.

2.
[editar]Seleção e produto cartesiano

CProduto cartesiano é o operador mais caro de avaliar. Se as relações de entrada têm N e M linhas,
o resultado irá conter NM linhas. Por isso, é muito importante fazer o nosso melhor para diminuir o
tamanho de ambos os operandos antes de aplicar o operador produto cartesiano

Isto pode ser feito eficazmente, se o produto cartesiano é seguido por um operador de seleção, por

exemplo, (R × P). Considerando a definição de join, isto é o caso mais provável. Se o


produto cartesiano não é seguido por um operador de seleção, podemos tentar empurrar para baixo
uma seleção a partir de níveis mais altos da árvore de expressão usando a outra regra de seleção.

[editar]Seleção e operadores de conjuntos

Seleção é distributiva ao longo do setminus, da intersecção e união de operadores. As três regras


seguintes são utilizadas para definir as operações na árvore de expressão. Note, que no setminus e
na intersecção operadores, é possível aplicar o operador seleção apenas em um dos operandos após
a transformação. Isso pode fazer sentido nos casos em que um dos operandos é pequeno, e os
custos gerais da avaliação do operador seleção superam os benefícios de se utilizar uma menor
relação como um operando.

1.

2.

3.
[editar]Seleção e projeção

Seleção é associativo com projeção se e somente se os campos referenciados na condição da


seleção são um subconjunto dos campos na projeção. Fazer a seleção antes da projeção pode ser
útil se o operando é um produto cartesiano ou join. Em outros casos, se a condição da seleção é
relativamente cara para computar, mover a seleção para fora da projeção pode reduzir o número de
tuplas que devem ser testadas (desde que a projeção possa produzir menos tuplas devido à
eliminação de duplicatas).

[editar]Projeção

[editar]Propriedades básicas da projeção

Projeção é idempotente, de forma que uma série de (válido) projeções é equivalente a projeção
externa.
[editar]Projeção e operadores de conjuntos

Projeção é distributiva ao longo da diferença, união e intersecção.

1.

2.

3.
[editar]Renomear

[editar]Propriedades básicas de renomear

Renomear sucessivamente uma variável pode se desmanchar em um único renome. Renomear


operações que não possuem variáveis em comum pode ser arbitrariamente reordenada, uma com
relação a outra, e podem ser aproveitadas para fazer sucessivas renomeações adjacentes.

1.

2.
[editar]Renomear e operações de conjuntos

Renomear é distributivo sobre a diferença, união e intersecção.

1.

2.

3.
[editar]Implementações

A primeira linguagem de consulta que foi baseada na da álgebra Codd foi ISBL, e este trabalho
pioneiro tem sido aclamado por várias autoridades como tendo mostrado o caminho para tornar a
idéia de Codd em uma linguagem útil. Business System 12 foi uma indústria de vida curta que usava
a força do SGBD relacional que o exemplo seguiu do ISBL.

Em 1998, Chris Data e Hugh Darwen propôs uma linguagem chamada Tutorial D destinado a ser
utilizada no ensino de teoria de banco de dados relacional, e sua línguagem de consulta também
usa as ideias do ISBL. Rel é uma implementação do Tutorial D.

Mesmo a linguagem de consulta SQL é vagamente baseado em uma álgebra relacional, embora os
operandos em SQL (tabelas) não são exatamente as relações e diversos teoremas úteis sobre a
álgebra relacional não detêm no SQL homólogo (provavelmente em detrimento da optimisers e / ou
utilizadores).

Вам также может понравиться