| Home | Escopo | Processo | Design/Mockups | Configuração | Arquitetura | Gerência | Código | BD | Frontend | Backend |
|---|
Documentação do Schema do Banco de Dados
Visão Geral
Este documento descreve o schema do banco de dados para o sistema de gestão educacional. O sistema utiliza PostgreSQL como banco de dados principal e Prisma como ORM. O schema foi projetado para gerenciar usuários, estudantes, turmas, controle de frequência e atividades educacionais relacionadas, com foco em dados socioeconômicos e demográficos.
Configuração do Banco de Dados
- Provedor do Banco: PostgreSQL
- ORM: Prisma Client
-
Conexão: Variável de ambiente
DATABASE_URL
Diagrama de Relacionamentos
Enumerações
UserStatus
Define os possíveis estados para usuários do sistema.
-
ATIVO- Usuário está ativo no sistema -
INATIVO- Conta do usuário está desativada
StudentStatus
Define os possíveis estados para estudantes.
-
ATIVO- Estudante está matriculado e ativo -
INATIVO- Estudante não está mais ativo (formado, transferido, etc.)
FrequencyStatus
Define o status de presença para controle de frequência.
-
PRESENTE- Estudante estava presente -
AUSENTE- Estudante estava ausente
FormType
Define os tipos de formulários disponíveis no sistema.
-
PSICOLOGIA- Formulário de avaliação psicológica -
SOCIAL- Formulário de avaliação social
Race (Raça)
Define as categorias de raça conforme classificação do IBGE.
-
BRANCA- Raça branca -
PRETA- Raça preta -
PARDA- Raça parda -
AMARELA- Raça amarela -
INDIGENA- Raça indígena -
NA- Não se aplica ou não informado
Gender (Gênero)
Define as identidades de gênero reconhecidas pelo sistema.
-
MASCULINO- Gênero masculino -
FEMININO- Gênero feminino -
HOMEM_TRANS- Homem trans -
MULHER_TRANS- Mulher trans -
TRAVESTI- Travesti -
NAO_BINARIO- Não binário -
OUTRO- Outras identidades
SocialProgram (Programa Social)
Define os programas sociais governamentais.
-
BOLSA_FAMILIA- Programa Bolsa Família -
BPC_LOAS- Benefício de Prestação Continuada -
TARIFA_SOCIAL_ENERGIA- Tarifa Social de Energia Elétrica -
AUXILIO_GAS- Auxílio Gás -
PROGRAMA_ESTADUAL- Programas estaduais -
PROGRAMA_MUNICIPAL_VIA_CRAS- Programas municipais via CRAS
EmploymentStatus (Situação de Emprego)
Define a situação empregatícia.
-
EMPREGADO- Pessoa empregada -
DESEMPREGADO- Pessoa desempregada
SchoolYear (Ano Escolar)
Define os anos/séries escolares.
-
EDUCACAO_INFANTIL- Educação Infantil -
FUNDAMENTAL_1- Ensino Fundamental I (1º ao 5º ano) -
FUNDAMENTAL_2- Ensino Fundamental II (6º ao 9º ano) -
ENSINO_MEDIO_1- 1º ano do Ensino Médio -
ENSINO_MEDIO_2- 2º ano do Ensino Médio -
ENSINO_MEDIO_3- 3º ano do Ensino Médio -
EJA- Educação de Jovens e Adultos
EducationLevel (Nível de Escolaridade)
Define os níveis de escolaridade.
-
NENHUM- Sem escolaridade -
ALFABETIZADO- Alfabetizado -
FUNDAMENTAL_INCOMPLETO- Ensino Fundamental Incompleto -
FUNDAMENTAL_COMPLETO- Ensino Fundamental Completo -
ENSINO_MEDIO_INCOMPLETO- Ensino Médio Incompleto -
ENSINO_MEDIO_COMPLETO- Ensino Médio Completo -
SUPERIOR_INCOMPLETO- Ensino Superior Incompleto -
SUPERIOR_COMPLETO- Ensino Superior Completo -
POS_GRADUACAO- Pós-graduação
Entidades Principais
User (Usuário)
Representa usuários do sistema (professores, administradores, funcionários).
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do usuário |
uidFirebase |
String | Único | UID de autenticação do Firebase |
fullName |
String | Obrigatório | Nome completo do usuário |
email |
String | Único, Obrigatório | Endereço de email do usuário |
roleId |
Int | Opcional, Chave Estrangeira | Referência ao papel do usuário |
addressId |
Int | Obrigatório, Chave Estrangeira | Referência ao endereço do usuário |
createdAt |
DateTime | Padrão: now() | Data/hora de criação da conta |
status |
UserStatus | Padrão: ATIVO | Status atual do usuário |
Relacionamentos:
-
role: Muitos-para-Um com Role (opcional) -
address: Muitos-para-Um com Address (obrigatório) -
classes: Um-para-Muitos com Class (como professor)
Student (Estudante)
Representa estudantes no sistema educacional com informações socioeconômicas.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do estudante |
addressId |
Int | Opcional, Chave Estrangeira | Referência ao endereço do estudante |
fullName |
String | Obrigatório | Nome completo do estudante |
dateOfBirth |
DateTime | Opcional, Apenas data | Data de nascimento do estudante |
registrationNumber |
String | Único, Obrigatório | Número de matrícula do estudante |
enrollmentDate |
DateTime | Padrão: now(), Apenas data | Data inicial da matrícula |
disenrollmentDate |
DateTime | Opcional, Apenas data | Data quando o estudante saiu |
status |
StudentStatus | Padrão: ATIVO | Status atual do estudante |
levelId |
Int | Opcional, Chave Estrangeira | Referência ao nível do estudante |
socialName |
String | Opcional | Nome social do estudante |
race |
Race | Opcional | Raça/cor do estudante |
schoolName |
String | Opcional | Nome da escola que frequenta |
schoolShift |
String | Opcional | Turno escolar (manhã, tarde, noite) |
schoolYear |
SchoolYear | Opcional | Ano/série escolar |
socialPrograms |
SocialProgram | Opcional | Programa social que participa |
gender |
Gender | Opcional | Identidade de gênero |
employmentStatus |
EmploymentStatus | Opcional | Situação empregatícia |
gradeGap |
Boolean | Opcional | Indica se há defasagem escolar |
Relacionamentos:
-
address: Muitos-para-Um com Address (opcional) -
level: Muitos-para-Um com Level (opcional) -
family: Um-para-Muitos com FamilyMember -
frequencies: Um-para-Muitos com Frequency -
classes: Muitos-para-Muitos com Class (através de Enrollment) -
answers: Um-para-Muitos com Answer -
docs: Um-para-Muitos com Doc
Address (Endereço)
Representa endereços físicos para usuários, estudantes e familiares.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do endereço |
cep |
String | VarChar(9) | Código postal brasileiro (CEP) |
street |
String | Obrigatório | Nome da rua |
number |
String | Opcional, VarChar(10) | Número da residência |
complement |
String | Opcional | Complemento do endereço |
neighborhood |
String | Obrigatório | Bairro |
city |
String | Obrigatório | Nome da cidade |
state |
String | VarChar(2) | Sigla do estado |
Relacionamentos:
-
users: Um-para-Muitos com User -
students: Um-para-Muitos com Student -
familyMembers: Um-para-Muitos com FamilyMember
Estrutura Educacional
Role (Papel)
Define papéis de usuários dentro do sistema.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do papel |
name |
String | Único, Obrigatório | Nome do papel |
description |
String | Opcional | Descrição do papel |
Relacionamentos:
-
users: Um-para-Muitos com User
Level (Nível)
Representa níveis educacionais ou séries.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do nível |
name |
String | Único, Obrigatório | Nome do nível |
description |
String | Opcional | Descrição do nível |
Relacionamentos:
-
students: Um-para-Muitos com Student -
classes: Um-para-Muitos com Class
Activity (Atividade)
Representa diferentes tipos de atividades educacionais.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único da atividade |
name |
String | Único, Obrigatório | Nome da atividade |
Relacionamentos:
-
classes: Um-para-Muitos com Class
Class (Turma)
Representa turmas/cursos dentro do sistema.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único da turma |
name |
String | Obrigatório | Nome da turma |
activityId |
Int | Obrigatório, Chave Estrangeira | Referência à atividade associada |
levelId |
Int | Obrigatório, Chave Estrangeira | Referência ao nível da turma |
state |
String | Obrigatório | Estado/status da turma |
Relacionamentos:
-
teacher: Muitos-para-Muitos com User -
activity: Muitos-para-Um com Activity (obrigatório) -
level: Muitos-para-Um com Level (obrigatório) -
frequencies: Um-para-Muitos com Frequency -
students: Muitos-para-Muitos com Student (através de Enrollment)
Frequência e Matrícula
Enrollment (Matrícula)
Tabela de junção gerenciando relacionamento muitos-para-muitos entre estudantes e turmas.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único da matrícula |
studentId |
Int | Obrigatório, Chave Estrangeira | Referência ao estudante |
classId |
Int | Obrigatório, Chave Estrangeira | Referência à turma |
enrollmentDate |
DateTime | Padrão: now() | Data da matrícula |
endDate |
DateTime | Opcional | Data do fim da matrícula |
Restrições:
- Combinação única de
studentIdeclassId
Relacionamentos:
-
student: Muitos-para-Um com Student (obrigatório) -
class: Muitos-para-Um com Class (obrigatório)
Frequency (Frequência)
Rastreia a presença de estudantes nas turmas.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único da frequência |
studentId |
Int | Obrigatório, Chave Estrangeira | Referência ao estudante |
classId |
Int | Opcional, Chave Estrangeira | Referência à turma |
date |
DateTime | Apenas data, Obrigatório | Data do registro de presença |
status |
FrequencyStatus | Padrão: PRESENTE | Status de presença |
notes |
String | Opcional | Observações sobre a presença |
Relacionamentos:
-
student: Muitos-para-Um com Student (obrigatório) -
class: Muitos-para-Um com Class (opcional)
Família e Formulários
FamilyMember (Membro da Família)
Representa familiares ou responsáveis dos estudantes com informações socioeconômicas detalhadas.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do familiar |
studentId |
Int | Obrigatório, Chave Estrangeira | Referência ao estudante |
addressId |
Int | Obrigatório, Chave Estrangeira | Referência ao endereço |
fullName |
String | Obrigatório | Nome completo do familiar |
relationship |
String | Obrigatório | Parentesco com o estudante |
phoneNumber |
String | Obrigatório | Número de telefone para contato |
email |
String | Opcional | Email para contato |
socialName |
String | Opcional | Nome social do familiar |
race |
Race | Opcional | Raça/cor do familiar |
gender |
Gender | Opcional | Identidade de gênero |
educationLevel |
EducationLevel | Opcional | Nível de escolaridade |
dateOfBirth |
DateTime | Opcional, Apenas data | Data de nascimento |
socialPrograms |
SocialProgram | Opcional | Programas sociais que participa |
employmentStatus |
EmploymentStatus | Opcional | Situação empregatícia |
Relacionamentos:
-
student: Muitos-para-Muitos com Student -
address: Muitos-para-Um com Address (obrigatório)
Form (Formulário)
Representa formulários disponíveis no sistema.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do formulário |
submissionDate |
DateTime | Padrão: now() | Data de criação do formulário |
type |
FormType | Obrigatório | Tipo do formulário |
title |
String | Obrigatório | Título do formulário |
Relacionamentos:
-
questions: Um-para-Muitos com Question
Question (Pergunta)
Representa perguntas pertencentes a formulários.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único da pergunta |
formId |
Int | Obrigatório, Chave Estrangeira | Referência ao formulário |
statement |
String | Obrigatório | Texto da pergunta |
isRequired |
Boolean | Padrão: false | Se a pergunta é obrigatória |
Relacionamentos:
-
form: Muitos-para-Um com Form (obrigatório) -
answers: Um-para-Muitos com Answer
Answer (Resposta)
Representa respostas de estudantes a perguntas específicas.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único da resposta |
questionId |
Int | Obrigatório, Chave Estrangeira | Referência à pergunta |
studentId |
Int | Obrigatório, Chave Estrangeira | Referência ao estudante |
content |
String | Obrigatório | Conteúdo da resposta |
Relacionamentos:
-
question: Muitos-para-Um com Question (obrigatório) -
student: Muitos-para-Um com Student (obrigatório)
Documentos
Doc (Documento)
Representa documentos associados aos estudantes.
| Campo | Tipo | Restrições | Descrição |
|---|---|---|---|
id |
Int | Chave Primária, Auto-incremento | Identificador único do documento |
studentId |
Int | Obrigatório, Chave Estrangeira | Referência ao estudante |
slug |
String | Único, Obrigatório | Identificador único do documento |
type |
String | Obrigatório | Tipo do documento |
name |
String | Opcional | Nome do documento |
enrollmentDate |
DateTime | Padrão: now() | Data de cadastro do documento |
Relacionamentos:
-
student: Muitos-para-Um com Student (obrigatório)
