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

Last edited by William De Oliveira Klein Oct 10, 2025
Page history
This is an old version of this page. You can view the most recent version or browse the history.

banco_dados

Banco de Dados Postgres

O projeto WeConecta utiliza o PostgreSQL como sistema gerenciador de banco 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.

Modelo Lógico

A seguinte modelagem foi desenvolvida utilizando a ferramenta online dbdiagram.io:

Untitled

Tabelas

A seguir, têm-se explicações detalhadas sobre as tabelas desenvolvidas para o banco de dados.

users

Tabela que armazena os usuários do sistema (autenticação, perfil e status). Cada registro representa um usuário único da API.

Nome da Coluna Tipo de Dado Restrições (Constraints) Descrição Valor Exemplo
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

Observações e Relacionamentos

  • Relacionamentos: 1:N com users_surveys (User → UsersSurveys), permitindo consultar os questionários vinculados a cada usuário.

surveys

Tabela que representa os questionários do sistema (metadados, status de publicação e fluxo de navegação entre elementos).

Nome da Coluna Tipo de Dado Restrições (Constraints) Descrição Valor Exemplo
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

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:
    [
      {
        "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:
- OPTION: elemento de opção única
- MULTIPLE_CHOICE: múltipla escolha
- INPUT: campo de entrada de texto
- 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