Você está na página 1de 13

UNIVERSIDADE FEDERAL DE SANTA CATARINA

Trabalho Final

Sistema Gerenciador de Competições de Natação

Discentes:

Ítalo Manzine Amaral Duarte Garofalo (20204027)


Carla de Matos Roxo (20150466)

Docentes:
Alexandre Leopoldo Gonçalves

Araranguá, 04 de novembro de 2022.


1. Descrição geral do sistema ……………………………..…………………………... 3

2. Descrição detalhada do sistema visando a modelagem …...…….……………. 3

3. Modelagem Conceitual ….……………………………..………….……….……… 4


4. Modelo Lógico ...…………………………………………..………….……………… 5
5. Script DDL …..…………………………………………..………….………………… 5
6. Consultas ...…..…………………………………………..………….…………………10

2
1. Descrição geral do sistema:
O desenvolvimento desse sistema proposto para o trabalho final relativo à
disciplina Banco de Dados I tem como finalidade facilitar clubes e organizações de
pequeno/médio porte que realizam competições, lançarem e organizar os dados
referente às mesmas.

2. Descrição detalhada do sistema visando a modelagem:


Sistemas de gerenciamento de competições de natação facilitam a vida de
árbitros e atletas nesse meio esportivo, sendo de grande importância para garantir
registro e armazenamento de informações obtidas em competições, além de manter
históricos completos para atletas quanto às provas realizadas e tempos obtidos. Tais
sistemas mostram grande simplicidade de manuseio e dão abertura para novas
implementações, buscando melhorar a acessibilidade e persistência de dados
coletados.
Por meio dessa nova abordagem, busca-se a simplificação do trabalhos dos
árbitros e agilização de classificação dos resultados em competições de
ligas/organizações de médio e pequeno porte, por parte do sistema, assim,
agilizando o lançamento dos resultados de uma competição, além de melhorar a
busca e consulta de tempos, provas, competições, desempenhos e outros tipos de
dados para os indivíduos envolvidos em um evento desse calibre, desde simples
espectadores, atletas, treinadores e outros colaboradores que possam se interessar
pela área em quesito.
Realizada uma análise sobre os requisitos necessários para o sistema
constatou-se:
● O sistema deve permitir que diferentes ligas/organizações possam
requisitar cadastro, apresentado, nome, CNPJ, telefone, logo,
endereço e email.
● O sistema deve permitir que as ligas/organizações possam cadastrar
ou alterar suas taxas de filiação para clubes.
● O sistema deve permitir que as ligas/organizações possam cadastrar
diferentes competições, sendo que em cada competição pode haver
“n” provas.
● O sistema deve permitir que as ligas/organizações cadastrem os seus
árbitros, apresentando nome, cpf, telefone e email.
● O sistema deve permitir que as ligas/organizações possam atribuir o
tipo de árbitro a cada árbitro registrado para cada competição.
● O sistema deve mostrar as ligas/organizações, as competições
relacionadas às ligas, as provas relacionadas às competições, o
andamento de cada competição e prova e, os resultados de cada
competição e prova quando as mesmas estiverem encerradas.
● O sistema deve permitir que as ligas/organizações, clubes e atletas,
possam consultar os resultados das competições.

3
● O sistema deve permitir que clubes de natação possam se
cadastrar/filiar a diferentes organizações, apresentando, nome, CNPJ,
logo, cidade, estado, país e email.
● O sistema deve permitir que dentro do acesso de clubes, possam ser
cadastrados os treinadores, apresentando nome, CREF,
nacionalidade, telefone, foto e email.
● O sistema deve permitir que os treinadores cadastrados em um clube
possam registrar seus atletas, apresentando nome, data de
nascimento, foto, telefone, CPF e nacionalidade.
● O sistema deve disponibilizar para cada atleta o histórico de provas e
competições que já participou e os respectivos tempos realizados de
cada prova.
● A organização, quando cadastra uma competição deve informar o
nome, a data de início e fim para as inscrições, endereço, cidade,
estado, país, tipo de piscina, taxa de inscrição, taxa de não
comparecimento do atleta.
● A organização, quando cadastra as provas dentro das competições,
deve informar o tipo da prova, a classe, o status, a quantidade de
atletas permitidas e a quantidade de séries.
● O sistema deve permitir que os árbitros responsáveis por um atleta,
em uma prova de uma competição, possam registar os tempos
coletados ou desclassificar os atletas.

3. Modelagem Conceitual:

4
4. Modelo Lógico:

5. Script DDL:
CREATE DATABASE IF NOT EXISTS sgcn_db;

USE sgcn_db;

CREATE TABLE IF NOT EXISTS evento (

ID_COMPETICAO INT PRIMARY KEY AUTO_INCREMENT,

ID_ORGANIZACAO INT,

nome VARCHAR(100),

data_inicio DATE,

data_fim DATE,

endereco VARCHAR(100),

tipo_piscina VARCHAR(11),

taxa_inscricao DECIMAL(9,2),

5
taxa_noShow DECIMAL(9,2)

);

CREATE TABLE IF NOT EXISTS filiacao (

ID_CLUBE INT,

ID_ORGANIZACAO INT,

PRIMARY KEY(ID_CLUBE,ID_ORGANIZACAO)

);

CREATE TABLE IF NOT EXISTS organizacao (

ID_ORGANIZACAO INT PRIMARY KEY AUTO_INCREMENT,

taxa_filiacao DECIMAL(9,2)

);

CREATE TABLE IF NOT EXISTS clube (

ID_CLUBE INT PRIMARY KEY AUTO_INCREMENT,

CNPJ VARCHAR(14),

email VARCHAR(100),

logo BLOB,

telefone VARCHAR(14),

pais VARCHAR(100),

cidade VARCHAR(100),

estado VARCHAR(100),

nome VARCHAR(100)

);

CREATE TABLE IF NOT EXISTS treinador (

ID_TREINADOR INT PRIMARY KEY AUTO_INCREMENT,

nome VARCHAR(100),

6
CREF VARCHAR(14),

foto BLOB,

nacionalidade VARCHAR(100),

telefone VARCHAR(14),

email VARCHAR(100)

);

CREATE TABLE IF NOT EXISTS atleta (

ID_ATLETA INT PRIMARY KEY AUTO_INCREMENT,

CPF VARCHAR(11),

data_nascimento DATE,

foto BLOB,

nacionalidade VARCHAR(100),

nome VARCHAR(100),

telefone VARCHAR(14)

);

CREATE TABLE IF NOT EXISTS inscricao_resultado (

ID_INSCRICAO INT PRIMARY KEY AUTO_INCREMENT,

ID_ATLETA INT,

ID_COMPETICAO INT,

serie INT,

raia INT,

FOREIGN KEY(ID_ATLETA) REFERENCES atleta (ID_ATLETA),

FOREIGN KEY(ID_COMPETICAO) REFERENCES evento (ID_COMPETICAO)

);

CREATE TABLE IF NOT EXISTS evento_prova (

ID_Prova INT,

7
ID_COMPETICAO INT,

status_prova VARCHAR(100),

PRIMARY KEY(ID_Prova,ID_COMPETICAO),

FOREIGN KEY(ID_COMPETICAO) REFERENCES evento (ID_COMPETICAO)

);

CREATE TABLE IF NOT EXISTS historico (

ID_INSCRICAO INT,

ID_Prova INT,

data DATE,

PRIMARY KEY(ID_INSCRICAO,ID_Prova),

FOREIGN KEY(ID_INSCRICAO) REFERENCES inscricao_resultado


(ID_INSCRICAO)

);

CREATE TABLE IF NOT EXISTS prova (

ID_Prova INT PRIMARY KEY AUTO_INCREMENT,

Nome_Prova VARCHAR(100)

);

CREATE TABLE IF NOT EXISTS patrocina (

ID_COMPETICAO INT,

ID_PATROCINADOR INT,

PRIMARY KEY(ID_COMPETICAO,ID_PATROCINADOR),

FOREIGN KEY(ID_COMPETICAO) REFERENCES evento (ID_COMPETICAO)

);

CREATE TABLE IF NOT EXISTS patrocinador (

ID_PATROCINADOR INT PRIMARY KEY AUTO_INCREMENT,

nome VARCHAR(100),

8
logo BLOB,

valor_patrocinio DECIMAL(9,2)

);

CREATE TABLE IF NOT EXISTS escalacao_registro_tempo (

ID_REGISTRO INT PRIMARY KEY AUTO_INCREMENT,

ID_ARBITRO INT,

ID_COMPETICAO INT,

FOREIGN KEY(ID_COMPETICAO) REFERENCES evento (ID_COMPETICAO)

);

CREATE TABLE IF NOT EXISTS arbitro_prova (

tempo VARCHAR(8),

ID_Prova INT,

ID_REGISTRO INT,

PRIMARY KEY(ID_Prova,ID_REGISTRO),

FOREIGN KEY(ID_Prova) REFERENCES prova (ID_Prova),

FOREIGN KEY(ID_REGISTRO) REFERENCES escalacao_registro_tempo


(ID_REGISTRO)

);

CREATE TABLE IF NOT EXISTS arbitro (

ID_ARBITRO INT PRIMARY KEY AUTO_INCREMENT,

ID_ORGANIZACAO INT,

nome VARCHAR(100),

email VARCHAR(100),

telefone VARCHAR(14),

cpf VARCHAR(11),

tipo_arbitro ENUM('GERAL', 'PERCURSO', 'BORDA'),

FOREIGN KEY(ID_ORGANIZACAO) REFERENCES organizacao (ID_ORGANIZACAO)

9
);

CREATE TABLE IF NOT EXISTS cadastro (

ID_CADASTRO INT PRIMARY KEY AUTO_INCREMENT,

ID_CLUBE INT,

ID_TREINADOR INT,

ID_ATLETA INT,

DATA_CADASTRO DATE,

FOREIGN KEY(ID_CLUBE) REFERENCES clube (ID_CLUBE),

FOREIGN KEY(ID_TREINADOR) REFERENCES treinador (ID_TREINADOR),

FOREIGN KEY(ID_ATLETA) REFERENCES atleta (ID_ATLETA)

);

ALTER TABLE evento ADD FOREIGN KEY(ID_ORGANIZACAO) REFERENCES


organizacao (ID_ORGANIZACAO);

ALTER TABLE filiacao ADD FOREIGN KEY(ID_CLUBE) REFERENCES clube


(ID_CLUBE);

ALTER TABLE filiacao ADD FOREIGN KEY(ID_ORGANIZACAO) REFERENCES


organizacao (ID_ORGANIZACAO);

ALTER TABLE evento_prova ADD FOREIGN KEY(ID_Prova) REFERENCES prova


(ID_Prova);

ALTER TABLE historico ADD FOREIGN KEY(ID_Prova) REFERENCES prova


(ID_Prova);

ALTER TABLE patrocina ADD FOREIGN KEY(ID_PATROCINADOR) REFERENCES


patrocinador (ID_PATROCINADOR);

ALTER TABLE escalacao_registro_tempo ADD FOREIGN KEY(ID_ARBITRO)


REFERENCES arbitro (ID_ARBITRO);

6. Consultas:
6.1. Listar a quantidade de atletas inscritos por evento em eventos futuros:

SELECT evt.nome, COUNT(DISTINCT ins.ID_ATLETA) qty_atl

FROM atleta AS atl

10
INNER JOIN inscricao_resultado AS ins ON atl.ID_ATLETA =
ins.ID_ATLETA

INNER JOIN evento AS evt ON ins.ID_COMPETICAO =


evt.ID_COMPETICAO

WHERE evt.data_fim > CURDATE()

GROUP BY evt.nome;

6.2. Listar o valor total arrecadado em taxa de inscrição por evento em


eventos que já acabaram:

SELECT evt.nome, evt.taxa_inscricao * COUNT(DISTINCT ins.ID_ATLETA) AS


valor_arrecadado_evento

FROM inscricao_resultado AS ins

INNER JOIN evento AS evt ON ins.ID_COMPETICAO =


evt.ID_COMPETICAO

WHERE evt.data_fim < CURDATE()

GROUP BY evt.nome, evt.taxa_inscricao

ORDER BY valor_arrecadado_evento DESC

11
LIMIT 10;

6.3. Listar o valor total arrecadado por cada organização pelo total de
eventos passados que ela possua:

SELECT subq.id_org, SUM(subq.valor_arrecadado_evento) AS


valor_arrecadado_organizacao
FROM (
SELECT org.ID_ORGANIZACAO AS id_org, evt.taxa_inscricao *
COUNT(DISTINCT ins.ID_ATLETA) AS valor_arrecadado_evento
FROM organizacao AS org
INNER JOIN evento AS evt ON org.ID_ORGANIZACAO =
evt.ID_ORGANIZACAO
INNER JOIN inscricao_resultado AS ins ON ins.ID_COMPETICAO =
evt.ID_COMPETICAO
WHERE evt.data_fim < CURDATE()
GROUP BY id_org, evt.taxa_inscricao
HAVING valor_arrecadado_evento >= ${minValue}
) AS subq
GROUP BY id_org
ORDER BY valor_arrecadado_organizacao DESC;

12
13

Você também pode gostar