Alexandre Mota acm@cin.ufpe.br
Categorias
Operadores de conjuntos: estrutura de tupla de uma relação é irrelevante. Tuplas poderiam ser vistas como átomos
Três constantes
none conjunto vazio (unária) univ conjunto universo (unária) iden identidade (binária)
Constantes
Example
Um modelo com dois conjuntos
Name= {(N0), (N1), (N2)}
Addr= {(D0), (D1)}
possui constantes com os seguintes valores none = {}
univ = {(N0), (N1), (N2), (D0), (D1)}
Operadores de conjuntos + união & interseção − diferença in continência (subconjunto) = igualdade
Podem ser aplicados a qualquer par de relações, desde que tenham a mesma aridade
Operadores de conjuntos Example Name= {(G0), (A0), (A1)} Alias = {(A0), (A1)} Group= {(G0)} RecentlyUsed = {(G0), (A1)} Alias +Group= {(G0), (A0), (A1)}
Alias &RecentlyUsed= {(A1)}
Name−RecentlyUsed = {(A0)}
RecentlyUsed in Alias resulta em falso
RecentlyUsed in Name resulta em verdadeiro
Operadores relacionais −> seta (produto) . ponto (junção) [] caixa (junção) ~ transposta ^ fecho transitivo
∗ fecho transitivo reflexivo <: restrição de domínio :> restrição de imagem ++ sobreposição
Operadores Relacionais - Seta Produto
Definition
O operadorseta produto ou produtop −>qde duas relaçõespe q
é a relação que toma toda combinação de uma tupla depe de q, concatenando-as.
Example
Name= {(N0), (N1)}
Addr= {(D0), (D1)}
Book= {(B0)}
possui constantes com os seguintes valores
Name−> Addr= {(N0,D0), (N0,D0), (N1,D0), (N1,D1)}
Book−>Name−> Addr= {(B0,N0,N0), (B0, N1,N1),} (B0, N2,N2),(B0,D0,D0), (B0,D1,D1)}
Definition
Para combinar duas tuplas
s1→ s2 → . . . → sm t1 → t2→ . . . → tn
verificamos os átomos sm e t1 casam. Se não, o resultado é vazio (não há junção). Se sim, resulta na tupla que começa com o átomo da primeira tupla e finaliza com os átomos da segunda, omitindo átomo de casamento.
Operadores Relacionais - Ponto Junção Example Junção de tuplas {(N0,A0)} . {(A0,D0)} = {(N0,D0)} {(N0,D0)} . {(N0,D0)} = {} {(N0,D0)} . {(D1)} = {} {(N0)} . {(N0,D0)} = {(D0)} {(N0,D0)} . {(D0)} = {(N0)} {(B0)} . {(B0,N0,D0)} = {(N0,D0)}
A junçãop.qdas relaçoes pe qé a relação obtida tomando
tomando toda combinação de tupla empe q, incluindo a junção, se existir. A relaçõespeqpodem ter qualquer aridade
No caso de relações binárias,p.qé a composição relacional padrão
Example
Dada a relaçãoto, que mapeia mensagens em nome, e a relação
address, que mapeia nomes em endereços,
to = {(M0,N0), (M0,N2), (M1,N2), (M2,N3)}
address = {(N0,D0), (N0,D1), (N1,D1), (N1,D2), (N2,D3), (N4,D3)}
a relaçãoto.address mapeia mensagens em endereços
Operadores Relacionais - Ponto Junção
Sepe qsão funções, p.qtambém é função.
Example
Dada as funções address, user e host
address = {(N0,D0), (N1,D0), (N2,D2)}
user = {(D0,U0), (D1,U1), (D2,U2)}
host = {(D0,H0), (D1,H1), (D2, H2)}
a expressãoaddress.user e address.host são funções que mapeiam um nome em um correspondente e um host, respectivamente,
address.user = {(N0,U0), (N1,U0), (N2,U2)}
Se sé um conjunto e r uma relação binária, s.r é a imagem do conjunto s sob a relação r
Se xé um escalar e r uma relação binária,x.r é o conjunto de átomos mapeados por x
Para uma função f e um escalar xno seu domínio, x.f é o escalar de f mapeado por x
Operadores Relacionais - Ponto Junção
Example
Dadas a relação addresse os conjuntos abaixo
address = {(G0,A0), (G0,A1), (A0,D0), (A1, D1)}
Alias = {(A0), (A1)}
Group= {(G0)}
Addr= {(D0), (D1), (D2)} temos as seguintes expressões
Alias.address = {(D0), (D1)}
Group.address = {(A0), (A1)}
address.Group= {}
Junções de relações de aridade maior são comuns, principalmente na formax.qe q.x, ondex é um escalar eq, uma multi-relação.
Example Dados b = {(B0)} addr = {(B0,N0,D0), (B0,N1,D1), (B1,N2,D2)} então b.addr= {(N0,D0), (N1, D1)}
Operadores Relacionais - Ponto Junção Example Dados t = {(T1)} addr = {(N0,D0,T0), (N0,D1,T1), (N1,D2,T0), (N1,D2,T1)} então addr.t = {(N0,D1), (N1, D2)}
Example Dados addr = {(B0,N0,D0,T0), (B0,N0,D1,T1), (B0, N1,D2,T0), (B0, N1,D2,T1), (B1, N2,D3,T0), (B1, N2,D4,T1)} t = {(T1)} b = {(B0)} então b.addr.t = {(N0,D1), (N1,D2)}
Operadores Relacionais - Caixa Junção
Definition
O operador [] é semanticamente idêntico à junção, mas toma argumentos em ordem diferente e possui precedência diferente. A expressão
e1[e2]
tem o mesmo significado que
e2.e1
Example
Dada a relaçãoaddress e um escalar n, a expressão address[n] é equivalente an.address
O operador . possui mais alta precedência que []. Assim, a.b.c[d] é uma abreviação parad.(a.b.c)
Example
Dada a relação ternáriaaddr, que associa catálogos, nome e endereços, a expressãob.addr[n] denota o conjunto de endereços associados com o nomenno catálogob. Equivalente an.(b.addr)
Operadores Relacionais - Transposta
Definition
A transposta~rde uma relação binária r toma a imagem
"espelhada", formando uma nova relação revertendo a ordem dos átomos em cada tupla.
Example
Dada a relaçãoaddress
address = {(N0,D0), (N1,D0), (N2,D2)} a transposta resulta em
Uma relação binária ésimétrica quando contém a tupla
a −>be também a tuplab −>a. Como restrição relacional temos ~ r in r
O fecho simétricode uma relação r é a menor relação que contém r e é simétrica. É igual a r + ~r
Example
Uma relação connects mapeando hosts para computadores vizinhos seria simétrica se suas conexões fossem bidirecionais
Operadores Relacionais - Transposta
Alguns fatos úteis
s.~r é igual a r.s
r.~r é a relação que associa dois átomos no domínio da relação r quando mapeiam para um elemento comum. Se r é uma função, r.~r é a relação de equivalência que iguala átomos com a mesma imagem
r.~r in iden estabele quer é injetiva. ~r.r in idendiz que r é funcional
Example
Semaeé a relação que mapeia uma criança em sua mãe, a
expressãomae.~maeé a relação que associa um irmão com outro e consigo mesmo.
Definition
Uma relação binária é transitiva se, quando contém as tuplas
a −>be b−>c, também contiver a −> c. Em termos relacionais temos: r.r in r
O fecho transitivo de uma relação r, denotado por^ré a menor relação que contém r e a transitividade da mesma
Operadores Relacionais - Fecho transitivo
Example
Uma relaçãoaddress representando um catálogo com vários níveis e seu fecho transitivo
address = {(G0,A0), (G0,G1), (A0,D0), (G1, D0), (G1, A1), (A1, D1), (A2,D2)} ^address = {(G0,A0), (G0,G1), (A0,D0), (G1,D0) (G1, A1), (A1, D1), (A2,D2) (G0, D0), (G0, A1), (G1,D1) (G0, D1)}
Uma relação é reflexiva se contém a tuplaa −>a para cada átomoa
Como restrição relacional: iden in r
O fecho transitivo reflexivo, denotado por∗r, é a menor relação que contém r e é tanto transitiva quanto reflexiva
Operadores Relacionais - Restrições de domínio e imagem
Definition
Os operadores de restrição são usados para filtrar relações a um dado domínio ou imagem.
A expressão s <:r, formada a partir de um conjunto se de uma relação r, contém aquelas tuplas de r que começam com um elemento de s
De forma similar, r :>scontém as tuplas de r que finalizam com um elemento de s
Example address = {(G0,A0), (G0,G1), (A0,D0), (G1, D0), (G1, A1), (A1, D1), (A2,D2)} Alias = {(A0), (A1), (A2)} Group= {(G0), (G1)} Addr= {(D0), (D1), (D2)} address :>Addr= {(A0,D0), (G1,D0), (A1,D1), (A2,D2)} address :> Alias = {(G0,A0), (G1,A1)} Group<:address= {(G0,A0), (G0,G1), (G1, D0), (G1,A1)}
Operadores Relacionais - Restrições de domínio e imagem
range(s <:r) =s.r domain(r:>s) = r.s
Definition
A sobreposiçãop ++qde uma relação ppor uma relaçãoq
assemelha-se à união, exceto pelo fato de que as tuplas deqpodem substituir as tuplas dep, em vez de aumentar o conjunto
Operadores Relacionais - Sobreposição
Example
Um catálogo representado por duas relações
homeAddress= {(A0, D1), (A1,D2), (A2,D3)}
workAddress = {(A0,D0), (A1,D2)}
O endereço preferido é o do trabalho, se existir, senão o residencial
A sobreposição pode ser definida em termos de operadores mais simples
Operadores Relacionais - Sobreposição
Sobreposição é útil para modelar inserções em tipos de dados descritos por mapeamento. Também modela comando de atribuição de programas
Example
Inserção de uma chavek com valorvem um hashmap
m’ =m++k−>v
Example
O ambienteeé uma relação que mapeia variáveis em referências a objetos. O efeito da atribuição
x =y
com variáveis em ambos os lados é
Example
O comando
x.f =y
ondexe ysão variáveis e f é um atributo (campo) pode ser descrito por
f’ =f++ x.e−>y.e
onde f e f’ representam os valores do atributo f antes e depois da execução do comando