Урок 2 · Проектирование данных и сценария

02

Модуль 1 · Занятие 1

Проектирование данных и сценария

Переводим идею MVP в модель данных и сценарий работы пользователя

Выбор кейса

Учебные кейсы по сложности

КейсСущностиСложность
Заявка / обратная связьзаявка★
Запись на услугу (сквозной)клиент, услуга, заявка, статус★★
Регистрация на мероприятиеучастник, мероприятие, регистрация★★
Мини-каталог с заказомтовар, заказ, позиция заказа★★★
Личный кабинетпользователь, профиль, сессия + авторизация ★★★★ — за рамками

Назначение MVP в одну фразу

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

Шаблон

[кто] может [что сделать], чтобы [результат], а [кто] видит [что].

Пользовательский сценарий

Какие данные появляются на каждом шаге?

01

Заходит на страницу

02

Смотрит услуги

→ услуга

03

Заполняет форму

→ имя, email, телефон, дата

04

Отправляет

→ согласие

05

Прослойка проверяет и сохраняет

→ статус new, created_at

06

Видит «Заявка принята»

07

Администратор меняет статус

08

Клиент получает услугу

→ done

От сценария к сущностям

Выписываем существительные

В сценарииСущностьПоля
посетительclientsid, name, email, phone, created_at
услугаservicesid, code, title, price, is_active
заявкаrequests id, client_id, service_id, preferred_date, status, created_at
статус— поле, не сущностьnew · confirmed · done · cancelled

ER-диаграмма

Внешний ключ — на стороне «много»

clients

  • id PK
  • email UNIQUE
  • name
  • phone
  • created_at

requests

  • id PK
  • client_id FK
  • service_id FK
  • preferred_date
  • status
  • tilda_tranid UNIQUE
  • created_at

services

  • id PK
  • code UNIQUE
  • title
  • price
  • is_active

Разбор ошибок

Пять ошибок в модели данных

ОшибкаГде ломаетсяКак правильно
Одна таблица на всё Клиент записывается заново при каждой заявке, его имя и телефон расходятся по опечаткам clients, services и requests по отдельности
Статус отдельной таблицей Лишняя связь ради четырёх значений, которые никогда не меняются Поле с ограниченным списком значений
Внешний ключ на стороне «один» Список заявок внутри клиента ломается на второй же заявке client_id и service_id — в таблице requests
Нет id и created_at Не на что сослаться и нечем отсортировать: непонятно, какая заявка раньше id и created_at есть у каждой сущности
Поля кириллицей и с пробелами «Желаемая дата» не совпадёт с именем переменной в форме Tilda на уроке 4 Латиница, нижний регистр, snake_case

JSON-структура

Форма шлёт плоско, прослойка раскладывает

Отправляет форма — плоско

{ "name": "Анна", "email": "anna@example.com", "phone": "+79123456789", "service": "Консультация", "date": "05.10.2026", "consent": "yes" }

Ложится в БД — по таблицам

{ "client": { "email": "anna@example.com", "name": "Анна" }, "request": { "service_id": 1, "preferred_date": "2026-10-05", "status": "new" } }

Имена полей — латиница, snake_case. Они станут именами переменных в форме Tilda на уроке 4.

Мини-артефакт урока 2

Схема MVP и модель данных: назначение, роли, сценарий, ER-диаграмма и пример JSON

Вопросы для самопроверки

01

Как по сценарию понять, что нужна отдельная сущность?

02

На какой стороне связи 1:N находится внешний ключ?

03

Почему статус лучше хранить как ограниченный список?

Made on
Tilda