Skip to content

Latest commit

 

History

History
70 lines (51 loc) · 3.67 KB

database.md

File metadata and controls

70 lines (51 loc) · 3.67 KB

База данных

Почему ровно 7 таблиц

Схема опирается на вашу курсовую по БД и сохраняет ровно 7 связанных таблиц:

  1. families
  2. participants
  3. executors
  4. categories
  5. tasks
  6. assignments
  7. task_executions

Этого достаточно, чтобы покрыть MVP:

  • семейную группу и роли;
  • общий календарь;
  • задачи и покупки;
  • назначение ответственных;
  • журнал выполнения.

Логика домена

tasks выступает как единая таблица планировщика. Поле item_type разделяет записи на:

  • TASK — бытовые и личные задачи;
  • EVENT — элементы совместного расписания;
  • SHOPPING — пункты общих списков покупок.

Такой подход позволяет удержать схему в требуемых 7 таблицах, не ломая нормализацию и не дублируя логику для трёх почти одинаковых сущностей.

Связи

  • Одна family имеет много participants, executors, categories, tasks.
  • Один participant может быть создателем многих tasks.
  • Один participant может быть связан с одной записью executor, если он является внутренним исполнителем.
  • Одна category классифицирует много tasks.
  • Связь many-to-many между tasks и executors реализована таблицей assignments.
  • История фактического выполнения хранится в task_executions.

3 нормальная форма

Схема приведена к 3НФ:

  • В каждой таблице хранится одна сущность или одна ассоциативная связь.
  • Невключённые в ключ атрибуты зависят только от ключа таблицы.
  • Транзитивные зависимости вынесены в отдельные таблицы:
    • данные семьи вынесены в families;
    • данные участника — в participants;
    • классификация — в categories;
    • исполнители как отдельная сущность — в executors;
    • связи назначения — в assignments;
    • факты выполнения — в task_executions.

Как схема закрывает требования

  • Общий календарь: tasks.item_type = 'EVENT', плюс scheduled_start_at, due_at, location.
  • Списки покупок: tasks.item_type = 'SHOPPING', плюс list_name.
  • Бытовые задачи: tasks.item_type = 'TASK'.
  • Назначение ответственных: assignments.
  • Роли родитель/ребёнок: participants.role.
  • Журнал и аналитика выполнения: task_executions.

Практический стек

Prisma используется как единый источник типов и ORM-модель для API, а SQL-файл остаётся артефактом для учебной документации и ручного развёртывания.