0% acharam este documento útil (0 voto)
123 visualizações41 páginas

AV3 - BANCO DE DADOS 1 Final

Este documento descreve a criação de um banco de dados para gestão de uma universidade. O objetivo é controlar estudantes, professores, cursos, disciplinas, histórico escolar e turmas. O trabalho inclui levantamento de requisitos, identificação de entidades e relacionamentos, modelagem do banco de dados, normalização e implementação usando MySQL.

Enviado por

aliernestomanuel
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
123 visualizações41 páginas

AV3 - BANCO DE DADOS 1 Final

Este documento descreve a criação de um banco de dados para gestão de uma universidade. O objetivo é controlar estudantes, professores, cursos, disciplinas, histórico escolar e turmas. O trabalho inclui levantamento de requisitos, identificação de entidades e relacionamentos, modelagem do banco de dados, normalização e implementação usando MySQL.

Enviado por

aliernestomanuel
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

UNIVERSIDADE ABERTA ISCED

FACULDADE DE ENGENHARIA E AGRICULTURA

CURSO DE LICENCIATURA EM ENGENHARIA INFORMÁTICA

BANCO DE DADOS PARA GESTÃO DE UMA UNIVERSIDADE

ALI ERNESTO MANUEL: 81210840

Nampula, Maio de 2023


1

UNIVERSIDADE ABERTA ISCED

FACULDADE DE ENGENHARIA E AGRICULTURA

CURSO DE LICENCIATURA EM ENGENHARIA INFORMÁTICA

BANCO DE DADOS PARA GESTÃO DE UMA UNIVERSIDADE

Trabalho de Campo da disciplina de


Banco de Dados 1, a ser submetido à
Coordenação do Curso de Licenciatura
em Engenharia Informática, 2º Ano.

Tutor: Belarmino Miguel Amilai

ALI ERNESTO MANUEL: 81210840

Nampula, Maio de 2023


2

Índice

1.1 - Introdução ............................................................................................................................... 3

1.2 - Objectivos ............................................................................................................................... 4

1.3 – Metodologia ............................................................................................................................ 5

2 – Criação de Banco de Dados para gestão de uma Universidade ................................................. 6

2.1 - Levantamento dos requisitos ............................................................................................... 7


2.2 – Identificação de Entidades e Relacionamentos .................................................................. 7
2.3 - Representação do MER (Modelo Entidade – Relacionamento).......................................... 9
2.4 - Normalização do Banco de Dados .................................................................................... 12
2.4.1 – Primeira forma de Normalização ............................................................................... 13

2.4.2 – Segunda forma de Normalização ............................................................................... 17

2.4.3 – Terceira forma de Normalização ............................................................................... 21

2.5 - Implementação utilizando MySql ..................................................................................... 24


2.6 – Testagem do funcionamento ............................................................................................. 34
2.6.1 - Testagem do funcionamento usando a operação ‘Selecção’ ...................................... 35

2.6.2 - Testagem do funcionamento usando a operação ‘Projecção’ .................................... 38

Conclusão ...................................................................................................................................... 39

Bibliografia .................................................................................................................................... 40
3

1.1 - Introdução

O presente trabalho de banco de dados resulta de uma série de aprendizado teórico e prático durante
o período das aulas do 4º bloco das aulas referente ao 2º ano do curso de informática. Em destaque,
estão alguns conceitos sobre banco de dados com maior enfoque para solução de um problema
relacionado com a criação de banco de dados de uma universidade.
4

1.2 - Objectivos

Este trabalho tem como objectivos:

Objectivo Geral
 Criar um banco de dados para gestão de uma universidade;

Objectivo Especifico
 Fazer levantamento dos requisitos para o banco de dados;
 Implementar alguns softwares auxiliares como servidores;
 Corrigir possíveis inconsistências do banco de dados e testar.
5

1.3 – Metodologia

Para realizar este trabalho foi necessário:

 Participar as aulas síncronas;


 Pesquisar diversificadas soluções para problemas similares;
 Ler artigos sobre bancos de dados para fins de familiarização dos conceitos técnicos;
 Usar o MySql ao lado do Wampserver para criação e manipulação do banco de dados;
 Organizar as informações;
 Redigir o relatório.
6

2 – Criação de Banco de Dados para gestão de uma Universidade

A criação de um banco de dados para uma universidade visa fazer um controle centralizado dos
estudantes, professores, cursos, disciplina, histórico escolar, e turmas.
Assim sendo, a prior, tem-se como entidades, com excepção de faculdades e departamentos:

Imagem 1 - Entidades do banco de dados

Na sequência, o banco de dados (BD) está previsto para obedecer as seguintes fases:
i. Levantamento dos requisitos;
ii. Identificar Entidades e Relacionamentos;
iii. Representar o MER (Modelo Entidade – Relacionamento);
iv. Normalizar o BD;
v. Implementar utilizando um SGBD (Sistema de Gestão de Bancos de Dados) MySql;
vi. Testes (Consultas para ver o funcionamento) – utilizando álgebra relacional.
7

2.1 - Levantamento dos requisitos

O banco ou a base de dados em causa apresenta a como requisitos e características:


 O estudante só pode ser matriculado em curso de cada ano;
 O estudante possui um código de identificação (Cod_Matri);
 Cursos são compostos por disciplinas;
 Cada disciplina deve ter no máximo 25 estudantes inscritos por turma;
 As disciplinas podem ser obrigatórias e optativas dependendo do curso;
 As disciplinas dependem de departamentos específicos;
 Cada disciplina possui um código específico;
 Os alunos podem trancar uma matrícula, não estando então matriculados em nenhuma
disciplina no semestre;
 Em cada semestre, cada estudante pode se matricular no máximo ate 6 disciplinas;
 O estudante que reprovar mais de 3 cadeiras repete o curso;
 A faculdade tem capacidade máxima de 2000 estudantes em 10 cursos distintos;
 Entram 150 estudantes novos por ano;
 Existem 90 disciplinas no total disponíveis;
 Um histórico escolar traz todas as disciplinas cursadas por um aluno, incluindo nota final e
o resultado;
 Professores só podem ser cadastrados com uma disciplina a leccionar;
 Cada professor pertence a um departamento;
 Professores são identificados por um código do professor.

2.2 – Identificação de Entidades e Relacionamentos

Segundo as informações disponíveis num dos subdomínios da Microsoft, as entidades apresentam


três relacionamentos:
 Uma relação um-para-muitos;
 Um relacionamento muitos-para-muitos;
 Uma relação um-para-um.

Para o caso em estudo, temos os relacionamentos que se seguem, nas suas respectivas entidades.
8

Diagrama 1 - Entidade e Relacionamento

De acordo com o diagrama, tem-se a seguinte tabela de relacionamentos:


Entidade de Relacionamento Tipo de Relacionamento Descrição
Uma universidade
pode ter muitas
i. Universidade - Faculdade 1 – n (um para muitos) faculdades, porém
uma faculdade existe
em uma universidade.
Uma faculdade pode
ter muitos
departamentos,
ii. Faculdade - Departamento 1 – n (um para muitos)
porém um
departamento existe
em uma faculdade.
Num departamento
podem existir vários
iii. Departamento - Curso 1 – n (um para muitos) curos, todavia um
curso existe em um
departamento.
Um curso pode ter
muitas turmas, porém
iv. Curso - Turma 1 – n (um para muitos)
uma turma está para
um curso.
Um curso pode ter
v. Curso - Disciplina n – n (muitos para muitos) muitas disciplinas, de
igual modo, uma
9

disciplina pode estar


em muitos cursos.
Uma disciplina está
prevista para muitos
professores, em
vi. Disciplina - Professor 1 – n (um para muitos) contrapartida um
professor pode
leccionar apenas uma
disciplina.
Uma disciplina pode
ser leccionada em
muitas turmas, do
vii. Disciplina - Turma n – n (muitos para muitos)
mesmo jeito que uma
turma pode ter muitas
disciplinas.
Uma disciplina pode
ser frequentada por
vários estudantes, de
viii. Disciplina - Estudante n – n (muitos para muitos) igual modo um
estudante pode
frequentar muitas
disciplinas.
Cada histórico
contém informações
ix. Histórico - Estudante 1 – 1 (um para um) de um estudante e
cada estudante tem
um só histórico.
Tabela 1 -Entidades e relacionamentos

As entidades e o tipo de relacionamentos patentes nesta tabela estão em concordância com o


descrito no item 2.1 - Levantamento dos requisitos conforme disposições do trabalho da disciplina
de Banco de Dados 1.

2.3 - Representação do MER (Modelo Entidade – Relacionamento)

Para representar o MER (Modelo Entidade – Relacionamento), há que recorrer o DER (Diagrama
Entidade – Relacionamento).

Enquanto o MER aplica-se mais para a parte conceitual, o Diagrama Entidade Relacionamento é
a sua representação gráfica e é uma das principais ferramentas no acto de elaboração de uma base
de dados.
10

Desta maneira, para o caso em estudo, segue o diagrama composto por entidades, atributos, e
relacionamentos.

Diagrama 2 - Diagrama Entidade-Relacionamento (criado com auxilio do software Dia)


11

De forma descriminada, seguem as tabelas do diagrama 2.


id. nome n_estudantes_existentes n_estudantes_novos n_total_disciplinas id_faculdade

Tabela 2 - Atributos da Universidade

id. nome n_estudantes_inscritos id_departamento

Tabela 3 - Atributos da Faculdade

i no n_estudantes_ n_estudante capacidade_maxi numero_ id_pr id_c id_dis


d m existentes_dep s_novos_de ma_de_estudantes de_curso ofesso urso ciplin
. e p s r a

Tabela 4 - Atributos do Departamento

id. nome id_disciplina id_turma

Tabela 5 - Atributos do Curso

id. nome tipo_opt_naoopt id_departamento cod_disciplina

Tabela 6 - Atributos da Disciplina

id. nome id_disciplina id_departamento cod_profr

Tabela 7 - Atributos do Professor

id. cod_matricula

Tabela 8 - Atributos da Matricula


12

id no status_activo_i cod_disciplina_ cod_disciplin situação_final_apr id_matric


. me nativo aprov a_rep ov_rep ula

Tabela 9 - Atributos de Estudante

i nome_est id_cod_discipli id_cod_discip nota_final_disciplin resultado id_estu


d udante na_aprov lina_rep a_aprovada _final dante
.

Tabela 10 - Atributo do histórico do estudante

id designacao n_estudantes_disciplin n_estudant_geral id_disciplin n_total_disciplina


. a

Tabela 11 - Atributos de Turma

2.4 - Normalização do Banco de Dados

O processo de Normalização consiste em organizar os dados na base de dados. Isso envolve a


criação de tabelas e o estabelecimento de relações entre essas tabelas de acordo com as regras
projectadas para proteger os dados e tornar o banco de dados mais flexível, eliminando a
redundância e a dependência inconsistente.

De entre diversificadas fontes e autores, existem três formas de normalização:


 Primeira Forma Normal (1FN) - visa eliminar atributos multi-valorados e atributos
compostos;

 Segunda Forma Normal (2FN) - se ela atende todos os requisitos da 1FN e se os registos
na tabela, que não são chaves, dependam da chave primária em sua totalidade e não apenas
parte dela;

 Terceira Forma Normal (3FN) – é quando uma tabela está na 1FN e 2FN, mas ao se analisar
um registo encontra-se um atributo não chave dependente de outro atributo não chave.
13

Para o caso em estudo, será necessário, primeiro, preencher alguns campos em forma de exemplos,
de modo a normalizar o banco de dados.

2.4.1 – Primeira forma de Normalização

id nome n_estudantes_existente n_estudantes_novo n_total_disciplina id_faculdad


. s s s e
1 Unisce 800 370 90 1e2
d

Tabela 12 - Atributos da Universidade por normalizar

Para esta entidade, há que resolver o problema do último atributo (id_faculdade).


id. nome n_estudantes_existentes n_estudantes_novos n_total_disciplinas
1 Unisced 800 150 90

Tabela 13 - Atributo Universidade normalizada

id. Id_universidade Id_faculdade


1 1 1
2 1 2
Tabela 14 - Continuação da Normalização do atributo Universidade

id. nome n_estudantes_inscritos id_departamento


1 FAE 50 1
2 FCD 50 1
3 FJM 50 1
Tabela 15 - Atributos da Faculdade por normalizar

Pelas disposições desta tabela, não é necessário normalizar.

i no n_estudantes_ n_estudante capacidade_maxi numero_ id_c id_dis id_pr


d m existentes_dep s_novos_de ma_de_estudantes de_curso urso ciplin ofesso
. e p s a r
1 D 23 50 200 3 1 1,2 1,2
A
E
2 D 23 50 200 3 1 1,2 1,2
C
D
14

3 DJ 23 50 200 3 1 1,2 1,2


M
Tabela 16 - Atributos do Departamento por normalizar

Dois atributos carecem de revisão: id_professor e id_disciplina.


i no n_estudantes_exist n_estudantes_n capacidade_maxima_d numero_de id_cu
d me entes_dep ovos_dep e_estudantes _cursos rso
.
1 DA 23 50 200 3 1
E
2 DC 23 50 200 3 1
D
3 DJ 23 50 200 3 1
M
Tabela 17 – Atributos do Departamento normalizados

id. Id_departamento id_professor id_disciplina


1 1 1 1
2 1 2 2
3 2 1 1
4 2 2 2
5 3 1 2
6 3 2 2
Tabela 18 – Continuação de normalização de Atributos de Departamento

id. nome id_disciplina id_turma


1 Informática 1,2 1
2 Robótica 1,2 1
Tabela 19 - Atributos do Curso por normalizar

id. nome id_turma


1 Informática 1
2 Robótica 1
Tabela 20 - Atributos de curso normalizados

id. Id_curso id_disciplina


1 1 1
2 1 2
3 2 1
4 2 2
Tabela 21 - Continuação de normalização dos atributos de curso
15

id. nome tipo_opt_naoopt id_departamento cod_disciplina


1 BD naoop 1 BD_U2023
2 TW naoop 1 TW_U2023
3 ED opt 1,2 ED_U2023
Tabela 22 - Atributos da Disciplina por normalizar

Por causa do atributo id_departamento, há necessidade de normalizar.


id. nome tipo_opt_naoopt cod_disciplina
1 BD naoop BD_U2023
2 TW naoop TW_U2023
3 ED opt ED_U2023
Tabela 23 - Atributo Disciplina normalizado

id. Id_disciplina Id_departamento


1 1 1
2 2 1
3 3 1
4 3 2
Tabela 24 - Continuação de normalização do atributo Disciplina

id. nome id_disciplina id_departamento cod_profr


1 Amilai 1 1 Prof_Amilai2023
2 Chitsumba 2 1 Prof_Chitsumda2023
3 Runbwane 3 2 Prof_Runbwane2023
Tabela 25 - Atributos do Professor (1FN)

Para este atributo, já se encontra na primeira forma de normalização.

id. Cod_matricula
1 unInsc001
2 unInsc002
Tabela 26 - Atributo da Matricula (1FN)

Este atributo também não é necessário normalizar.


16

i nome status_activo_i cod_disciplina_ cod_disciplin situação_final_apr id_matri


d. nativo aprov a_rep ov_rep cula
1 Ali activo BD_U2023 - aprov unInsc00
1
2 Gula activo BD_U2023, MD_2023 ap unInsc00
mo WT_U2023 6
3 Helde inativo - BD_U2023, repr unInsc02
r WT_U2023, 1
AED_U2022
Tabela 27 - Atributos de Estudante por normalizar

Os atributos cod_disciplina_apr, e cod_disciplina_rep são responsáveis pela imperiosa


normalizacao desta entidade.
id. nome status_activo_inativo situação_final_aprov_rep id_matricula
1 Ali activo aprov unInsc001
2 Gulamo activo ap unInsc006
3 Helder inativo repr unInsc021
Tabela 28 - Normalização dos atributos de Estudante

id. Id_estudante cod_disciplina_aprov cod_disciplina_rep


1 1 BD_U2023 -
2 2 BD_U2023 MD_2023
3 2 WT_U2023 -
4 3 - BD_U2023
5 3 - WT_U2023
6 3 - AED_U2022
Tabela 29 - Continuação de Normalização de atributos de estudantes

i nome_est id_cod_discipli id_cod_discip nota_final_disciplin resultado id_estu


d udante na_aprov lina_rep a_aprovada _final dante
.
1 Ali 1,2,3 - 17,15,18 aprovado 1
2 Gulamo 2 1,3 18 - 1
Tabela 30 - Atributo do histórico do estudante por normalizar

Três colunas (id_cod_disciplina_aprov, id_cod_disciplina_rep, nota_final_disciplina_aprovada)


são responsáveis pela primeira forma de normalização desta entidade.
id. nome_estudante resultado_final id_estudante
1 Ali aprovado 1
2 Gulamo - 1
Tabela 31 - Atributos do histórico do estudante normalizados
17

id Id_historico_estud id_cod_disciplina_a id_cod_disciplina nota_final_disciplina_apr


. ante prov _rep ovada
1 1 1 - 17
2 1 2 - 15
3 1 3 - 18
4 2 2 1 18
5 2 - 3 -
Tabela 32 - Continuação de normalização dos atributos do histórico dos estudantes

id designaca n_total_disciplin id_disciplin n_estudantes_disciplin n_estudant_gera


. o a a a l
1 Nivel1 3 1.2.3 10,15,11 22
2 Nivel2 2 8,9 8,7 15
Tabela 33 - Atributos de Turma por normalizar

Reestruturando as colunas com atributo id_disciplina e n_estudantes_disciplina, tem-se:


id. designacao n_total_disciplina n_estudant_geral
1 Nivel1 3 22
2 Nivel2 2 15
Tabela 34 - Atributos da turma normalizadas

id. Id_turma id_disciplina n_estudantes_disciplina


1 1 1 10
2 1 2 15
3 1 3 11
4 2 8 8
5 2 9 7
Tabela 35 - Continuação da normalização de atributos da turma

Termina assim a primeira forma de normalização.

2.4.2 – Segunda forma de Normalização

Como definido anteriormente, a 2FN depende da 1FN porém com a prorrogativa de permitir que
todos os atributos dependam da chave primária.
De acordo com esta descrição, segue primeiro as tabelas da 1FN.
18

id. nome n_estudantes_existentes n_estudantes_novos n_total_disciplinas

Tabela 36 - Entidade apta para 2FN

id. Id_universidade Id_faculdade

Tabela 37 - Entidade apta para 2FN

id. nome n_estudantes_inscritos id_departamento


1
1
1
Tabela 38 - Entidade apta para 2FN

i no n_estudantes_exist n_estudantes_n capacidade_maxima_d numero_de id_cu


d me entes_dep ovos_dep e_estudantes _cursos rso
.

Tabela 39 - Entidade por normalizar para 2FN

i no n_estudantes_existe n_estudantes_nov capacidade_maxima_de_ Id_dados_do


d me ntes_dep os_dep estudantes _curso
.

Tabela 40 - Entidade apta para 2FN

id. numero_de_cursos id_curso

Tabela 41 - Nova entidade apta para 2FN - dados do curso


19

id. Id_departamento id_professor id_disciplina

Tabela 42 - Entidade apta para 2FN

id. nome id_turma

Tabela 43 - Entidade apta para 2FN

id. Id_curso id_disciplina

Tabela 44 - Entidade apta para 2FN

id. nome tipo_opt_naoopt cod_disciplina

Tabela 45 - Entidade apta para 2FN

id. Id_disciplina Id_departamento

Tabela 46 - Entidade apta para 2FN

id. nome id_disciplina id_departamento cod_profr

Tabela 47 - Entidade apta para 2FN

id. cod_matricula

Tabela 48 - Entidade apta para 2FN


20

id. nome status_activo_inativo situação_final_aprov_rep id_matricula

Tabela 49 - Entidade apta para 2FN

id. Id_estudante cod_disciplina_aprov cod_disciplina_rep

Tabela 50 - Entidade apta para 2FN

id. nome_estudante resultado_final id_estudante

Tabela 51 - Entidade apta para 2FN

id Id_historico_estud id_cod_disciplina_a id_cod_disciplina nota_final_disciplina_apr


. ante prov _rep ovada

Tabela 52 - Entidade apta para 2FN

id. designacao n_total_disciplina n_estudant_geral

Tabela 53 - Entidade apta para 2FN

id. id_turma id_disciplina n_estudantes_disciplina

Tabela 54 - Entidade apta para 2FN


21

2.4.3 – Terceira forma de Normalização

Com o objectivo de analisar atributos dependentes não chaves, a 3FN requer remover qualquer
atributo nestas condições.

id. nome n_estudantes_existentes n_estudantes_novos n_total_disciplinas

Tabela 55 - universidade

id. Id_universidade Id_faculdade

Tabela 56 - universidade_tem_faculdade

id. nome n_estudantes_inscritos id_departamento

Tabela 57 - faculdade

i no n_estudantes_existe n_estudantes_nov capacidade_maxima_de_ Id_dados_do


d me ntes_dep os_dep estudantes _curso
.

Tabela 58 - departamento

id. numero_de_cursos id_curso

Tabela 59 – dados_do_curso
22

id. Id_departamento id_professor

Tabela 60 – departamento_tem_professor

id. Id_departamento id_disciplina

Tabela 61 – departamento_tem_disciplina

id. nome id_turma

Tabela 62 - curso

id. Id_curso id_disciplina

Tabela 63 – curso_tem_disciplina

id. nome tipo_opt_naoopt cod_disciplina

Tabela 64 - disciplina

id. Id_disciplina Id_departamento

Tabela 65 – disciplina_contida_no_departamento
23

id. nome id_disciplina id_departamento cod_profr

Tabela 66 - professor

id. cod_matricula

Tabela 67 - matricula

id. nome status_activo_inativo situação_final_aprov_rep id_matricula

Tabela 68 - estudante

id. Id_estudante cod_disciplina_aprov cod_disciplina_rep

Tabela 69 – situação_de_estudante_na_disciplina

id. nome_estudante resultado_final id_estudante

Tabela 70 – resultado_de_estudante

id Id_resultado_estuda cod_disciplina_apr cod_disciplina_r nota_final_disciplina_apro


. nte ov ep vada

Tabela 71 – histórico_final_de_estudante

id. designacao n_total_disciplina n_estudant_geral id_estudante

Tabela 72 – turma
24

id. id_turma id_disciplina n_estudantes_disciplina

Tabela 73 – turma_tem_disciplina

De acordo com a regra da 3FN, existem atributos que deviam ser removidos como forma de
normalizar, porém não compensa.

2.5 - Implementação utilizando MySql

Chegado este momento, há que se recorrer o sistema de gestão de banco de dados, caso do MySql,
para representar todas entidades obtidas na Terceira Forma Normal.

O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem


SQL (Linguagem de Consulta Estruturada - Structured Query Language) como interface.
Actualmente o software pertence a Oracle Corporation.

Imagem 2 - Tela de abertura do Mysql (fonte: autor)


25

Imagem 3 -Janela inicial do MySql para criação de diagramas Entidade – Relacionamento


26

Imagem 4 - Inserção de entidades e atributos através do DER no MySql


27

Imagem 5 - Diagrama final


28

O diagrama entidade – relacionamento (DER) anterior tem como script:


-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;


SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE,
SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_Z
ERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema bd_universidade
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema bd_universidade
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `bd_universidade` DEFAULT CHARACTER SET utf8 ;
USE `bd_universidade` ;

-- -----------------------------------------------------
-- Table `bd_universidade`.`matricula`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`matricula` (
`id` INT NOT NULL AUTO_INCREMENT,
`cod_matri` VARCHAR(45) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `cod_matri_UNIQUE` (`cod_matri` ASC) VISIBLE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`estudante`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`estudante` (
`id` INT NOT NULL AUTO_INCREMENT,
`status_ativo_inativo` CHAR(6) NULL,
`status_final_aprov_repr` CHAR(6) NULL,
`matricula_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_estudante_matricula1_idx` (`matricula_id` ASC) VISIBLE,
CONSTRAINT `fk_estudante_matricula1`
FOREIGN KEY (`matricula_id`)
REFERENCES `bd_universidade`.`matricula` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
29

-- -----------------------------------------------------
-- Table `bd_universidade`.`turma`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`turma` (
`id` INT NOT NULL AUTO_INCREMENT,
`designacao` VARCHAR(45) NULL,
`n_total_disciplinas` INT NULL,
`n_geral_estudantes` VARCHAR(45) NULL,
`estudante_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `designacao_UNIQUE` (`designacao` ASC) VISIBLE,
INDEX `fk_turma_estudante1_idx` (`estudante_id` ASC) VISIBLE,
CONSTRAINT `fk_turma_estudante1`
FOREIGN KEY (`estudante_id`)
REFERENCES `bd_universidade`.`estudante` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`curso`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`curso` (
`id` INT NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(45) NULL,
`turma_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `nome_UNIQUE` (`nome` ASC) VISIBLE,
INDEX `fk_curso_turma1_idx` (`turma_id` ASC) VISIBLE,
CONSTRAINT `fk_curso_turma1`
FOREIGN KEY (`turma_id`)
REFERENCES `bd_universidade`.`turma` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`dados_do_curso`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`dados_do_curso` (
`id` INT NOT NULL AUTO_INCREMENT,
`n_de_cursos` INT NULL,
`curso_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_dados_do_curso_curso1_idx` (`curso_id` ASC) VISIBLE,
CONSTRAINT `fk_dados_do_curso_curso1`
FOREIGN KEY (`curso_id`)
REFERENCES `bd_universidade`.`curso` (`id`)
30

ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`disciplina`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`disciplina` (
`id` INT NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(45) NULL,
`cod_disciplina` CHAR(6) NULL,
`opcional_nao_opcional` CHAR(3) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `nome_UNIQUE` (`nome` ASC) VISIBLE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`departamento`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`departamento` (
`id` INT NOT NULL AUTO_INCREMENT,
`n_estud_existentes` INT NULL,
`n_estud_novos` INT NULL,
`n_capac_maxima` INT NULL,
`dados_do_curso_id` INT NOT NULL,
`disciplina_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_departamento_dados_do_curso1_idx` (`dados_do_curso_id` ASC) VISIBLE,
INDEX `fk_departamento_disciplina1_idx` (`disciplina_id` ASC) VISIBLE,
CONSTRAINT `fk_departamento_dados_do_curso1`
FOREIGN KEY (`dados_do_curso_id`)
REFERENCES `bd_universidade`.`dados_do_curso` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_departamento_disciplina1`
FOREIGN KEY (`disciplina_id`)
REFERENCES `bd_universidade`.`disciplina` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`faculdade`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`faculdade` (
`id` INT NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(45) NULL,
`n_estudantes_inscritos` INT NULL,
31

`departamento_id` INT NOT NULL,


PRIMARY KEY (`id`),
INDEX `fk_faculdade_departamento1_idx` (`departamento_id` ASC) VISIBLE,
UNIQUE INDEX `nome_UNIQUE` (`nome` ASC) VISIBLE,
CONSTRAINT `fk_faculdade_departamento1`
FOREIGN KEY (`departamento_id`)
REFERENCES `bd_universidade`.`departamento` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`universidade`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`universidade` (
`id` INT NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(45) NULL,
`n_estud_existentes` INT NULL,
`n_estud_novos` INT NULL,
`n_total_disciplinas` INT NULL,
`faculdade_id` INT NOT NULL,
UNIQUE INDEX `nome_UNIQUE` (`nome` ASC) VISIBLE,
PRIMARY KEY (`id`),
INDEX `fk_universidade_faculdade_idx` (`faculdade_id` ASC) VISIBLE,
CONSTRAINT `fk_universidade_faculdade`
FOREIGN KEY (`faculdade_id`)
REFERENCES `bd_universidade`.`faculdade` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`professor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`professor` (
`id` INT NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(45) NULL,
`cod_profr` VARCHAR(45) NULL,
`departamento_id` INT NOT NULL,
`disciplina_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `cod_profr_UNIQUE` (`cod_profr` ASC) VISIBLE,
INDEX `fk_professor_departamento1_idx` (`departamento_id` ASC) VISIBLE,
INDEX `fk_professor_disciplina1_idx` (`disciplina_id` ASC) VISIBLE,
CONSTRAINT `fk_professor_departamento1`
FOREIGN KEY (`departamento_id`)
REFERENCES `bd_universidade`.`departamento` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
32

CONSTRAINT `fk_professor_disciplina1`
FOREIGN KEY (`disciplina_id`)
REFERENCES `bd_universidade`.`disciplina` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`situacao_de_estudante_na_disciplina`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`situacao_de_estudante_na_disciplina` (
`id` INT NOT NULL AUTO_INCREMENT,
`cod_disciplina_aprov` CHAR(6) NULL,
`cod_disciplina_repr` CHAR(6) NULL,
`estudante_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_situacao_de_estudante_na_disciplina_estudante1_idx` (`estudante_id` ASC) VISIBLE,
CONSTRAINT `fk_situacao_de_estudante_na_disciplina_estudante1`
FOREIGN KEY (`estudante_id`)
REFERENCES `bd_universidade`.`estudante` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`resultado_de_estudante`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`resultado_de_estudante` (
`id` INT NOT NULL AUTO_INCREMENT,
`nome_estudante` VARCHAR(45) NULL,
`resultado_final` VARCHAR(45) NULL,
`estudante_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_resultado_de_estudante_estudante1_idx` (`estudante_id` ASC) VISIBLE,
CONSTRAINT `fk_resultado_de_estudante_estudante1`
FOREIGN KEY (`estudante_id`)
REFERENCES `bd_universidade`.`estudante` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`historico_final_do_estudante`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`historico_final_do_estudante` (
`id` INT NOT NULL AUTO_INCREMENT,
`nota_final_disciplina_aprovada` INT NULL,
`cod_disciplina_aprov` CHAR(6) NULL,
33

`cod_disciplina_repr` CHAR(6) NULL,


`resultado_de_estudante_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `cod_disciplina_aprov_UNIQUE` (`cod_disciplina_aprov` ASC) VISIBLE,
UNIQUE INDEX `cod_disciplina_repr_UNIQUE` (`cod_disciplina_repr` ASC) VISIBLE,
INDEX `fk_historico_final_do_estudante_resultado_de_estudante1_idx` (`resultado_de_estudante_id`
ASC) VISIBLE,
CONSTRAINT `fk_historico_final_do_estudante_resultado_de_estudante1`
FOREIGN KEY (`resultado_de_estudante_id`)
REFERENCES `bd_universidade`.`resultado_de_estudante` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`curso_tem_disciplina`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`curso_tem_disciplina` (
`id` INT NOT NULL AUTO_INCREMENT,
`curso_id` INT NOT NULL,
`disciplina_id` INT NOT NULL,
PRIMARY KEY (`id`, `curso_id`, `disciplina_id`),
INDEX `fk_curso_has_disciplina_disciplina1_idx` (`disciplina_id` ASC) VISIBLE,
INDEX `fk_curso_has_disciplina_curso1_idx` (`curso_id` ASC) VISIBLE,
CONSTRAINT `fk_curso_has_disciplina_curso1`
FOREIGN KEY (`curso_id`)
REFERENCES `bd_universidade`.`curso` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_curso_has_disciplina_disciplina1`
FOREIGN KEY (`disciplina_id`)
REFERENCES `bd_universidade`.`disciplina` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `bd_universidade`.`turma_tem_disciplina`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bd_universidade`.`turma_tem_disciplina` (
`id` INT NOT NULL AUTO_INCREMENT,
`turma_id` INT NOT NULL,
`disciplina_id` INT NOT NULL,
PRIMARY KEY (`id`, `turma_id`, `disciplina_id`),
INDEX `fk_turma_has_disciplina_disciplina1_idx` (`disciplina_id` ASC) VISIBLE,
INDEX `fk_turma_has_disciplina_turma1_idx` (`turma_id` ASC) VISIBLE,
CONSTRAINT `fk_turma_has_disciplina_turma1`
FOREIGN KEY (`turma_id`)
REFERENCES `bd_universidade`.`turma` (`id`)
34

ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_turma_has_disciplina_disciplina1`
FOREIGN KEY (`disciplina_id`)
REFERENCES `bd_universidade`.`disciplina` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Código 1 - Script gerado a partir do MySql

2.6 – Testagem do funcionamento

No processo de testagem do banco de dados há que se recorrer a álgebra relacional. Segundo o site
[Link], a Álgebra Relacional é uma linguagem de consulta formal, porém requer
procedimentos (o usuário dá as instruções ao sistema para que o mesmo realize uma sequência de
operações na base de dados para calcular o resultado desejado).

Para esta fonte, a álgebra relacional apresenta seis operações fundamentais e algumas destas foram
emprestadas da teoria de conjunto:

i. Selecção;
ii. Projecção;
iii. Produto cartesiano;
iv. União;
v. Diferença entre conjuntos;
vi. Renomear.

Para não tornar este trabalho volumoso, será demostrada o funcionamento de algumas operações.
35

2.6.1 - Testagem do funcionamento usando a operação ‘Selecção’

Em Banco de Dados, a selecção é uma operação que para um conjunto inicial fornecido como
argumento, produz um outro conjunto (subconjunto) com estrutura idêntica, porém com apenas os
elementos do conjunto inicial que satisfazem a condição dada.

Exemplo:
Seja dada a relação (tabela)
Alunos (id, nome, genero, idade)
Values
(1, ‘Filomena’, ‘F’, 13),
(2, ‘Zito’, ‘M’, 12),
(3, ‘Rosa’, ‘F’, 10),
(4, ‘Jorgina’, ‘F’, 13),
(5, ‘Joel’, ‘M’, 16);

Usando a operação selecção tem-se:


Caso 1: seleccionar aluno de nome = Rosa.
Resultado: (id – nome – genero – idade): 3 – Rosa – F – 10.

Caso 2: seleccionar aluno de id = 2.


Resultado: (id – nome – genero – idade): 2 – Zito – M – 12.

Para o caso em estudo, tem-se primeiro a descrição de algumas entidades como mostra a imagem
seguinte.
36

Imagem 6 - Verificando os dados do DER a partir do terminar de script do Workbench do MySql


37

Imagem 7 - exemplo de tabela preenchida

Imagem 8 - Resultado da operação 'Selecção'


38

2.6.2 - Testagem do funcionamento usando a operação ‘Projecção’

A projecção é uma operação que produz um conjunto onde há elementos para cada elemento do
conjunto de entrada, sendo que a estrutura dos membros do conjunto resultante é definida nos
argumentos da operação.
Exemplo:
Dada a relação (tabela):
Alunos (id, nome, genero, idade)
Values
(1, ‘Filomena’, ‘F’, 13),
(2, ‘Zito’, ‘M’, 12),
(3, ‘Rosa’, ‘F’, 10),
(4, ‘Jorgina’, ‘F’, 13),
(5, ‘Joel’, ‘M’, 16);

Usando a operação projecção tem-se:


Caso 1: projectar o atributo nome sobre a relação (tabela) Alunos.
Resultado:
(nome): Filomena, Zito, Rosa, Jorgina, Joel.

Para o caso em estudo, tem-se:

Imagem 9 - Resultado da operação projecção


39

Conclusão

A criação de banco de dados para gestão de qualquer instituição como a universidade do caso do
trabalho requer definir os parâmetros/requisitos bem claros. Notou-se uma ligeira complexidade
neste trabalho devido algumas inconformidades e embasamento. No caso concreto é a diferença
entre faculdade e departamento, entre curso e turma. Todavia, foi muito importante enfrentar o
desafio e serviu de aprendizagem em matéria de manipulação de bancos de dados usando o
software caso do MySql.
40

Bibliografia

UnISCED, (2023), manual de Bancos de Dados 1;


Vídeo-aula sobre Modelo relacional disponível em
[Link]
[Link]
30446197-4fbe-457b-b992-2f6fb812b58f
[Link]
[Link]
[Link]
[Link]
(Acesso: 19.05.2023)

Você também pode gostar