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 PostgreSQL

O projeto WeConecta utiliza o PostgreSQL como sistema gerenciador de banco de dados.

O PostgreSQL é um SGBD relacional robusto, confiável e amplamente utilizado em aplicações que exigem consistência, integridade referencial e transações ACID. Ele oferece recursos avançados como controle de concorrência multiversão (MVCC), extensibilidade com funções e tipos personalizados e excelente performance em ambientes com grande volume de dados.

Modelo Conceitual

A modelagem conceitual foi desenvolvida utilizando a ferramenta brModelo:

weconecta_ER

Modelo Lógico

A modelagem lógica foi criada na ferramenta online dbdiagram.io:

Copy_of_Untitled_Diagram.svg

Estrutura das Tabelas

A seguir estão as tabelas e descrições detalhadas do banco de dados.

users

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

Coluna Tipo Restrições Descrição Exemplo
id uuid PRIMARY KEY, DEFAULT gen_random_uuid() Identificador único do usuário. a6e1b7b2-12ef-4c45-a8f2-78c41d7f3321
email varchar(255) UNIQUE, NOT NULL E-mail de login do usuário. [email protected]
password varchar(255) NOT NULL Hash da senha. $2a$10$...
phone varchar(11) UNIQUE, NULLABLE Telefone (somente dígitos). 51999990000
friendly_name varchar(255) NOT NULL Nome de exibição. João Silva
role enum(UserRole) DEFAULT 'MEMBER' Papel do usuário: ADMIN ou MEMBER. MEMBER
blocked_at timestamp NULLABLE Data/hora de bloqueio do usuário. 2025-09-01 13:45:12
first_login boolean DEFAULT true Indica se é o primeiro acesso. false
created_at timestamp DEFAULT CURRENT_TIMESTAMP Data/hora de criação. 2025-09-01 12:30:00

Relacionamentos:

  • 1:N com users_surveys (User → UsersSurveys).

surveys

Representa os questionários cadastrados no sistema, contendo metadados, fluxo de navegação e status de publicação.

Coluna Tipo Restrições Descrição Exemplo
id integer PRIMARY KEY Identificador único. 12
first_survey_element integer FK → survey_elements(id), NULLABLE, ON DELETE SET NULL Primeiro elemento do fluxo. 101
title varchar(255) NOT NULL Título do questionário. Pesquisa de Satisfação
description varchar(500) NULLABLE Descrição breve. Avalie seu atendimento
url varchar(255) NULLABLE URL pública do questionário. /q/satisfacao-2025
flow jsonb NULLABLE, DEFAULT null Define o fluxo entre os elementos (nós e setas). —
is_published boolean DEFAULT false Indica se está publicado. true
created_at timestamp DEFAULT CURRENT_TIMESTAMP Data de criação. 2025-09-01 12:30:00

Relacionamentos:

  • 1:N com users_surveys (Survey → UsersSurveys).
  • 1:N com survey_answers (Survey → SurveyAnswers).
  • N:1 com survey_elements via first_survey_element.

users_surveys

Tabela intermediária que representa o relacionamento N:N entre usuários e questionários.

Coluna Tipo Restrições Descrição Exemplo
id integer PRIMARY KEY Identificador único da relação. 45
user_id uuid FK → users(id), NOT NULL, ON DELETE CASCADE Usuário vinculado. a6e1b7b2-12ef-4c45-a8f2-78c41d7f3321
survey_id integer FK → surveys(id), NOT NULL, ON DELETE CASCADE Questionário vinculado. 12

Relacionamentos:

  • N:1 com users.
  • N:1 com surveys.
  • Representa users (0..N) ⇄ (0..N) surveys.

survey_elements

Armazena os elementos que compõem os questionários (perguntas, mensagens ou campos de entrada).

Coluna Tipo Restrições Descrição Exemplo
id integer PRIMARY KEY Identificador único do elemento. 101
description varchar(500) NOT NULL Texto ou enunciado exibido. Qual sua idade?
type enum(SurveyElementType) NOT NULL Tipo de elemento: OPTION, MULTIPLE_CHOICE, INPUT, MESSAGE. MULTIPLE_CHOICE
tag varchar(255) NOT NULL Tag de identificação lógica no fluxo. idade_usuario

Relacionamentos:

  • 1:N com options (SurveyElement → Option).
  • 1:N com survey_answers (SurveyElement → SurveyAnswer).
  • Referenciado em surveys.flow.

options

Representa as opções vinculadas a um survey_element (quando o tipo é escolha).

Coluna Tipo Restrições Descrição Exemplo
id integer PRIMARY KEY Identificador único da opção. 301
survey_element_id integer FK → survey_elements(id), NOT NULL, ON DELETE CASCADE Elemento ao qual pertence. 101
description varchar(255) NOT NULL Texto da opção. 18 a 24 anos

Relacionamentos:

  • N:1 com survey_elements.
  • 1:N com survey_answers (Option → SurveyAnswer), pois uma opção pode ser escolhida em várias respostas.

survey_answers

Armazena as respostas dos usuários aos questionários.
Cada linha representa uma resposta individual de um participante.

Coluna Tipo Restrições Descrição Exemplo
identifier varchar(255) NOT NULL Identificador único do respondente (token). resp-9df7a3b1
survey_id integer FK → surveys(id), NOT NULL, ON DELETE CASCADE Questionário ao qual a resposta pertence. 12
survey_element_id integer FK → survey_elements(id), NOT NULL, ON DELETE CASCADE Elemento respondido. 101
option_id integer FK → options(id), NULLABLE, ON DELETE SET NULL Opção marcada (para perguntas de escolha). 301
input_response varchar(500) NULLABLE Resposta textual (para perguntas INPUT). “25 anos”

Relacionamentos:

  • N:1 com surveys.
  • N:1 com survey_elements.
  • 0..1:N com options — uma survey_answer pode ter 0 ou 1 option, e uma option pode estar em 0 ou N answers.
Clone repository
  • Home
  • arquitetura
  • banco_dados