1º teste 2003/04 (resolução)

Propaganda
Nome:
Número:
INSTITUTO SUPERIOR TÉCNICO
DEPARTAMENTO DE ENGENHARIA INFORMÁTICA
Bases de Dados
1º Teste (LEIC Tagus)
Não se esqueçam de identificar todas as folhas!
10 de Novembro de 2002 – 8H30
Duração: 1H30
Grupo 1 - Modelos ER e Relacional (7 valores)
1. Considere o domínio do problema proposto na 1ª série de problemas e algumas
extensões. Pretende-se guardar informação sobre os alunos, docentes, licenciaturas,
departamentos e licenciaturas do IST.
Os alunos são identicados pelo número de aluno, tem um nome e uma data de
nascimento. Cada disciplina é identificada unívocamente por um código de disciplina e
tem associado um nome, o programa e o número de créditos (ex: Bases de Dados no
Tagus Park tem o código ‘IV’, o programa “XXXX” e 5 créditos). Um aluno inscreve-se
na ocorrência de uma disciplina para um ano lectivo e um semestre (ex: Bases de
Dados no 1º semestre de 2003/04). Podem existir várias inscrições para o mesmo
aluno, mas cada aluno não se pode inscrever na mesma disciplina no mesmo semestre
e ano lectivo (obviamente!).
Cada disciplina pertence a uma licenciatura e asume-se que cada licenciatura é da
responsabilidade de um departamento (ex: Bases de Dados é uma disciplina da LEIC
do DEI). Cada licenciatura tem um identificador e um nome e cada departamento tem
um identificador e um nome. A oferta de uma disciplina num determinado ano lectivo e
semestre é da responsabilidade de um docente que tem que ser professor. Uma
ocorrência de disciplina pode ter associados outros docentes (ex: professores,
assistentes, monitores) que asseguram as aulas práticas e/ou laboratório. Pretende-se
saber, para cada oferta de disciplina, qual o responsável e o resto do corpo docente
associado.
Uma licenciatura tem um coordenador de licenciatura que é um professor. Cada
departamento tem um presidente que é um professor catedrático. Qualquer docente é
identificado pelo seu número mecanográfico, tem um nome e pertence a um
departamento.
1
Nome:
Número:
O corpo docente de uma disciplina de uma licenciatura tem que pertencer ao mesmo
departamento a que pertence a licenciatura. Na mesma ordem de ideias, o presidente
de cada departamento tem que pertencer a esse departamento, bem como os
coordenadores das licenciaturas desse departamento.
Obtenha o diagrama ER para este problema. Tente modelizar o maior conhecimento
possível usando as primitivas do ER. Escreva em texto todo o conhecimento que não
conseguiu captar no modelo ER obtido.
2. Considere o seguinte esquema ER que modeliza informação sobre as equipas do
EURO2004. Assuma que cada equipa se pode identificar univocamente de duas
maneiras alternativas: i) pelo código da equipa dentro do grupo, e ii) pela sua
nacionalidade.
perte
nce
Grupo
Equipa
id
pertence
códigoEquipa
pontos
Nacionalidade
País
a) O esquema ER em cima representa todo o conhecimento que se pretende?
Justifique.
b) Obtenha o esquema relacional correspondente. Não se esqueça de especificar
quais as chaves primárias e estrangeiras. Indique, se existirem as restrições de
integridade que não estão expressas no esquema relacional obtido.
Grupo 1 – Resposta
1.
2
Nome:
Número:
semestre
N_aluno
nome
Data_nascimento
Aluno
ano
inscrição
Ocorrência
tem
Nome
tem
código
Docente
tem
El_Corpo_docente
nome
Disciplina
N_mec
responsá
vel
Nr_Seq
programa
ISA
pertence
créditos
id
Professor
Coorden.
Licenciatura
pertence
nome
ISA
respons
Catedrático
id
Presid.
Departamento
nome
Restrições de integridade:
RI1: O corpo docente de uma ocorrência de disciplina tem que pertencer ao mesmo
departamento que a disciplina.
RI2: O professor coordenador de uma licenciatura tem que pertencer ao mesmo departamento
que a licenciatura
RI3: O presidente de um departamento tem que pertencer ao mesmo departamento.
2.
a) Não representa o facto de cada equipa se identificar de duas maneiras
diferentes.
b)
Grupo(id)
Equipa (id, códigoEquipa, País, pontos) |
3
Nome:
Número:
id: FK(Grupo) País: FK(Nacionalidade)
Nacionalidade(País)
RI: Equipa tem 2 chaves candidatas: id, códigoEquipa e pais
1.
4
Nome:
Número:
Grupo 1 - Resposta
5
Nome:
Número:
Grupo 2 – Álgebra Relacional e SQL (6 valores)
Considere o seguinte esquema relacional:
Factura (nFact, nProd, data, comprador, vendedor)
Produto (nProd, nome, preço, categoria)
1. Escreva uma interrogação em álgebra relacional que retorne o conjunto de
electrodomésticos (produtos cuja categoria é “electrodomésticos”) que não foram
vendidos pelo José Santos. A resposta deve ser uma relação com uma única coluna
com os nomes dos produtos.
2. Escreva uma vista SQL que retorne todos os produtos que custam mais do que o
preço médio de um electrodoméstico. A vista tem uma única coluna.
3. Escreva uma interrogação SQL que retorne o número total de vendas por categoria,
mas só para as datas em que o número de vendas excedeu o número de vendas em
12/02/2003. Por exemplo, retorna o total de vendas de electrodomésticos para
1/03/2003 se e só se o número de elctrodomésticos vendidos nesse dia foi superior ao
número de electrodomésticos vendidos em 12/2/2003. A resposta é uma relação com
três colunas: categoria, data e número total de produtos vendidos.
4. Diga como pode garantir e escreva em SQL, que:
a) O preço de cada produto é um valor real não negativo.
b) As categorias possíveis para cada produto pertencem a um conjunto
enumerado. Exemplifique.
Grupo 2 - Resposta
1.
(


nome
(




( categoria=electrodomésticos Produto) - nProd, nome
Produto| | vendedor=”José Santos” Factura ))
nProd,nome
categoria=electrodomésticos
2.
CREATE VIEW ProdMassMedia as
SELECT P.nProd
FROM Produto P
WHERE P.preço > ( SELECT AVG(preço)
FROM Produto P1
WHERE P1.categoria=”electrodomésticos”)
6
Nome:
Número:
Grupo 2 – Resposta
3.
SELECT categoria, data, CONT(*)
FROM Factura F, Produto P
WHERE F.nProd = P.nProd
GROUP BY categoria
HAVING COUNT (*) > (SELECT COUNT (*)
FROM Factura F, Produto P1
WHERE F.nProd = P1.nProd
AND P1.categoria = P.categoria
AND F1.data = ‘12/02/2003’)
4.
a)
CREATE TABLE Produtos(
nProd INTEGER,
nome CHAR(20),
preço REAL,
categoria CHAR(20),
PRIMARY KEY (nProd),
CHECK (preço > 0.0))
b)
CREATE TABLE Produtos(
nProd INTEGER,
nome CHAR(20),
preço REAL,
categoria CHAR(20),
PRIMARY KEY (nProd),
CHECK categoria IN (“televisões”, “hi-fi”, “cozinha”))
ou com trigger
ou com uma tabela com categorias dos produtos e uma chave estrangeira da
tabela Produtos para a de categorias.
7
Nome:
Número:
Grupo 3 - XML (3 valores)
Considere os seguintes dados sob o formato relacional:
Id Duração
Título
Compositor
Maestro
3
1:01
Mad Rush
J. Sibelius
L.
Bernstein
4
1:47
Andante
L.
Beethoven
NULL
1:57
Upon
Enchanted
Ground
A.
Hovhaness
NULL
5
Id
13
55
56
57
Pai
3
5
5
5
Cantor
A. Karis
Y. Kondonassis
F. Hendrickx
H. Coryn
Escreva o documento XML obras.xml obtido depois de exportar os dados
relacionais acima para a seguinte DTD:
<!ELEMENT obras (peça*)>
<!ELEMENT peça (duração, título, compositor, maestro?, cantor*>
<!ELEMENT duração (#PCDATA)>
<!ELEMENT título (#PCDATA)>
<!ELEMENT compositor (#PCDATA)>
<!ELEMENT maestro (#PCDATA)>
<!ELEMENT cantor (#PCDATA)>
<!ATTLIST peça
id ID REQUIRED>
8
Nome:
Número:
Grupo 3 - Resposta
<!DOCUMENT OBRAS [
<obras>
<peça id=3>
<duração>1:01</duração>
<título>Mad Rush</título>
<compositor>J. Sibelius</compositor>
<maestro>L. Bernstein</compositor>
<cantor>A. Karis</cantor>
</peça>
<peça id=4>
<duração>1:47</duração>
<título>Andante</título>
<compositor>L. Beethoven</compositor>
</peça>
<peça id=5>
<duração>1:57</duração>
<título>Upon Enchanted Ground</título>
<compositor> A. Hovhaness</compositor>
<cantor>Y. Kondonassis</cantor>
<cantor>F. Hendrickx</cantor>
<cantor>H. Coryn</cantor>
</peça>
</obras>
]
9
Nome:
Número:
Grupo 4 – Organização de ficheiros e Índices (4 valores)
1. Diga qual a melhor organização de ficheiros para cada um dos seguintes tipos de
interrogações frequentes:
a) Procura de registos baseada num intervalo de valores.
b) Inserções e pesquisas onde a ordem dos registos não interessa.
c) Procura de um registo baseada no valor de um dado campo.
2. Qual a diferença entre um índice clustered e um índice unclustered. Dê um exemplo
de cada.
10
Nome:
Número:
Grupo 4 - Resposta
1.
a)
Sorted file
b)
Heap File
c)
Hash-Based
2.
Clustered: a ordem das entradas do ficheiro de indíce é a mesma da das
entradas do ficheiro de dados.
Unclustered: a ordem não é a mesma
Exemplo:
Ficheiro de dados
Id
1
2
3
4
Nome
Ana
Manuel
Bernardo
Amália
Ficheiro de índice
Idade
35
36
37
30
Nome
Amália
Ana
Bernardo
Manuel
Clustered index sobre idade
Id
4
1
3
2
Unclustered index sobre nome
11
Download