Skip to content

MateusMonteiro11/transport_management_system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SQL Modelagem Supabase Status License

🚍 Sistema de Gerenciamento de Transporte Universitário

Banco de Dados Relacional • Projeto Acadêmico

Este repositório contém a modelagem básica de um projeto voltado a otimização de sistemas de transporte, este material será disponibilizado para uso acadêmico e visualização aprofundada, toda a base de dados utilizada foi criada de maneira fictícia, portanto não há nenhum dado real de fato nos arquvivos divulgados.


📑 Índice


📌 Descrição do Problema

Faculdades que oferecem transporte para alunos e funcionários frequentemente enfrentam:

  • 🚫 Superlotação em determinados veículos
  • 📉 Ociosidade em outros
  • 🕒 Conflitos de horário
  • 🛣️ Rotas pouco otimizadas
  • 🧑‍✈️ Dificuldade de gestão de motoristas e fornecedores

Este banco de dados foi projetado para resolver esses problemas e oferecer um sistema sólido para decisões operacionais.


🎯 Objetivos do Sistema

Objetivo Descrição
🚍 Organizar Transporte Distribuir corretamente os usuários entre os veículos
🛣️ Otimizar Rotas Reduzir o tempo total de deslocamento
🕒 Sincronizar Horários Evitar atrasos e conflitos com o horário acadêmico
📊 Equilibrar Ocupação Distribuir a demanda de forma inteligente
🧑‍✈️ Integrar Entidades Motoristas, veículos, fornecedores, rotas e usuários

🗄️ Modelo Relacional (MR)

(Modelo já normalizado e documentado)

MR


🧹 Normalização

Foram aplicadas as 3 Formas Normais:

🔹 Primeira Forma Normal (1FN)
  • Remoção de atributos multivalorados
  • Padronização dos domínios
  • Tabelas duplicadas foram unificadas
🔹 Segunda Forma Normal (2FN)
  • Separação de dependências parciais
  • Criação da tabela enderecos
  • Eliminação de dados redundantes
🔹 Terceira Forma Normal (3FN)
  • Criação da tabela associativa alocacoes_usuarios_veiculos
  • Unificação de ônibus/peruas em veiculos com tipo_veiculo
  • Remoção de dependências transitivas

🛢️ Arquivos SQL

O projeto inclui dois arquivos principais:

📁 1. tables_and_inserts.sql

Contém:

  • Criação das tabelas
  • Definição de PKs e FKs
  • Inserts com dados de teste

📁 2. consultas.sql

Contém queries analíticas, incluindo:

  • Rotas com maior demanda
  • Distribuição de usuários por veículo
  • Fornecedores ativos
  • Média de capacidade
  • Relação motorista → veículos

👀 Preview dos Arquivos

🧱 tables_and_inserts.sql

CREATE TABLE rotas (
    id_rota SERIAL PRIMARY KEY,
    tempo_estimado INTERVAL NOT NULL,
    demanda_usuarios INT NOT NULL CHECK (demanda_usuarios >= 0),
    endereco_partida_id VARCHAR(9) NOT NULL,
    endereco_chegada_id VARCHAR(9) NOT NULL,
    horario_partida TIME NOT NULL,
    FOREIGN KEY (endereco_partida_id) REFERENCES enderecos(id_endereco),
    FOREIGN KEY (endereco_chegada_id) REFERENCES enderecos(id_endereco)
);

CREATE TABLE veiculos (
    id_veiculo VARCHAR(20) PRIMARY KEY,
    tipo_veiculo VARCHAR(10) NOT NULL CHECK (tipo_veiculo IN ('onibus', 'perua')),
    capacidade INT NOT NULL CHECK (capacidade > 0 AND capacidade <= 50),
    eixos INT NOT NULL CHECK (eixos > 0),
    rota_id INT NOT NULL REFERENCES rotas(id_rota),
    fornecedor_id VARCHAR(18) NOT NULL REFERENCES fornecedores(fornecedor_id),
    motorista_id INT NOT NULL REFERENCES motoristas(motorista_id)
);

CREATE TABLE motoristas (
    motorista_id SERIAL PRIMARY KEY,
    nome VARCHAR(150) NOT NULL,
    telefone VARCHAR(20) NOT NULL,
    turno VARCHAR(20) NOT NULL CHECK (turno IN ('manha', 'tarde', 'noite')),
    tipo_cnh VARCHAR(5) NOT NULL CHECK (tipo_cnh IN ('D', 'E')),
    fornecedor_id VARCHAR(18) NOT NULL,
    FOREIGN KEY (fornecedor_id) REFERENCES fornecedores(fornecedor_id)
);

CREATE TABLE alocacoes_usuarios_veiculos (
    usuario_id VARCHAR(50) NOT NULL,
    id_veiculo VARCHAR(20) NOT NULL,
    PRIMARY KEY (usuario_id, id_veiculo),
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id_usuario),
    FOREIGN KEY (id_veiculo) REFERENCES veiculos(id_veiculo)
);

🔍 consultas.sql

-- QUERY 1 
-- Seleciona informações sobre rotas que têm mais de 10 usuários alocados
SELECT 
    r.id_rota,
    m.nome AS nome_motorista,
    COUNT(DISTINCT auv.usuario_id) AS total_usuarios,
    AVG(v.capacidade) AS media_capacidade_veiculo
FROM 
    rotas r
JOIN 
    veiculos v ON r.id_rota = v.rota_id
JOIN 
    motoristas m ON v.motorista_id = m.motorista_id
JOIN 
    alocacoes_usuarios_veiculos auv ON v.id_veiculo = auv.id_veiculo
WHERE 
    r.id_rota IN (
        -- Subconsulta que retorna rotas com mais de 10 usuários distintos alocados
        SELECT v2.rota_id
        FROM veiculos v2
        JOIN alocacoes_usuarios_veiculos auv2 ON v2.id_veiculo = auv2.id_veiculo
        GROUP BY v2.rota_id
        HAVING COUNT(DISTINCT auv2.usuario_id) > 10
    )
GROUP BY 
    r.id_rota, m.nome
ORDER BY 
    total_usuarios DESC;

🚦 Cenários de Uso

Cenário Descrição
🚫 Superlotação O sistema redistribui usuários entre veículos quando a capacidade máxima é ultrapassada.
🕒 Conflito de Horários O usuário só pode reservar rotas compatíveis com seu horário de aula.
🛣️ Otimização de Rotas Identifica rotas ociosas ou sobrecarregadas para melhor balanceamento.
🧑‍✈️ Gestão Operacional Permite consultar motoristas por turno, fornecedor e veículos associados.

🟦 Integração com Supabase

A visualização deste projeto é disponibilizada através do supabase, la armazenamos os triggers, funções, views entre outras funcionalidades adicionais que não poderão ser disponibilizadas por aqui diretamente, toda estrutura atualizada deste projeto será implementada de forma privada para a impossibilitação de descasos de plágio.


📊 Dashboards Interativos

Este projeto conta com dashboards desenvolvidos no Grafana 12.4, conectados diretamente ao banco de dados hospedado no Supabase.

Os painéis permitem visualizar:

  • Ocupação dos veículos
  • Veículos ociosos
  • Ranking de rotas por demanda
  • Comparativo: capacidade média × ocupação média
  • Distribuição de usuários (curso e turno)
  • Veículos por fornecedor
  • Motoristas por turno
  • Mapa operacional completo (rota → veículo → motorista → fornecedor)
  • Alocações detalhadas dos usuários

As imagens abaixo mostram prévias reais dos painéis criados:

📌 Ocupação dos Veículos

Ocupação

📌 Veículos Ociosos

Ociosos

📌 Ranking de Rotas por Demanda

Ranking Rotas

📌 Capacidade vs Ocupação Média

Capacidade vs Ocupação

📌 Distribuição de Alunos por Curso

Alunos por Curso

📌 Distribuição de Alunos por Turno

Alunos por Turno

📌 Veículos por Fornecedor

Veículos Fornecedor

📌 Mapa Operacional Completo

Mapa Operacional

Todas as capturas acima foram geradas diretamente do dashboard oficial deste projeto.


🖼 Prévia Geral do Dashboard

🔗 Para facilitar a visualização, segue um overview da ultima snapshot lançada do dashboard completo: https://mateusmonteiro11.grafana.net/dashboard/snapshot/VkGuV0L8I7bUen8MRnfvZwdUgz0r0nzz


🛠️ Tecnologias Utilizadas

  • 💾 SQL (DDL, DML, DQL)
  • 🧩 Modelagem MER e Modelo Relacional
  • 📊 Grafana Data Source
  • 🧹 Normalização (1FN → 3FN)
  • 🐘 PostgreSQL / SQLite / MySQL
  • 🟩 Supabase
  • 🗺️ DrawSQL / DBML / Workbench

📚 Licença

Este é um projeto acadêmico, porém é de suma uma tecnologia voltada a resolução de um problema real, portanto este projeto pode ser atualizado brevemente e suas alterações futuras ou qualquer dado relacionado aos novos lançamentos não poderão ser disponibilizados diretamente. Os arquivos da criação de tabelas, inserts e consultas estarão disponiveis para consultas acadêmicas e visualização para análise aprofundada, porém não permitiremos plágio ou qualquer utilização deste material de forma imprudente.

About

A database system which provides transport management

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors