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
studentId
eclassId
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)