|
|
# 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` 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 |