Base de Dados, 2004/2005
Resolução do exame de época de recurso

Pergunta 1: (c)

O conjunto de valores produzidos por Q1 e Q2 é o mesmo. Contudo Q2 pode produzir mais cópias do mesmo tuplo. Por exemplo, se R= {(4,5),(4,8)} e S={(5,3),(8,2),(8,0)}, Q1 retorna 3 tuplos: (4)(4)(4), equanto que Q2 retorna apenas 2 tuplos: (4)(4).

Pergunta 2: (d)

Basta verificar com um exemplo. Se R = {(1,2),(2,1)}, Q1 retorna apenas o tuplo (1,1), o qual não está contido em R e é claramente diferente de R.

Pergunta 3: (d)

Q1 produz uma relação com 3 atributos: a, b, c. Q2 produz uma relação com 4 atributos: a, R.b, S.b, c.

Pergunta 4: (c)

Primeiro vamos mostras com um exemplo que Q1 e Q2 podem não dar o mesmo resultado.

  R:                   S: 
     a b                  a b  
     ---                  ---
     1 2                  1 3
     5 3

Q1 retorna (1) e (5). Q2 retorna apenas (5).

Agora vamos tentar provar que qualquer elemento retornado por Q2 também é retornado por Q1. Se o conseguirmos fazer, fica provado que o resultado de Q2 está contido no resultado de Q1.

Seja 'x' um elemento retornado por Q2. 'x' terá forçosamente de pertencer à coluna 'a' de R e não pertencer à coluna 'a' de S. Se 'x' pertence à coluna 'a' de R, então R terá de ter pelo menos um tuplo da forma (x,y). Este tuplo (x,y) pertence a R mas nunca poderá pertencer a S (porque 'a' não pode pertencer à coluna 'a' de S). Isto é, 'x' aparecerá forçosamento no output de Q1. Está demonstrado!

Pergunta 5: (a)

Ambas as queries produzem os tuplos de R para os quais a componente b seja igual à componente d de algum tuplo de S.

Pergunta 6: (b)

Em SQL, INTERSECT elimina os tuplos repetidos.

Pergunta 7: (c)

A expressão nunca poderá ser FALSE. Se a e b forem ambos diferentes de NULL, então a expressão é sempre verdadeira. Se a e b forem ambos NULL, a expressão dá UNKNOWN. Se a for NULL e b for diferente de NULL, então a expressão poderá ser TRUE ou UNKNOWN (consoante b>=0 ou b<0). Finalmente, se b for NULL e a for diferente de NULL, a expressão também apenas poderá ser TRUE ou UNKNOWN (consoante a<=0 ou a>0).

Pergunta 8: (a)

A view V(d,c) ficaria com os tuplos (2,3), (12,2) e (12,1). A view W(d,e) ficaria com os tuplos (2,3) e (12,3). O SELECT iria retornar apenas o tuplo (7,3). Logo, a soma dos componentes é 10.

Pergunta 9: (c)

Q2 nem sequer é SQL válido. Q1 obtém o resultado pretendido, e Q3 também (a solução de Q3 é semelhante aquela que foi feita nas aulas praticas em álgebra relacional).

Pergunta 10: (c)

Como a é chave primária, não poderá ter valores repetidos. b não tem qualquer tipo de restrição e poderá ter valores repetidos. Logo, o número de valores distintos para o atributo a nunca poderá ser inferior ao número de valores distintos para o atributo b.

Pergunta 11: (c)

I viola a integridade referencial caso S tenha algum tuplo em que a=3. II nunca viola a integridade referencial devido ao UPDATE CASCADE. III viola a integridade referencial caso a coluna a de R não contenha o valor 5.

Pergunta 12: (c)

Para o caso (c) as chaves seriam ACD e ABD. Ambas as DFs violam BCNF, mas os atributos do lado direito de ambas as DFs pertencem a pelo menos 1 chave. Logo R ficaria na 3FN.

Para os outros casos isso não acontece.

Pergunta 13: (d)

Como T tem 2 tuplos, o output do produto cartesiano de T com T com T dará 2*2*2 = 8 tuplos. Já agora, o output seria:

     T1.v | T2.v | T3.v
    ------+------+------
       0  |  0   |  0
       0  |  0   |  1
       0  |  1   |  0
       0  |  1   |  1
       1  |  0   |  0
       1  |  0   |  1
       1  |  1   |  0
       1  |  1   |  1

Pergunta 14: (c)

É só somar os valores da terceira coluna (T3.v) para os quais o valor de T1.v é zero (ver output da pergunta 13). Isto é: 0+1+0+1 = 2.

Pergunta 15: (d)

O facto de R ser muitos-um (com seta curva) obriga a que para cada entidade de A esteja associada 1 entidade de B. Contudo, não existe qualquer restrição sobre o número de entidades que possam existir em B (a não ser o facto de B ter de possuir pelo menos 1 entidade).

Seria perfeitamente possivel que todas as 100 entidades de A estivessem associadas a uma única entidade de B, ou a 100 B's distintos, ou a qualquer outra coisa entre 1 e 100 B's. Para além disso, pode haver uma série de entidades em B que não estão associadas a nenhuma entidade de A. Por outras palavras, o número de entidades de B poderá ser qualquer número n>1.

Pergunta 16: (b)

Alguns poderiam pensar que R seria convertido em (a,b), mas tal não acontece. Ao passar para o modelo relacional, o esquema de R vai ser (a,b,c), que corresponde à união da chave de A (que é a) com a chave de B (que é b,c).