Схема опирается на вашу курсовую по БД и сохраняет ровно 7 связанных таблиц:
familiesparticipantsexecutorscategoriestasksassignmentstask_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НФ:
- В каждой таблице хранится одна сущность или одна ассоциативная связь.
- Невключённые в ключ атрибуты зависят только от ключа таблицы.
- Транзитивные зависимости вынесены в отдельные таблицы:
- данные семьи вынесены в
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 schema в apps/server/prisma/schema.prisma
- Чистый PostgreSQL DDL: db/sql/schema.sql
Prisma используется как единый источник типов и ORM-модель для API, а SQL-файл остаётся артефактом для учебной документации и ручного развёртывания.