Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W 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
  • WeConecta - Plataforma digital para questionários de saúde
  • Wiki
  • Wiki
  • banco_dados

banco_dados · Changes

Page history
Update banco_dados authored Sep 30, 2025 by William De Oliveira Klein's avatar William De Oliveira Klein
Hide whitespace changes
Inline Side-by-side
banco_dados.md
View page @ ca88a8a4
...@@ -4,42 +4,113 @@ O projeto WeConecta utiliza o PostgreSQL como sistema gerenciador de banco de da ...@@ -4,42 +4,113 @@ O projeto WeConecta utiliza o PostgreSQL como sistema gerenciador de banco de da
O PostgreSQL é um banco de dados relacional robusto, confiável e amplamente utilizado em aplicações que exigem consistência, integridade e suporte a operações complexas. Ele oferece recursos avançados como controle de concorrência multiversão (MVCC), suporte a transações ACID, extensibilidade com funções e tipos personalizados, além de boa performance em ambientes de produção com grande volume de dados. O PostgreSQL é um banco de dados relacional robusto, confiável e amplamente utilizado em aplicações que exigem consistência, integridade e suporte a operações complexas. Ele oferece recursos avançados como controle de concorrência multiversão (MVCC), suporte a transações ACID, extensibilidade com funções e tipos personalizados, além de boa performance em ambientes de produção com grande volume de dados.
## Relacionamentos ## Modelo Lógico
- Um usuário pode estar associado a vários questionários A seguinte modelagem foi desenvolvida utilizando a ferramenta online dbdiagram.io:
(`Usuario_Questionario.id_usuario → Usuario.id`,
`Usuario_Questionario.id_questionario → Questionario.id`)
- Um usuário pode ter vários registros de participação em questionários ![Untitled](uploads/82bab072fc991467ea2fec09d3e38afe/Untitled.png)
(`Usuario.usuario_questionarios → Usuario_Questionario.id_usuario`)
- Um questionário pode ter vários usuários participantes ## Tabelas
(`Questionario.usuario_questionarios → Usuario_Questionario.id_questionario`)
- Um questionário começa em uma primeira mensagem A seguir, têm-se explicações detalhadas sobre as tabelas desenvolvidas para o banco de dados.
(`Questionario.id_primeira_mensagem → Mensagem.id`)
- Um questionário pode ter vários fluxos de mensagens ## users
(`Fluxo_Questionario.id_questionario → Questionario.id`)
- Uma mensagem pode ser a **atual**, **anterior** ou **próxima** em um fluxo Tabela que armazena os usuários do sistema (autenticação, perfil e status). Cada registro representa um usuário único da API.
(`Fluxo_Questionario.id_mensagem_atual → Mensagem.id`,
`Fluxo_Questionario.id_mensagem_anterior → Mensagem.id`,
`Fluxo_Questionario.id_proxima_mensagem → Mensagem.id`)
- Uma mensagem pode ter várias respostas de usuários | Nome da Coluna | Tipo de Dado | Restrições (Constraints) | Descrição | Valor Exemplo |
(`Resposta.id_mensagem → Mensagem.id`) |---|---|---|---|---|
| id | integer (auto-increment) | **PRIMARY KEY** | Identificador único do usuário. | 57 |
| email | varchar(255) | **UNIQUE**, **NOT NULL** | E-mail de login do usuário. | [email protected] |
| password | varchar(255) | **NOT NULL** | Hash da senha do usuário. | `$2a$10$...` |
| phone | varchar(11) | **UNIQUE**, **NULLABLE** | Telefone (somente dígitos). Pode ficar vazio. | `51999990000` |
| friendly_name | varchar(255) | **NOT NULL** | Nome de exibição do usuário. | João Silva |
| role | enum(`UserRole`) | **DEFAULT** `'MEMBER'` | Papel do usuário no sistema. Pode ser `ADMIN` (administrador, com acesso total e permissões de gerenciamento) ou `MEMBER` (usuário comum, com permissões limitadas). O valor padrão é `MEMBER`. | MEMBER |
| blocked_at | timestamp | **NULLABLE** | Data/hora em que o usuário foi bloqueado (se houver). | 2025-09-01 13:45:12 |
| first_login | boolean | **DEFAULT** `true` | Indica se é o primeiro acesso após cadastro. | false |
| created_at | timestamp | **DEFAULT** `CURRENT_TIMESTAMP` | Momento de criação do registro. | 2025-09-01 12:30:00 |
- Uma mensagem pode ter várias alternativas de resposta ### Observações e Relacionamentos
(`Alternativa.id_mensagem → Mensagem.id`) - **Relacionamentos**: 1:N com `users_surveys` (`User` → `UsersSurveys`), permitindo consultar os questionários vinculados a cada usuário.
- Uma alternativa pode direcionar o fluxo para a próxima mensagem ## surveys
(`Fluxo_Questionario.id_alternativa → Alternativa.id`)
- Uma resposta pode conter a alternativa escolhida Tabela que representa os questionários do sistema (metadados, status de publicação e fluxo de navegação entre elementos).
(`Resposta.id_alternativa_selecionada → Alternativa.id`)
- Um questionário pode ter várias respostas | Nome da Coluna | Tipo de Dado | Restrições (Constraints) | Descrição | Valor Exemplo |
(`Resposta.id_questionario → Questionario.id`) |---|---|---|---|---|
| id | integer (auto-increment) | **PRIMARY KEY** | Identificador único do questionário. | 12 |
| first_survey_element | integer | **FK** → `survey_elements(id)`, **NULLABLE**, **ON DELETE SET NULL** | Primeiro elemento do fluxo do questionário. | 101 |
| title | varchar(255) | **NOT NULL** | Título do questionário. | Pesquisa de Satisfação |
| description | varchar(500) | **NULLABLE** | Descrição breve do questionário. | Avalie seu atendimento |
| url | varchar(255) | **NULLABLE** | URL pública/slug de acesso ao questionário. | `/q/satisfacao-2025` |
| is_published | boolean | **DEFAULT** `false` | Indica se o questionário está publicado. | true |
| created_at | timestamp | **DEFAULT** `CURRENT_TIMESTAMP` | Momento de criação do registro. | 2025-09-01 12:30:00 |
| flow | json | **NULLABLE**, **DEFAULT** `null` | Definição do fluxo entre elementos (nós e setas/opções). | ver abaixo |
![image](uploads/4e587a430c6ae25ba10879b0d52359b0/image.png) ### Observações e Relacionamentos
- **flow (JSON)**: lista de nós do fluxo. Cada item mapeia um elemento do questionário e suas opções de saída (com setas para o próximo elemento). Estrutura esperada:
```json
[
{
"surveyElementId": 101,
"coordinates": { "x": 120, "y": 80 },
"options": [
{
"coordinates": { "x": 200, "y": 80 },
"optionId": 5,
"nextSurveyElementId": 102
}
]
}
]
- `nextSurveyElementId` pode ser `null` (fim de fluxo).
### Relacionamentos
- **N:1** com `survey_elements` via `first_survey_element`.
- **1:N** com `users_surveys` (`Survey` → `UsersSurveys`) para vincular usuários aos questionários.
## users_surveys
Tabela de junção que relaciona usuários (`users`) com questionários (`surveys`). Cada registro indica que um usuário está vinculado a um determinado questionário.
| Nome da Coluna | Tipo de Dado | Restrições (Constraints) | Descrição | Valor Exemplo |
|---|---|---|---|---|
| id | integer (auto-increment) | **PRIMARY KEY** | Identificador único da relação. | 45 |
| user_id | integer | **FK** → `users(id)`, **NOT NULL**, **ON DELETE CASCADE** | Referência ao usuário vinculado. | 57 |
| survey_id | integer | **FK** → `surveys(id)`, **NOT NULL**, **ON DELETE CASCADE** | Referência ao questionário vinculado. | 12 |
### Relacionamentos
- **N:1** com `users` (um vínculo pertence a um único usuário).
- **N:1** com `surveys` (um vínculo pertence a um único questionário).
- Forma a relação **N:N** entre `users` e `surveys`, pois um usuário pode estar em vários questionários, e um questionário pode estar vinculado a vários usuários.
## survey_elements
Tabela que representa os elementos de um questionário. Cada elemento pode ser um campo de entrada, uma mensagem ou um conjunto de opções.
| Nome da Coluna | Tipo de Dado | Restrições (Constraints) | Descrição | Valor Exemplo |
|---|---|---|---|---|
| id | integer (auto-increment) | **PRIMARY KEY** | Identificador único do elemento. | 101 |
| description | varchar(500) | **NOT NULL** | Texto descritivo ou enunciado exibido no elemento do questionário. | Qual sua idade? |
| type | enum(`SurveyElementType`) | **NOT NULL** | Tipo do elemento no questionário. Pode ser:<br> - `OPTION`: elemento de opção única<br> - `MULTIPLE_CHOICE`: múltipla escolha<br> - `INPUT`: campo de entrada de texto<br> - `MESSAGE`: mensagem informativa | OPTION |
| tag | varchar(255) | **NOT NULL** | Identificador único (slug/tag) usado para referência lógica no fluxo. | idade_usuario |
### Relacionamentos
- **1:N** com `options` (`SurveyElement` → `Option`), permitindo definir as opções vinculadas ao elemento.
- Pode ser referenciado em `surveys.flow` como parte do fluxo de execução do questionário.
## options
Tabela que representa as opções vinculadas a elementos do tipo escolha em um questionário. Cada opção pertence a um `survey_element`.
| Nome da Coluna | Tipo de Dado | Restrições (Constraints) | Descrição | Valor Exemplo |
|---|---|---|---|---|
| id | integer (auto-increment) | **PRIMARY KEY** | Identificador único da opção. | 301 |
| survey_element_id | integer | **FK** → `survey_elements(id)`, **NOT NULL**, **ON DELETE CASCADE** | Referência ao elemento do questionário ao qual a opção pertence. | 101 |
| description | varchar(255) | **NOT NULL** | Texto exibido como alternativa ao usuário. | 18 a 24 anos |
### Relacionamentos
- **N:1** com `survey_elements` (`Option` → `SurveyElement`), pois cada opção pertence a um elemento.
- Usado em conjunto com o fluxo (`surveys.flow`) para definir a navegação entre elementos.
Clone repository
  • Home
  • arquitetura
  • banco_dados