Pular para conteúdo

Diagrama de Entidade-Relacionamento (DER)

Este documento apresenta o modelo de dados relacional projetado para a camada de persistência do sistema web do projeto Micromouse. Sua finalidade é explicitar as entidades, os atributos e os relacionamentos necessários ao armazenamento do histórico de corridas, viabilizando a consulta posterior dos resultados. A representação gráfica é complementada pelo esquema relacional textual, em conformidade com o material de referência da disciplina.

A persistência é implementada em SQLite 3, conforme estabelecido pela restrição RE-10. Em decorrência, os tipos de dados restringem-se aos cinco reconhecidos nativamente pelo SGBD: INTEGER, REAL, TEXT, BLOB e NULL.

1. Entidades e Atributos

O modelo identifica duas entidades. A entidade Labirinto consolida os tipos de pista utilizados na competição (4x4, 8x8 e 16x16) e atua como tabela de referência. A entidade Corrida registra, para cada execução completa, o resumo final consolidado pelo backend ao receber a flag de conclusão emitida pelo firmware. O dimensionamento de cada registro respeita o limite de 10 KB estabelecido pelo RNF-06.

Entidade Labirinto

Atributo Tipo SQLite Descrição
id_labirinto (PK) INTEGER Identificador único do tipo de labirinto
dimensao TEXT Dimensão da pista: "4x4", "8x8" ou "16x16"

Entidade Corrida

Atributo Tipo SQLite Descrição
id_corrida (PK) INTEGER Identificador único do registro da corrida
trajeto TEXT Sequência de células percorridas, serializada em JSON compacto
mapa_paredes BLOB Matriz de paredes (até 128 bytes no pior caso, em 16x16)
tempo_conclusao_ms INTEGER Tempo total de conclusão, em milissegundos
velocidade_media_cms REAL Velocidade média do robô, em cm/s
consumo_bateria_pct REAL Variação percentual do nível de bateria durante a corrida
desafio_cumprido INTEGER Indicador de sucesso: 1 representa sucesso e 0 representa falha
data_hora TEXT Data e hora de registro, em formato ISO 8601
id_labirinto (FK) INTEGER Chave estrangeira que referencia Labirinto(id_labirinto)

2. Esquema Relacional

A representação textual do modelo segue a convenção adotada na disciplina, com a chave primária sublinhada e a chave estrangeira prefixada por #.

Labirinto(id_labirinto, dimensao)
Corrida(id_corrida, trajeto, mapa_paredes, tempo_conclusao_ms,
        velocidade_media_cms, consumo_bateria_pct, desafio_cumprido,
        data_hora, #id_labirinto)

3. Cardinalidades

O relacionamento registra vincula as duas entidades segundo a regra (0, n) — (1, 1). Um Labirinto pode estar associado a (0, n) Corridas, uma vez que um tipo de pista pode permanecer cadastrado antes que qualquer corrida tenha sido executada nele. Uma Corrida, por sua vez, pertence obrigatoriamente a (1, 1) Labirinto, o que viabiliza o filtro por tipo de pista exigido pela US14 e validado pelos casos de teste CT-22, CT-23 e CT-28.

A síntese gráfica do relacionamento expressa-se da seguinte forma:

Corrida -(0, n)- registra -(1, 1)- Labirinto

4. Validação dos Requisitos

O modelo viabiliza diretamente o atendimento aos requisitos associados à persistência. A separação por meio da chave estrangeira id_labirinto permite a aplicação dos filtros previstos pela US14 (consulta por labirinto específico ou por todos os labirintos), validada pelos CT-22, CT-23 e CT-28. A escrita no banco ocorre exclusivamente após a flag de conclusão (US13, CT-20 e CT-21), e nenhum endpoint público de modificação ou exclusão é exposto, conforme determinado pelo RNF-10 e verificado pelo CT-40. A ausência de entidades de usuário é deliberada: a interface web opera em modo somente leitura sobre o histórico e não requer controle de perfis de acesso.