Você está na página 1de 3

Resolução do exame de época normal de Bases de Dados

realizado em 05/Jan/2016

Pergunta 1

Consultorio Medico
* gere 1
PK morada PK nif
nome
especialidade
Consulta

PK data PK *
*
PK PK *
Sala Paciente
*
PK numero PK cc
nome
telef

NOTA: Assumi que um paciente nunca é visto pelo mesmo médico mais do que uma vez
na mesma data.

Pergunta 2

X( a, c, b )
Y( c, d )
W( a, c, e )
Z( g, h )
V( a, c, g, f )

1
Pergunta 3

Há 4 possibilidades. Vejamos cada uma delas.

• Se A → BCD não se verificar em R, então a única chave de R seria D. Nesse caso,


BC → A violaria a condição de BCNF porque BC não é superchave. Logo, a escolha
de A → BCD não pode ser a resposta certa.

• Se BC → A não se verificar em R, então a única chave de R seria A. Nesse caso,


BC → A violaria a condição de BCNF porque BC não é superchave (D → C também
violaria a condição de BCNF). Logo, a escolha de BC → A também não pode ser a
resposta certa.

• Se CD → B não se verificar em R, então R teria duas chaves: A e BC. Nesse caso,


D → C violaria a condição de BCNF porque D não é superchave. Logo, a escolha de
DC → B também não pode ser a resposta certa.

• Se D → C não se verificar em R, então R teria três chaves: A, BC e CD. Nesse caso,


nenhuma das restantes dependências funcionais violaria a condição de BCNF porque
em todas elas o lado esquerdo é uma superchave. Logo, a escolha de D → C é a única
possibilidade de resposta certa.

Pergunta 4

a)
SELECT D.nome
FROM Disciplinas AS D, Alunos AS A, Inscricoes AS I
WHERE D.ID = I.IDdisciplina
AND A.ID = I.IDaluno
AND A.nome = ’Jose Mourinho’
ORDER BY D.nome;
b)
SELECT nome
FROM Disciplinas
WHERE ID NOT IN (
SELECT IDdisciplina FROM Inscricoes
);

2
c)
SELECT nome
FROM disciplinas
WHERE ID IN (
SELECT IDdisciplina
FROM Inscricoes
GROUP BY IDdisciplina
HAVING COUNT(*) > 70
);
d)
SELECT DISTINCT I1.IDaluno AS "Aluno 1", I2.IDaluno AS "Aluno 2"
FROM Inscricoes AS I1, Inscricoes AS I2
WHERE I1.IDaluno < I2.IDaluno
AND I1.IDdisciplina = I2.IDdisciplina;

Pergunta 5

Duas vantagens:

• Permitir o acesso concorrente aos dados por parte de vários utilizadores (progra-
mas), deixando que estes façam alterações ao estado da base de dados e garantindo a
coerência dos dados.

• Manter a integridade dos dados no caso de falhas de hardware ou de rede, durante a


execução de comandos de SQL.

Você também pode gostar