Различите модель товара и физический экземпляр, который можно забронировать.
Зачем
Зачем это нужно
Запишите бизнес-инварианты отдельно от названий таблиц и полей.
Проверьте типичные чтения и две конкурирующие записи до выбора индексов.
Вопросы
Частые вопросы
Как задать предметный пример схемы?
«Есть два учебных штатива одной модели: экземпляры A и B. A занят с 10:00 до 11:00; бронь с 11:00 допустима, с 10:30 — нет. Отменённая бронь не блокирует время». Попросите таблицы и способ обеспечить правило для указанной СУБД. Пример сразу выявляет разницу между товаром, экземпляром и записью истории бронирования оборудования.
Какие вопросы задать до создания таблиц?
Кто владеет записью, какие состояния разрешены, нужна ли история и что происходит при удалении связанного объекта. Затем перечислите главные запросы: свободные экземпляры на интервал, история пользователя, ближайшие возвраты. Без них индексирование будет предположением. Попросите показать, какой запрос обслуживает каждый индекс и какое правило защищает каждое ограничение, чтобы схема не состояла из необъяснимого набора полей.
Почему проверки в приложении может быть мало?
Два запроса способны одновременно увидеть свободный экземпляр и оба записать бронь. Нужно согласовать механизм защиты в базе или транзакционную последовательность. Попросите сценарий двух соединений и ожидаемый конечный результат. Простая проверка существования перед INSERT не устраняет гонку. При этом доступные ограничения и типы различаются: решение для PostgreSQL нельзя автоматически перенести в другую СУБД.
Когда допустимо дублировать данные?
Когда понятны причина и способ поддерживать согласованность. Например, название оборудования на момент выдачи может быть историческим снимком, а не случайной копией текущего справочника. Укажите, должно ли оно меняться при переименовании модели. Модель предложит варианты, но не знает бизнес-смысла поля без вашего условия. Схему проверяют на учебных данных и запросах до миграции реальной базы.
Рядом
Соседние страницы каталога
Дальше — весь каталог задач: поиск по названию, темы и фильтры.