Sobes.tech
Middle

Projete um modelo de dados físico para o sistema de gestão de tarefas. Destaque todas as tabelas físicas indicando as chaves primárias (PK) e as chaves estrangeiras (FK). O modelo deve cobrir todos os casos de uso que você identificou anteriormente.

sobes.tech IA

Resposta da IA

Para o sistema de gestão de tarefas, podem destacar-se as seguintes tabelas principais:

  1. Utilizadores — utilizadores do sistema
  • PK: user_id
  • Campos: username, email, password_hash, created_at
  1. Tarefas — tarefas
  • PK: task_id
  • FK: assigned_to (user_id de Utilizadores) — utilizador a quem a tarefa está atribuída
  • FK: created_by (user_id de Utilizadores) — utilizador que criou a tarefa
  • Campos: title, description, status, priority, due_date, created_at, updated_at
  1. Projetos — projetos que agrupam tarefas
  • PK: project_id
  • FK: owner_id (user_id de Utilizadores) — proprietário do projeto
  • Campos: name, description, created_at
  1. Comentários_Tarefa — comentários às tarefas
  • PK: comment_id
  • FK: task_id (de Tarefas)
  • FK: author_id (user_id de Utilizadores)
  • Campos: content, created_at
  1. Histórico_Tarefa — histórico de alterações nas tarefas
  • PK: history_id
  • FK: task_id (de Tarefas)
  • FK: changed_by (user_id de Utilizadores)
  • Campos: change_type, old_value, new_value, changed_at
  1. Membros_Projeto — membros do projeto
  • PK: (project_id, user_id)
  • FK: project_id (de Projetos)
  • FK: user_id (de Utilizadores)
  • Campos: role

Este modelo cobre os principais casos de uso:

  • Criação e atribuição de tarefas
  • Gestão de projetos e membros
  • Comentários em tarefas
  • Acompanhamento do histórico de alterações

Exemplo de definição da tabela Tarefas:

CREATE TABLE Tasks (
    task_id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    status VARCHAR(50) NOT NULL,
    priority INT,
    due_date DATE,
    assigned_to INT REFERENCES Users(user_id),
    created_by INT REFERENCES Users(user_id),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP
);