Você está na página 1de 3

Bases de Dados I

Bases de Dados
Ficha de Avaliação nº2

Engenharia Informática

12 de janeiro de 2021
Duração:2 horas

Exercício 1 (5.5 valores:2v;1v;1v;0.75v;0.75v)

1. Considere o seguinte esquema de uma base de dados.

Este esquema foi transposto para um SGBD com os seguintes comandos. Foram
cometidos diversos erros, seja de ortografia, seja de construção dos comandos SQL.
CREATE TABLE Enbarcacao ( EnbarcacaoID INTEGER PRIMARY KEY,
Nome VARCHAR(20) NOT NULL, Calado DOUBLE, Armador VARCHAR(20),
FOREIGN KEY (Armador) REFERENCES Armador (nome) );
CREATE TABLE Armador ( ArmadorID INTEGER, Nome VARCHAR(20),
NIC CHAR(9) NOT NULL, PRIMARY KEY (nome) );
CREATE TABLE Tripulacao ( Tripulante INTEGER PRIMARY KEY,
Nome VARCHAR(50), Morada VARCHAR(60),
Contacto1 VARCHAR(30), Contacto2 VARCHAR(30),
Embarcacao INTEGER NOT NULL,
FOREIGN KEY (Embarcacao) REFERENCES Enbarcacao (EnbarcacaoID) );
CREATE TABLE Mestre ( MestreId VARCHAR(50), Tripulante INTEGER,
FOREIGN KEY (MestreId) REFERENCES Tripulacao (TripulanteID),
FOREIGN KEY (Tripulante) REFERENCES Tripulacao (TripulanteID) );

Pretende-se que apresente os comandos necessários para corrigir as tabelas criadas e


adequar a base de dados ao esquema apresentado.

1 de 3
Bases de Dados I
2. Utilizando o esquema anterior e as correcções que resolveu efetuar, escreva um
comando que permita conhecer o nome de cada tripulante e o nome do seu mestre.
3. Depois de efetuar as correcções solicitadas na alínea 1, introduza novas correcções
às tabelas que achar necessárias para permitir o apagamento de registos na tabela
armador, sem que a integridade referencial o impeça.
4. Que operação permitirá conhecer quais os tripulantes que não se encontram adstritos
(pelo menos de momento) a uma determinada embarcação? Exemplifique.
5. Considerando o diagrama da alínea 1) e as suas correcções, escreva um comando
que permita criar uma vista onde se possam visualizar os dados dos armadores e
nome e calado das embarcações que possuem.

Exercício 2 (7,25 valores:0.75v;1.5v;1.5;1.25v;2.25v)

Seja o esquema relacional da base de dados ‘música’, já conhecida das aulas práticas.
CREATE TABLE artista (artista_id int(11) PRIMARY KEY,nome VARCHAR(255));

CREATE TABLE album (album_id int(11) PRIMARY KEY,titulo VARCHAR(255),


artista INT(11),ano_album YEAR(4),
FOREIGN KEY (artista) REFERENCES artista (artista_id));

CREATE TABLE genero (id INT(11) PRIMARY KEY AUTO_INCREMENT,


name varchar(255));

CREATE TABLE faixas (faixa_id INT(11) PRIMARY KEY,caminho INT(11),


album INT(11),genero INT(11),ano YEAR(4),titulo VARCHAR(255),faixa_numero
INT(11),disco_numero INT(11),bitrate INT(11),duracao INT(11),
FOREIGN KEY (album) REFERENCES album (album_id)
FOREIGN KEY(genero) REFERENCES genero (id));

CREATE TABLE fx_comp (compositor INT(11),faixa_id INT(11),


PRIMARY KEY (compositor,faixa_id),
FOREIGN KEY (faixa_id) REFERENCES faixas (faixa_id),
FOREIGN KEY (compositor) REFERENCES compositor (compositor_id));

CREATE TABLE compositor (compositor_id INT(11) primary key,nome


VARCHAR(255));

Escreva os comandos SQL necessários para responder às seguintes questões ou


intenções:
1. Liste todos os compositores dos álbuns do artista Abba?
2. Qual o álbum, com maior duração do artista Abba?
3. A procura de álbuns dos Abba, surpreendentemente, aumentou neste último ano.
Para facilitar a leitura dos dados a ele associados, construa uma tabela com os
seguintes atributos:
- da tabela Album, o titulo do álbum
- da tabela Faixas, o titulo da faixa, o ano de publicação
4. Preencha a seguinte tabela:
Género Nº de faixas editadas em 1990 ou antes de 1990 Nº de faixas editadas depois de 1990

... ... ...

... ... ...

... ... ...

5. Constatou-se que, por lapso, diversos álbuns não têm artista atribuído. Para esses,
nos casos em que todas as faixas têm o mesmo artista, atribua-lhes esse artista. Nos
outros casos, atribua ao álbum o artista 'Artistas vários'. Como este artista, também
não está registado na base de dados, deve ser primeiramente criado.

Exercício 3 (7.25 valores:1v;1.5v;1.5v;1.5v;1.75v)

Considere o seguinte modelo de dados:

2 de 3
Bases de Dados I
Funcionário={NumFunc, Nome, Apelido, Secção, Posto, Chefe, Salário, Despesas,
Carro}
Secção={NumSec, Nome, Cidade, Orçamento2017, Orçamento2016}
Considere que o atributo Funcionário.Secção referencia o atributo Secção.NumSec
Despesas é uma percentagem do Salário atribuída ao funcionário para despesas
diversas. Carro indica se o funcionário tem carro atribuído ou não.
Como auxiliar, considere as seguintes tabelas, que apenas contêm uma amostra dos
registos existentes:

Funcionário
NumFunc Nome Apelido Secção Posto Chefe Salário Despesas(%) Carro

1 Ana Silva 10 Programador 3 3000 10 Não

2 Nuno Marques 70 Engenheiro 1 1500 40 Sim

3 Álvaro Sousa 50 Administrador 2500 10 Sim

4 António Silva 10 Engenheiro 1 1450 20 Não

5 Susana Santiago 20 Administrador 3 2750 30 Não

6 Ana Sousa 60 Vendedor 4 1000 50 Sim

7 Carlos Sousa 50 Contabilista 3 1500 10 Não

Secção
NumSec Nome Cidade Orçamento2020 Orçamento2019

10 Fabrico Porto 2600000 230000

20 Comercial Porto 180000 195000

30 Marketing Braga 60000 55000

40 Planeamento Guimarães 70000 58000

50 Administração Porto 225000 230000

60 Informática Braga 125000 90000

70 Recursos Humanos Lisboa 80000 58000

Escreva os comandos SQL que traduzam as seguintes consultas e modificações:


1. Sendo a remuneração anual de cada funcionário igual a:

14*salário + 12*salario*(despesas/100)

e considerando que existe uma retenção para efeitos fiscais de 25% sobre o salário (e
não sobre as despesas), liste para cada funcionário o valor que efetivamente recebe
durante um ano.
2. Pretende-se uma listagem das secções (apenas o nome) que não têm funcionários
registados.
3. Listagem dos funcionários que ganham mais do que todos os funcionários com o
mesmo posto.
4. Pretende-se atribuir carro a todos os funcionários que ganhem mais do que a média
da secção onde trabalham e que sejam chefes dessas mesmas secções. Todos os
restantes não deverão ter carro atribuído, excepto se já tivessem carro atribuído.
5. Transfira a secção com maior valor total de remunerações da cidade onde se
encontra, para a cidade onde se encontra a secção com menor valor total de
remunerações. Nota: só deve considerar para os cálculos as secções que têm
funcionários registados.

3 de 3

Você também pode gostar