Você está na página 1de 12

FACULDADE DE CIÊNCIAS

Departamento de Matemática e Informática

Trabalho de Semestral

da Disciplina de Base de Dados II

Dissertação para obtenção do Grau de Mestre em


[Engenharia Informática]
Concepção da
Base de Dados de um
Sistema de Registo Académico

Estudantes:
Fortunato Enoque Sambo
Jorge Luís Massingue

[Nome completo do autor]


Maputo, Dezembro de 2021

[Nome completo do autor]


1

[Nome completo do autor]


Introdução

O presente documento apresenta a descrição inicial do trabalho semestral da disciplina de Base


de Dados II. São apresentadas nas páginas que se seguem a descrição do sistema que terá o
suporte da base de dados a ser concebida. O fluxo de informação do sistema será igualmente
apresentado acompanhado de uma lista de requisitos funcionais e não funcionais.

Descrição

O presente trabalho se propõe a conceber a configuração da estrutura de uma base de dados


para um sistema de registo académico. O registo académico em causa tem como principal função
gerir os dados académicos de uma instituição de ensino fictícia.

O sistema de gestão do ensino geral deverá ser capaz de receber registos de estudantes inscritos,
docentes e suas respetivas turmas, e funcionários que exerçam funções administrativas, como os
Diretores Pedagógicos, Chefe de Secretaria , Diretores da Escola.

Fluxo de Informação do Sistema Proposto

Os primeiros dados que o sistema deverá ser capaz de receber são os dados relacionados aos
docentes e todo o corpo administrativo da instituição de ensino em causa. Em seguida os dados
dos estudantes serão introduzidos no sistema no acto da inscrição. Após todo o processo da
inscrição tiver sido concluído o alunos serão alocados à turmas em função da capacidade das
onde se encontram inseridas.

Identificação dos Requisitos

Os requisitos estão descritos textualmente, cada um contém uma referência composta por um
identificador único que inicia por RF, quando se trata de um requisito funcional, e NF, quando
se trata de um requisito não funcional.

Por exemplo: RF01 representa o requisito funcional número 01. NF01 representa o requisito
não funcional número 01.

Prioridade dos requisitos: Essencial, Importante, Desejável.

▪ Essencial (E) é o requisito sem o qual o sistema não entra em funcionamento.


Requisitos essenciais são requisitos imprescindíveis, que têm que ser implementados
impreterivelmente;

2
▪ Importante (I) é o requisito sem o qual o sistema entra em funcionamento, mas de
forma não satisfatória. Requisitos importantes devem ser implementados, mas, se não
forem, o sistema poderá ser implantado e usado mesmo assim;
▪ Desejável (D) é o requisito que não compromete as funcionalidades básicas do sistema,
isto é, o sistema pode funcionar de forma satisfatória sem ele. Requisitos desejáveis são
requisitos que podem ser deixados para versões posteriores do sistema, caso não haja
tempo hábil para implementá-los na versão que está sendo especificada.

Actores dos Requisitos Funcionais

▪ Utilizador - Representa o utilizador que irá interagir com o sistema;


▪ Sistema (S) - como o nome sugere, este actor representa o sistema. Que por sua vez
garante a correcta disponibilidade de suas funcionalidades a todos utilizadores
anteriormente mencionados.

Requisitos de Software

Nesta secção serão descritos os requisitos agrupados por tipo de requisito, funcional ou não
funcional. A coluna (Ref.) apresenta a referência de cada requisito e a coluna (Dep.)
apresenta as dependências de cada requisito em relação a outros requisitos.

Ref. Descrição Dep. Tipo Actor

Administrador
RF01 Controlar o numero de estudades maximos a serem alocados - E U
por turma.

RF02 Garantir que só seja aprovado um estudante com média superior ou - E U


igual a 10 valores e sem nenhuma nota inferior a 8 valores e só é
dispensado o estudante com média igual ou superior a 14, sem
nenhuma nota negativa.

RF03 Apresentar a pauta, conforme o código da turma fornecido. - E U

3
Criação de Tabela

CREATE TABLE PROFESSOR --- Responsável por armazenar os dados de todos os


professores

id_professor integer primary key,

nome varchar2(20),

apelido varchar2(20),

salario real,

data_contrato date,

funcao_administrativa varchar2(20) default '0'

);

CREATE TABLE CLASSE -- Responsável por controlar o progesso das estudantes ao longo
dos anos --

classe integer primary key,

ano integer

--nivel varchar2(20)

);

CREATE TABLE SALA -- Responsável por armazenar os dados de todas as salas de aulas--

id_sala integer primary key,

4
capacidade integer

);

CREATE TABLE TURMA -- Responsável por armazenar os dados de todas as turmas --

id_turma integer primary key,

nome varchar2(20) unique,

periodo varchar2(20),

classe_id integer,

-- sala_id integer,

--

-- CONSTRAINT fk_sala_id

-- FOREIGN KEY (sala_id)

-- REFERENCES Sala(id_sala),

CONSTRAINT fk_classe_cod

FOREIGN KEY (classe_id)

REFERENCES Classe(classe)

);

CREATE TABLE ALUNO -- Responsável por armazenar os dados de todas os alunos

cod_estudante integer primary key,

nome varchar2(20),

apelido varchar2(20),

5
sexo char(1) default 'M' not null,

constraint sexo_ck check (sexo in ('M', 'F')),

data_nasc date

-- turma_id integer,

--

-- CONSTRAINT fk_turma_id

-- FOREIGN KEY (turma_id)

-- REFERENCES Turma(id_turma)

);

CREATE TABLE TURMA_SALA -- Responsável por vincular a turma e sala por ela ocupada --

turma_id integer,

sala_id integer,

CONSTRAINT fk_cod_turma

FOREIGN KEY (turma_id)

REFERENCES Turma(id_turma),

CONSTRAINT fk_cod_sala

FOREIGN KEY (turma_id)

REFERENCES Sala(id_sala)

);

6
CREATE TABLE ALUNO_TURMA -- Responsável por vincular um aluno a turma a qual ele
pertence--

id_estudante integer,

id_turma integer,

CONSTRAINT fk_id_aluno

FOREIGN KEY (id_estudante)

REFERENCES Aluno(cod_estudante),

CONSTRAINT fk_id_turma

FOREIGN KEY (id_turma)

REFERENCES Turma(id_turma)

);

CREATE TABLE DISCIPLINA -- Responsável por armazenar os dados de todas as disciplinas


--

id_disciplina integer primary key,

nome varchar2(20),

--professor_id integer,

classe_id integer,

-- CONSTRAINT fk_professor_id

-- FOREIGN KEY (professor_id)

7
-- REFERENCES Professor(id_professor),

CONSTRAINT fk_classe_id

FOREIGN KEY (classe_id)

REFERENCES Classe(classe)

);

CREATE TABLE APROVEITAMENTO -- Responsável por armazenar o aproveitamento dos


alunos --

cod_aluno integer,

cod_disciplina integer,

ano integer,

nota1 real,

nota2 real,

media real,

classificacao VARCHAR2(30),

CONSTRAINT fk_aluno_id

FOREIGN KEY (cod_aluno)

REFERENCES Aluno(cod_estudante),

CONSTRAINT fk_disciplina_id

FOREIGN KEY (cod_disciplina)

8
REFERENCES Disciplina(id_disciplina)

);

-- A tabela abaixo Responsável por vincular um professor as disciplinas por ele ministradas--

CREATE TABLE PROFESSOR_DISCIPLINA

cod_professor integer,

cod_disciplina integer,

ano integer,

CONSTRAINT fk_id_professor

FOREIGN KEY (cod_professor)

REFERENCES Professor(id_professor),

CONSTRAINT fk_cod_disciplina

FOREIGN KEY (cod_disciplina)

REFERENCES Disciplina(id_disciplina)

);

Triggers

– O trigger abaixo é responsável pelo cumprimento do RF01, garantir que não seja alocado mais
estudantes do que a capacidade das salas--

CREATE OR REPLACE TRIGGER verificador

BEFORE INSERT OR UPDATE ON ALUNO_TURMA

FOR EACH ROW

9
ENABLE

DECLARE

capa number;

total number;

BEGIN

SELECT COUNT (*) INTO total from ALUNO_TURMA WHERE ID_TURMA =


:NEW.ID_TURMA

GROUP BY ID_ESTUDANTE;

-- SELECT s.CAPACIDADE INTO capa FROM ALUNO_TURMA e INNER JOIN


TURMA_SALA d ON e.ID_TURMA

--= d.TURMA_ID INNER JOIN SALA s ON s.ID_SALA = d.SALA_ID WHERE


:OLD.ID_TURMA = :NEW.ID_TURMA;

SELECT d.CAPACIDADE INTO capa FROM TURMA_SALA s INNER JOIN SALA d


ON d.ID_SALA = s.SALA_ID

WHERE s.TURMA_ID = :NEW.ID_TURMA;

IF total < capa THEN

Raise_Application_Error(-20205, ‘Atencao: não pode mais adicionar estudates a esta turma’);

END IF;

END;

10
O trigger a seguir é responsável pelo cumprimento do RF02, garantir que a classificação dos
estudantes seja de acordo com os seguintes critérios :

• Seja aprovado apenas o estudante com média superior ou igual a 10 valores e sem
nenhuma nota inferior a 8 valores.
• Só é dispensado o estudante com média igual ou superior a 14, sem nenhuma nota
negativa.

Create or replace trigger aproveitam

After insert on aproveitamento

Begin

Update aproveitamento

set media = (Nota1 + Nota2)/2;

Update aproveitamento

set classificacao='excluido' where media<9.5;

Update aproveitamento

set classificacao='admitido' where (media>=9.5 and media<13.5)or (media>=13.5 and


(nota1<9.5 or nota2<9.5));

Update aproveitamento

set classificacao='dispensado' where media>=13.5 and (nota1>=9.5 and nota2>=9.5);

End;

11
Views

A view abaixo criada, seve para imprimir a pauta, tendo sido fornecido o código da
turma via prompt.

CREATE OR REPLACE VIEW pauta

AS

SELECT P.COD_ALUNO, e.NOME, e.APELIDO, p.NOTA1, p.NOTA2, p.MEDIA,


p.CLASSIFICACAO, t.id_turma

FROM ALUNO e INNER JOIN APROVEITAMENTO p ON e.COD_ESTUDANTE =


p.COD_ALUNO

INNER JOIN ALUNO_TURMA t on t.ID_ESTUDANTE=p.COD_ALUNO INNER JOIN


TURMA tu on t.ID_TURMA = tu.ID_TURMA

where t.ID_turma='&introduza';

select * from pauta;

12

Você também pode gostar