Fundamentos de Bancos de Dados – Prova 3
Prof. Carlos A. Heuser
22 de agosto de 2003
Duração: 2 horas – Prova com consulta
Questão 1 (Construção de modelo ER - Peso 3)
Deseja-se construir uma base de dados para armazenar informações sobre a produção científica de um conjunto de pesquisadores.
Para cada pesquisador é necessário saber seu nome e a instituição em que
trabalha (somente a atual), juntamente com as publicações de sua autoria. A instituição tem como identificador uma sigla. Além disso, a base de dados devem
manter o nome e país da instituição. O pesquisador é identificado pela instituição
e por um número seqüencial que começa em "1"para cada instituição.
Cada publicação é identificada por um número e tem um título. Para cada
publicação é necessário saber, ainda, que outras publicações ela referencia. Cabe
observar que uma publicação pode ser referenciada por várias outras publicações.
Há dois tipos de publicações, os trabalhos em anais de congressos e os artigos em
periódicos.
Para os trabalhos em anais de congressos, a base de dados deve armazenar,
além do congresso em que ocorreu a publicação, os números inicial e final de
página do artigo dentro dos anais. Cada congresso é identificado por uma sigla e
pelo ano em que ocorreu e é necessário conhecer o nome e o local em que ocorreu
o congresso.
Já para os artigos em periódicos, além dos números de página inicial e final,
deseja-se saber o volume e o número da edição do periódico em que o artigo foi
publicado. Cada periódico tem um identificador único, uma editora e um nome.
Deve ser construído um modelo conceitual para esta base de dados. O modelo
conceitual deve ser construído na forma de um modelo entidade relacionamento,
com a notação usada em aula. Este modelo deve conter, ao menos, entidades,
relacionamentos, atributos, identificadores e generalizações/especializações. A
base de dados modelada não deve conter redundâncias de dados.
Solução: A solução encontra-se na Figura 1
Questão 2 (Projeto de base de dados relacional - Peso 2,6)
Na figura 2 está apresentado um modelo ER parcial de uma sistema que armazena
1
referenciado
0-N
Referência
referenciador
0-N
Publicação
Número publicação
título
página inicial
página final
id: Número publicação
1-N
Autoria
0-N
Pesquisador
número sequencial
nome
id: R.Institutição
número sequencial
1-1
conceitual/1
R
0-N
Artigo periódico
volume
número
Artigo anais
1-1
1-1
R_1
R_2
0-N
0-N
Congresso
sigla congresso
ano
nome
local
id: sigla congresso
Periódico
identificador periódico
editora
nome
id: identificador periódico
Figura 1: Modelo conceitual para a questão 1
2
Institutição
Sigla Institutição
Nome
País
id: Sigla Institutição
Aluno
Código aluno
Nome aluno
id: Código aluno
conceitual/1
0-N
Mat_Alu
1-1
Matrícula
id: Mat_Tur.Turma
Mat_Alu.Aluno
0-N
Nota questão
Nota
0-N
Questão
Número da questão
Peso Questão
id: Prova Questão.Prova
Número da questão
1-1
1-1
Mat_Tur
Prova Questão
0-N
0-N
Turma
Sigla da Turma
Código da disciplina
Ano Semestre
id: Sigla da Turma
Código da disciplina
Ano Semestre
0-N
Truma Prova
Prova
Numero da prova
Data da prova
1-1
Peso prova
id: Truma Prova.Turma
Numero da prova
Figura 2: Modelo conceitual para a questão 2
resultados de provas de um curso de nível superior. O modelo está construído com
a notação da ferramenta DBMain, usada para os estudos de caso. Esta notação
diferencia-se daquela usada no livro nos seguintes aspectos:
• As cardinalidades estão na notação européia (o contrário da usada no livro).
• Os atributos estão listados dentro do símbolo que representa a entidade/relacionamento.
• Os identificadores aparecem na cláusula "id", dentro do símbolo representativo da entidade.
Deve ser projetado o esquema (modelo lógico) de uma base de dados relacional
para o modelo ER em questão. O esquema da base de dados relacional deve
conter os nomes das tabelas, os nomes dos atributos, atributos que formam a chave
primária e as chaves estrangeiras. Quando houver alternativas de projeto dizer que
alternativa foi usada.
Aluno(Codigo_aluno,Nome_aluno)
Turma(Sigla_da_Turma,Codigo_da_disciplina,Ano_Semestre)
Matricula(Sigla_da_Turma, Codigo_da_disciplina,
Ano_Semestre, Codigo_aluno)
3
(Codigo_aluno) referencia Aluno
(Sigla_da_Turma, Codigo_da_disciplina, Ano_Semestre)
referencia Turma
Prova (Sigla_da_Turma, Codigo_da_disciplina, Ano_Semestre,
Numero_da_prova,Data_da_prova,Peso_prova,)
(Sigla_da_Turma, Codigo_da_disciplina, Ano_Semestre)
referencia Turma
Questao (Sigla_da_Turma, Codigo_da_disciplina, Ano_Semestre,
Numero_da_prova, Numero_da_questao,Peso_Questao)
(Sigla_da_Turma, Codigo_da_disciplina, Ano_Semestre,
Numero_da_prova)
referencia Prova;
Nota_questao (Numero_da_prova, Numero_da_questao,Sigla_da_Turma,
Codigo_da_disciplina, Ano_Semestre,Codigo_aluno
,Nota)
(Sigla_da_Turma, Codigo_da_disciplina,
Ano_Semestre, Codigo_aluno)
referencia Matricula
(Sigla_da_Turma, Codigo_da_disciplina, Ano_Semestre,
Numero_da_prova, Numero_da_questao)
referencia Questao
Questão 3 (Engenharia reversa de BD relacional - Peso 2,6)
Abaixo está apresentado o esquema lógico de uma parte de uma base de dados
de acadêmica. Execute um processo de engenharia reversa, construíndo o modelo
entidade-relacionamento correspondente a esta base de dados. O modelo ER deve
refletir exatamente esta base de dados, contendo entidades, atributos, relacionamentos e cardinalidades, bem como identificadores.
create table Disciplina (
CodDisc char(6) not null,
NomeDisc varchar(100) not null,
CreditosDisc numeric(2) not null,
primary key (CodDisc));
create table Turma (
CodDisc char(6) not null,
AnoSem numeric(3) not null,
SiglaTur char(1) not null,
primary key (CodDisc, AnoSem, SiglaTur));
create table Horario (
CodDisc char(6) not null,
4
AnoSem numeric(3) not null,
SiglaTur char(1) not null,
DiaSem numeric(1) not null,
HoraInicio numeric(4) not null,
NumHoras numeric(2) not null,
primary key (CodDisc, AnoSem, SiglaTur, DiaSem,
HoraInicio));
create table Curso (
CodCur numeric(3) not null,
NomeCur varchar(100) not null,
primary key (CodCur));
create table CursoGraduacao (
CodCur numeric(3) not null,
EstagCurricSimNao char not null,
primary key (CodCur));
create table CursoPos (
CodCur numeric(3) not null,
Nivel numeric(1) not null,
NumeroCreditos char(1) not null,
primary key (CodCur));
create table DiscCurso (
CodCur numeric(3) not null,
CodDisc char(6) not null,
Carater char(1) not null,
primary key (CodCur, CodDisc));
alter table Turma add constraint FKR
foreign key (CodDisc)
references Disciplina;
alter table Horario add constraint FKR_1
foreign key (CodDisc, AnoSem, SiglaTur)
references Turma;
alter table CursoGraduacao add constraint FKCur_Cur
foreign key (CodCur)
references Curso;
alter table CursoPos add constraint FKR
foreign key (CodCur)
references Curso;
alter table DiscCurso add constraint FKDis_Dis
foreign key (CodDisc)
references Disciplina;
5
Disciplina
CodDisc
NomeDisc
CreditosDisc
id: CodDisc
0-N
R
1-1
Turma
AnoSem
SiglaTur
id: R.Disciplina
AnoSem
SiglaTur
0-N
0-N
conceitual/1
DiscCurso
Caráter
R_1
1-1
0-N
Horario
DiaSem
HoraInicio
NumHoras
id: R_1.Turma
DiaSem
HoraInicio
Curso
CodCur
NomeCur
id: CodCur
CursoGraduacao
EstagCurricSimNao
CursoPos
Nivel
NumeroCreditos
Figura 3: Modelo conceitual para a questão 3
alter table DiscCurso add constraint FKDis_Cur
foreign key (CodCur)
references Curso;
Solução: O modelo conceitual gerado pela engenharia reversa encontra-se, na
notação do DBMain, na figura 3.
Questão 4 (Normalização - Peso 1,8)
Considere a seguinte tabela, não necessariamente normalizada, referente a base
de dados da questão anterior:
Tab3(CodDisc,AnoSem,SiglaTur, HoraInicio,
NumHoras,NomeDisc, CreditosDisc)
As dependências funcionais (podendo incluir dependências transitivas) que existem nesta tabela são as seguintes:
6
• (CodDisc,AnoSem,SiglaTur,HoraInicio)→NumHoras
• CodDisc→NomeDisc
• CodDisc→CreditosDisc
1. Diga em que forma normal encontra-se a tabela.
2. Caso a tabela não se encontre na terceira forma normal, mostre a transformação da tabela para a terceira forma normal. Mostre cada forma normal
intermediária, entre aquela em que a tabela se encontra e a terceira forma
normal.
Solução:
1. A tabela encontra-se na 1FN pois não contém tabelas aninhadas. Ela não
está na 2FN por conter dependências parciais.
2. 2FN:
Tab1(CodDisc,AnoSem,SiglaTur, HoraInicio,
NumHoras)
Tab2(CodDisc,NomeDisc,CreditosDisc)
3FN=2FN
7
Download

Fundamentos de Bancos de Dados – Prova 3