Академический Документы
Профессиональный Документы
Культура Документы
Transações serializadas
•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
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.
[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.
[editar]Operações de Conjuntos
[editar]Projeção (π)
Ver artigo principal: Projeção (álgebra relacional)
[editar]Seleção (σ)
Ver artigo principal: Seleção (álgebra relacional)
[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çã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:
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).
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:
[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.
R S={t:t R s S : fun
(t s) }
ou
(t s) }
A antijunção também pode ser definida como o complemento da semi-junção, como segue:
R S=R-R 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.)
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:
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:
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:
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.
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:
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+.
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.
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
1.
2.
3.
[editar]Seleção e projeção
[editar]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
1.
2.
3.
[editar]Renomear
1.
2.
[editar]Renomear e operações de conjuntos
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).