Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Wiki Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • WimBelemDon
  • WikiWiki
  • Wiki
  • Banco de Dados

Banco de Dados · Changes

Page history
docs(wiki): write database wiki authored Sep 06, 2025 by Felipe Conzatti Frison's avatar Felipe Conzatti Frison
Hide whitespace changes
Inline Side-by-side
Banco-de-Dados.md 0 → 100644
View page @ 27e667a1
# 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
![Ages-Wimbelemdon__1_](uploads/42948afbf2da5d43c9e6db0e3ac992ff/Ages-Wimbelemdon__1_.png)
## 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` e `classId`
**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)
\ No newline at end of file
Clone repository
  • Banco de Dados
  • Escopo
  • Home
  • arquitetura
  • frontend
  • processo