Храните информацию о задаче в базе данных

#database #database-design #language-agnostic

Вопрос:

Допустим, у меня есть база данных, в которой я храню задачи пользователей.

Для упрощения предположим, что задача имеет:

  • ID
  • статус (Новый, Предстоит сделать, В процессе, Сделано, Отклонено)
  • Описание
  • владелец/создатель

Теперь я хочу добиться того, чтобы, когда пользователь завершает задачу — делает ее выполненной или отклоненной, я хочу, чтобы пользователь предоставил некоторую информацию об изменении этого состояния. Я представляю всплывающее окно с двумя полями: одно для выбора из статусов «Сделано» / «Отклонено» и область текстового поля для заполнения причины, если хотите.

Проблема, с которой я столкнулся здесь, заключается в следующем: как я могу хранить информацию о завершении задачи?

Моя идея состоит в том, чтобы создать таблицу, подобную task_completions той, которая будет иметь:

  • ID
  • идентификатор задачи
  • комментарий (varchar или что-то еще)

Теперь дело в следующем: когда я загружаю задачу для пользователя из базы данных и вижу, что она завершена (опять же, выполнена или отклонена) Мне нужно загрузить информацию о завершении задачи. Таким образом, это приведет к двум вызовам API:

  • получить задание
  • получить task_completion, где task_completion.task_id == task_id

Конечно, есть и другой способ — я могу добавить поле task_completion в свою task таблицу. И, конечно, сделайте его недействительным, так как он не будет заполнен ничем, пока задача не будет завершена. И тогда мне не придется принять две вызовов API, так как при использовании что-то вроде Django сериализаторы (или что-то вроде этого), у меня будет возможность «расширить» task_completion поле от простой номер (идентификатор task_completion ) колонки для полного вложенный JSON с информацией о завершении (идентификатор, task_id, комментарий) — Мне просто нужно позвонить get task . И тогда мне даже не нужно указывать task_id поле в task_completion таблице.

Итак, подводя итог, я думаю, что у меня есть 3 варианта:

  • task и task_completion таблицы, где task_completion таблица содержит task_id столбец — два вызова API
  • task и task_completion таблицы, где task таблица содержит task_completion_id столбец — один вызов API, если я все сделаю правильно
  • task и task_completion таблицы, где task таблица содержит task_completion_id столбец, а task_completion таблица содержит task_id столбец — я думаю, все еще один вызов API, — но имеет ли смысл иметь оба этих столбца в этих таблицах?

Комментарии:

1. Разве вы не можете просто поместить comment в свою task таблицу столбец, допускающий обнуление?

2. Я могу, но если бы я хотел расширить этот комментарий, скажем, чтобы он содержал человека, который закрыл задачу, или что-то еще, это создало бы беспорядок в task таблице

3. Справедливое замечание. Может ли задача быть открыта повторно или для каждой задачи может быть выполнено только одно завершение?

4. Я как бы подражаю поведению Джиры, так что задача потенциально может быть возобновлена

5. Первый выбор ( task_completion таблица с task_id task таблицей ссылок на столбцы) более правильный, так как для каждого из них может быть более одного завершения task . Но я предлагаю вместо этого какую task_status_history -нибудь таблицу, так как вам, вероятно, понадобится история изменений. Я действительно не знаю django, поэтому не могу комментировать количество вызовов api, но, если это не очень дорого, не имеет значения, один или два.