Итоговое задание
Концептуальная модель
ER-диаграмма уровня сущностей + перечень сущностей одной строкой на каждую. При построении можно использовать любую из рассмотренных нами нотаций (IDEF1X, Crow’s foot или Chen).
Инструменты, которые можете использовать: Visual Paradigm, Navicat Data Modeler, draw.io, PlantUML, Visio, Excalidraw, dbdiagram.io.
Логическая модель
Полной атрибутивной (FA) модели и короткий комментарий о нормализации — что 1НФ, 2НФ, 3НФ выполнены, либо где и почему отступаете.
Физическая модель в PostgreSQL
ER-диаграмма из вашей БД (ERD Tool в pgAdmin, View Diagram в DBeaver и т. п.), структурный дамп schema.sql через pg_dump --schema-only, и короткое обоснование: почему выбраны такие типы (только для спорных атрибутов), зачем нужны конкретные индексы.
Требования к схеме:
- Для каждого атрибута используем подходящие типы данных PostgreSQL:
INTEGER,BIGINT,NUMERIC(p,s),TEXT/VARCHAR(n),DATE,TIMESTAMP,BOOLEANи др. - PRIMARY KEY, FOREIGN KEY с выбором
ON DELETEиON UPDATE, NOT NULL, UNIQUE, CHECK на доменных значениях.
Пример:
CHECK (status IN ('новый','в работе','закрыт')),CHECK (amount >= 0).
- Как минимум 2 ручных индекса помимо автоматически создающихся. Хотя бы один индекс — на внешний ключ, активно используемый в
JOIN, и один — под фильтрацию поWHEREили сортировку поORDER BY.
Заполнение тестовыми данными
Сам набор данных включаем в полный дамп dump_full.sql.
Отдельно опишите какие edge-кейсы вы заложили и под какие запросы (клиенты без покупок, отменённые операции, превышения лимитов). В каждой таблице минимум 5-10 строк, в ключевых сущностях типа «заказы», «продажи», «приёмы» — минимум 20–30 строк (к справочникам не относится).
SQL-запросы
Для каждого запроса: SQL-код, скриншот или результат вывода в терминале текстом. Их сохраняем в файле queries.sql.
Также не забываем про транзакции, для каждого свой добавляем в конец того же queries.sql. Плюс небольшое текстовое описание в отчете: при каких условиях эта операция нужна, на каком шаге она может упасть и какие данные стали бы несогласованы между собой.
Как сформировать SQL-дамп
Дамп — это самостоятельный текстовый файл с инструкциями CREATE TABLE и INSERT, из которого можно полностью восстановить БД на другой машине. Делается утилитой pg_dump.
# Структурный дамп (без данных)
pg_dump -U <user> -h localhost -d <db_name> \
--schema-only --no-owner --no-privileges \
--encoding=UTF8 \
-f schema.sql
# Полный дамп (структура + данные
pg_dump -U <user> -h localhost -p 5432 -d <db_name> \
-F p --encoding=UTF8 \
--no-owner --no-privileges \
--inserts \
-f dump_full.sqlЧто значат флаги:
--schema-only— выгружает толькоCREATE TABLE,CREATE INDEXи прочие DDL, безINSERT.-F p— формат plain text.--no-owner --no-privileges— не привязываться к именам пользователей вашей машины.--inserts— сохранять данные какINSERT INTO ... VALUES (...), а не черезCOPY.
Перед загрузкой на всякий случай проверьте дамп и разверните его на пустой БД:
createdb -U <user> -h localhost test_restore psql -U <user> -h localhost -d test_restore -f dump_full.sql psql -U <user> -h localhost -d test_restore -c "\dt" -- таблицы на месте? psql -U <user> -h localhost -d test_restore -c "SELECT COUNT(*) FROM <ключевая_таблица>;"
Если в схеме используются расширения (
uuid-ossp,pgcrypto), убедитесь, что в начале дампа стоитCREATE EXTENSION IF NOT EXISTS .... Русские имена объектов без кавычек могут не пережить переноса.
Варианты заданий
Описания задают только задают общее направление предметной области, если у вас будут собственные дополнения, которые сделают модель осмысленнее - дерзайте.
Вариант 1. Сеть автосервисов
Сеть автосервисов принимает на ремонт автомобили клиентов. У каждого клиента может быть несколько автомобилей (марка, модель, год выпуска, VIN, государственный номер). При обращении в сервис оформляется заказ-наряд: фиксируется дата приёмки, ответственный мастер, перечень требуемых работ из прайс-листа (диагностика, замена масла, замена тормозных колодок, ремонт двигателя и т. д.) и список израсходованных запчастей со склада с указанием количества и цены. В сервисе работают мастера разной специализации (моторист, электрик, кузовщик) и квалификации. За каждую выполненную работу мастеру начисляется процент от её стоимости, и этот процент зависит от категории мастера. После выполнения всех работ заказ-наряд закрывается, фиксируется итоговая сумма и способ оплаты (наличные, карта, безналичный расчёт). Сеть состоит из нескольких филиалов, у каждого свой адрес, телефон и руководитель. Запчасти закреплены за конкретными складами.
Список запросов:
- Все работы, выполненные конкретным мастером за указанный месяц, с суммой его заработка и количеством закрытых заказов.
- Топ-10 запчастей по расходу за квартал (количество и сумма).
- Средний чек по филиалам за год и динамика по месяцам.
- Клиенты, обслуживающие в сети более одного автомобиля.
- Автомобили, побывавшие в сервисе более 3 раз за последние 12 месяцев, с историей дат и сумм.
Закрытие заказ-наряда: добавить выполненные работы, списать израсходованные запчасти со склада, рассчитать итоговую сумму, перевести заказ в статус «закрыт».
Вариант 2. Стоматологическая клиника
Сеть стоматологических клиник ведёт учёт пациентов и оказанных им услуг. Пациент записывается на приём к врачу определённой специализации (терапевт, ортопед, хирург, ортодонт) на конкретную дату и время в один из кабинетов клиники. На приёме врач проводит осмотр, ставит диагноз (общий или с привязкой к конкретному зубу по стоматологической формуле) и оказывает услуги из прайс-листа (рентген, лечение кариеса, удаление, установка пломбы определённого материала, протезирование). Услуги имеют стоимость, которая может различаться по клиникам сети. Пациент оплачивает приём наличными, картой или через страховую компанию, если у пациента есть действующий полис ДМС. На каждого пациента ведётся медицинская карта с историей посещений и аллергиями.
Список запросов:
- Все услуги, оказанные конкретному пациенту за выбранный период, с указанием врачей, дат и итоговой суммы.
- Загрузка кабинетов клиники по дням недели за прошедший месяц.
- Выручка каждого врача за месяц с разбивкой по типам услуг.
- Пациенты, которым более 2 раз лечили один и тот же зуб (с историей дат и диагнозов).
- Доля услуг, оплаченных через страховую компанию, по типам услуг.
Завершение приёма: добавить оказанные услуги в карту пациента с привязкой к зубам и диагнозам, рассчитать итоговую сумму, отметить приём как завершённый, провести оплату.
Вариант 3. Сеть книжных магазинов
Сеть книжных магазинов продаёт книги покупателям. Каждая книга имеет название, ISBN, год издания, цену, относится к одному или нескольким жанрам и написана одним или несколькими авторами. Книги выпускают издательства. Магазины принимают поступления от поставщиков (накладная содержит несколько позиций: книга, количество, закупочная цена) и продают книги покупателям (чек также содержит несколько позиций). Зарегистрированные покупатели имеют дисконтные карты с накопленной суммой покупок и текущим уровнем скидки. У каждого магазина свой адрес, руководитель и штат продавцов. За каждой продажей закреплён продавец.
Список запросов:
- Топ-5 авторов по выручке за квартал (учитывать соавторство).
- Остатки книг на складе каждого магазина (поступление за вычетом продаж), с выделением закончившихся позиций.
- Покупатели, потратившие более заданной суммы за период.
- Книги, ни разу не продававшиеся за последние полгода (потенциальные кандидаты на возврат поставщику).
- Средний размер чека и среднее число позиций в чеке по магазинам.
Оформление продажи: создать чек, добавить позиции (книги и количество), уменьшить остатки книг на складе магазина, обновить накопленную сумму на дисконтной карте покупателя.
Вариант 4. Городская библиотека
Городская библиотека ведёт фонд книг и обслуживает читателей. Каждое издание (название, авторы, издательство, год, ISBN, жанр) представлено в фонде одним или несколькими экземплярами, у каждого экземпляра свой инвентарный номер и состояние (новый, потёртый, требует ремонта, списан). Читатель оформляет читательский билет и может одновременно держать на руках ограниченное число книг. Библиотекарь фиксирует выдачу конкретного экземпляра с датой выдачи и плановой датой возврата, а затем — фактическую дату возврата. Если читатель не возвращает книгу в срок, начисляется пеня (сумма зависит от количества дней просрочки). Библиотека состоит из нескольких отделов (абонемент, читальный зал, детский отдел), у каждого свой штат библиотекарей и свои правила.
Список запросов:
- Список читателей, у которых на руках просроченные книги, с указанием суммы накопленной пени.
- Топ-10 самых востребованных изданий за год по числу выдач.
- Читатели, которые ничего не брали более полугода.
- Сколько раз каждый экземпляр выдавался за всё время существования.
- Сумма начисленных пеней по отделам за месяц.
Выдача экземпляра читателю: создать запись в журнале выдач с плановой датой возврата, пометить экземпляр как занятый, проверить, что у читателя число книг на руках не превысит установленный лимит.
Вариант 5. Сеть кинотеатров
Сеть кинотеатров продаёт билеты на сеансы. У каждого фильма есть название, режиссёр, длительность, возрастной рейтинг и жанр. В кинотеатре несколько залов с разной вместимостью. Сеанс — это показ конкретного фильма в конкретном зале в конкретное время с фиксированной ценой билета. Билет продаётся на конкретное место (ряд, место) конкретного сеанса. Билеты продаются в кассе либо онлайн. У каждого кинотеатра свой адрес и руководитель.
Список запросов:
- Топ-фильмов по выручке за прошедший месяц.
- Средняя заполняемость зала по дням недели за квартал.
- Сеансы, на которых заполняемость составила менее 20%.
- Зрители, купившие более 5 билетов за квартал.
- Соотношение долей онлайн-продаж и кассовых продаж по кинотеатрам.
Покупка билета: создать запись о продаже, пометить выбранное место конкретного сеанса как купленное.
Вариант 6. Фитнес-центр
Сеть фитнес-центров продаёт абонементы и оказывает услуги. Клиент покупает абонемент определённого типа (на месяц, полгода или год, с доступом в зал, на групповые или на индивидуальные тренировки) с конкретной датой начала и окончания. В центре работают тренеры разной специализации (силовые тренировки, йога, единоборства, плавание) и проводят групповые занятия по расписанию в конкретных залах. Каждое посещение клиента фиксируется проходом через турникет (дата, время). Тренеры также проводят персональные тренировки по предварительной записи, у этих тренировок отдельный прайс. Центр предлагает дополнительные услуги (массаж, бассейн, солярий), оплачиваемые отдельно от абонемента.
Список запросов:
- Посещаемость по дням недели и часам суток за месяц.
- Топ-тренеров по числу проведённых занятий и собранной выручке за месяц.
- Клиенты, чьи абонементы истекают в ближайшие 7 дней.
- Клиенты, ни разу не посетившие центр после покупки абонемента.
- Выручка по типам услуг (абонементы, персональные тренировки, дополнительные) за квартал.
Запись клиента на персональную тренировку: забронировать слот тренера на конкретное время в выбранном зале, создать запись о тренировке, списать стоимость с действующего абонемента или принять отдельную оплату.
Вариант 7. Гостиница
Гостиничная сеть имеет несколько корпусов с номерами разного типа (одноместный, двухместный, люкс, семейный). У каждого номера фиксируется тип, этаж, стоимость за сутки и набор удобств (балкон, мини-бар, наличие кухни и т. п.). Гость может заранее забронировать номер на определённые даты или заселиться без брони. При заселении оформляется проживание: дата заезда, дата выезда, номер, основной гость и сопровождающие, способ оплаты. В стоимость проживания может быть включён завтрак. Гость дополнительно заказывает услуги (прачечная, room service, дополнительная кровать, парковка), каждая такая услуга фиксируется отдельно. За номерами закреплены горничные, по сменам работают администраторы.
Список запросов:
- Загрузка номеров по дням за выбранный период (сколько номеров занято, сколько свободно).
- Выручка по типам номеров за месяц.
- Топ-постояльцев по числу проведённых ночей за год.
- Список гостей, проживающих в гостинице на текущую дату, и в каких номерах.
- Список дополнительных услуг, заказанных конкретным гостем во время проживания, с итоговой суммой.
Заселение гостя: проверить, что номер свободен на нужные даты, создать запись о проживании, добавить сопровождающих гостей, провести предоплату.
Вариант 8. Туристическое агентство
Турагентство продаёт туры клиентам. Тур включает направление (страна, город), отель и длительность. У каждого тура фиксированная цена и общее число доступных мест. Клиент бронирует тур на одного или нескольких туристов и вносит оплату. Туры продают менеджеры агентства, получая комиссию (процент зависит от категории менеджера). Агентство имеет несколько офисов, у каждого свой штат.
Список запросов:
- Список туров, проданных конкретным менеджером за месяц, с суммами комиссии.
- Топ-направлений (страна, город) по числу проданных туров за сезон.
- Клиенты, оформившие более одного тура за год.
- Туры, на которые не было ни одной продажи.
- Средняя стоимость тура по странам.
Бронирование тура: занять места в туре на N туристов, добавить туристов в бронирование, принять оплату, начислить комиссию менеджеру.
Вариант 9. Сервис доставки еды
Сервис доставки еды объединяет рестораны-партнёров и доставляет заказы клиентам. У каждого ресторана своё меню (блюдо, категория, цена). Клиент оформляет заказ на одно или несколько блюд из одного ресторана, указывает адрес доставки и способ оплаты. У заказа есть статус (создан, в пути, доставлен, отменён), фиксируется момент создания и момент завершения. Заказ выполняет один из курьеров. Курьер имеет статус (свободен, занят). После доставки клиент оставляет общую оценку заказу.
Список запросов:
- Топ-блюд по продажам (количество и сумма) за прошедшую неделю.
- Среднее время доставки от создания заказа до доставки по дням недели.
- Курьеры с самой высокой и самой низкой средней оценкой за месяц (минимум 10 доставок).
- Рестораны с долей отменённых заказов выше 5%.
- Общая выручка по ресторанам за период с разбивкой по неделям.
Создание заказа: добавить выбранные блюда в заказ, рассчитать итоговую сумму, провести оплату, поставить заказ в статус «создан».
Вариант 10. Музыкальная школа
Музыкальная школа обучает учеников игре на инструментах. Каждый ученик записан на один или несколько курсов (фортепиано, гитара, скрипка, вокал, теория музыки). У каждого курса есть преподаватель и расписание занятий (день недели, время, кабинет). За каждое занятие преподаватель отмечает посещаемость учеников. За обучение взимается ежемесячная плата, которая может включать как групповые, так и индивидуальные занятия. Школа регулярно проводит концерты, в которых участвуют ученики с конкретными произведениями. У преподавателей разная квалификация и стаж, ставка зависит от категории.
Список запросов:
- Список учеников конкретного преподавателя с числом посещений и пропусков за месяц.
- Ученики, у которых посещаемость за семестр ниже 60%.
- Расписание занятий в конкретном кабинете на неделю.
- Список участников конкретного концерта с указанием произведений и преподавателей.
- Сумма ежемесячных оплат по курсам за выбранный месяц.
Зачисление ученика: создать запись об ученике, записать его на один или несколько курсов с привязкой к расписанию, провести оплату за первый месяц.
Вариант 11. Аптечная сеть
Сеть аптек продаёт лекарственные препараты. У каждого препарата есть название, производитель, форма выпуска, флаг «отпуск по рецепту». Препараты поступают в аптеки от поставщиков (фиксируется дата поставки, количество и срок годности этой поставки). Аптеки продают препараты клиентам (чек содержит несколько позиций). Рецептурные препараты требуют предъявления рецепта (номер, врач). У зарегистрированных клиентов есть карта со скидкой. В каждой аптеке свой штат фармацевтов.
Список запросов:
- Препараты, у которых срок годности истекает в ближайшие 30 дней (с указанием аптеки).
- Топ-производителей по выручке за квартал.
- Продажи рецептурных препаратов за месяц с указанием выписавшего врача.
- Препараты, отсутствующие на складе конкретной аптеки.
- Средний чек и доля продаж рецептурных препаратов по аптекам сети.
Продажа препаратов: создать чек, добавить позиции, уменьшить остатки соответствующих поставок, применить скидку клиента.
Вариант 12. Автошкола
Автошкола обучает курсантов вождению. Курсант оформляет договор и зачисляется в учебную группу определённой категории (B, C). За группой закреплён инструктор. Курсант проходит занятия по вождению с инструктором на конкретном учебном автомобиле. Каждое занятие имеет дату, длительность и пройденный километраж. По итогам обучения курсант сдаёт внутренний экзамен с отметкой «сдал/не сдал». Оплата за обучение разбита на этапы (договор, теория, практика, экзамен). Автошкола имеет несколько филиалов с автопарком.
Список запросов:
- Список занятий, проведённых конкретным инструктором за месяц, с пройденными километрами.
- Курсанты, не сдавшие внутренний экзамен.
- Загрузка учебных автомобилей по дням за неделю.
- Группы и их успеваемость на экзамене (процент сдавших).
- Сумма оплат по этапам обучения для конкретного курсанта.
Зачисление курсанта: создать запись о курсанте по договору, зачислить его в учебную группу, провести первый платёж по этапу «договор».
Вариант 13. Ветеринарная клиника
Сеть ветеринарных клиник принимает домашних животных на приёмы. У каждого владельца может быть несколько питомцев (кличка, вид, порода, дата рождения, пол, наличие чипа). На приём питомца записывают к конкретному врачу определённой специализации (терапевт, хирург, дерматолог, стоматолог). На приёме врач фиксирует вес и анамнез, ставит диагнозы, назначает процедуры и медикаменты из прайс-листа. Питомец может проходить курс лечения с несколькими посещениями подряд. Клиника также продаёт корм и сопутствующие товары, ведёт прививочные карты (тип прививки, дата, срок действия).
Список запросов:
- История посещений конкретного питомца с диагнозами и врачами.
- Топ-пород среди пациентов клиники с количеством приёмов.
- Список врачей и число принятых ими пациентов за месяц.
- Животные, которым по прививочному календарю нужна прививка в ближайший месяц.
- Выручка клиники по типам услуг (приёмы, процедуры, прививки, товары) за период.
Завершение приёма питомца: добавить диагнозы и назначения, списать использованные медикаменты со склада клиники, рассчитать сумму приёма, провести оплату владельцем.
Вариант 14. Сервис проката электросамокатов
Сервис проката электросамокатов имеет парк самокатов, размещённых по парковочным зонам разных районов города. У каждого самоката есть номер, модель, заряд батареи, текущий статус (свободен, в аренде, на обслуживании, утерян). Клиент через приложение арендует самокат: фиксируется дата и время начала, а также парковочная зона начала. После окончания поездки фиксируются дата и время завершения, зона завершения, пройденное расстояние и стоимость по выбранному тарифу. Тарифы могут быть поминутные, безлимитные на сутки, ночные. Самокаты периодически обслуживаются сервисными бригадами (зарядка батареи, ремонт, перемещение между зонами). Каждое обслуживание фиксируется.
Список запросов:
- Самые популярные парковочные зоны по числу начал поездки за неделю.
- Среднее время и средняя стоимость поездки по тарифам.
- Самокаты, заряд которых ниже 20% и которые не находятся на обслуживании.
- Топ-клиентов по сумме оплат за месяц с числом поездок.
- Самокаты, чаще всего попадающие на ремонт (топ-10 по числу обслуживаний за квартал).
Начало поездки: проверить, что самокат свободен и не на обслуживании, изменить его статус на «в аренде», создать запись о поездке с временем и зоной начала, заблокировать сумму депозита на счёте клиента.
Вариант 15. Издательство
Издательство выпускает книги в сотрудничестве с авторами. С каждым автором по конкретной книге заключается договор (аванс, процент роялти, плановый и фактический срок сдачи рукописи). За каждой книгой закреплён редактор. Готовая книга печатается в одной из типографий заданным тиражом (фиксируется дата готовности и стоимость печати на экземпляр). Тираж приходует на склад издательства, а оттуда продаётся оптовым покупателям. По итогам продаж авторам начисляется роялти.
Список запросов:
- Остатки тиража на складе по конкретной книге.
- Сумма роялти, начисленных автору, за выбранный период.
- Книги, у которых сорваны сроки сдачи рукописи (план и факт).
- Топ-редакторов по числу выпущенных книг за год.
- Объёмы тиражей по типографиям с указанием средней стоимости печати на экземпляр.
Заказ тиража: создать тираж с привязкой к типографии и книге, оприходовать его на склад при поступлении, обновить статус книги на «в печати».
Вариант 16. Агентство недвижимости
Агентство недвижимости работает с объектами (квартиры, дома, коммерческая недвижимость), которые продаёт или сдаёт в аренду. Каждый объект имеет адрес, площадь, число комнат, этаж, ценовую категорию и владельца. Объект попадает в базу на основании договора с владельцем. Клиенты обращаются в агентство с запросами на покупку или аренду. За каждым клиентом закрепляется агент. Агент организует просмотры объектов (дата, время, клиент, объект, результат — заинтересовал, не заинтересовал, предложил цену). Если клиент решает приобрести или арендовать объект, оформляется сделка с указанием суммы, и агент получает комиссию по проценту. У агентства несколько офисов, агенты в офисах могут иметь разную специализацию.
Список запросов:
- Объекты, по которым за последний месяц не было ни одного просмотра.
- Топ-агентов по числу сделок и сумме комиссий за квартал.
- Клиенты, у которых было более 5 просмотров без оформления сделки.
- Среднее число просмотров до сделки по типам объектов.
- Выручка (по комиссиям агентства) по офисам за выбранный период.
Оформление сделки: создать запись о сделке между клиентом и владельцем объекта с указанием суммы, изменить статус объекта на «продан» или «арендован», начислить агенту комиссию по проценту.
Вариант 17. Таксопарк
Таксопарк обслуживает заказы пассажиров. В парке состоят автомобили разных классов (эконом, комфорт, бизнес, минивэн) с госномером, маркой, моделью и годом выпуска. За автомобилями закреплены водители, у каждого водителя свой стаж, категория и рейтинг. Клиент оформляет заказ поездки: фиксируются адрес подачи, адрес назначения, дата и время заказа, выбранный класс и тариф. Стоимость поездки рассчитывается по тарифу (базовая подача плюс цена за километр и за минуту). У заказа есть статус (создан, принят, выполняется, завершён, отменён). После завершения поездки фиксируются фактическое расстояние, длительность, итоговая сумма и способ оплаты (наличные, карта, бонусами). Пассажир может выставить водителю оценку. Парк состоит из нескольких смен, у каждой смены свой диспетчер.
Список запросов:
- Топ-водителей по числу выполненных заказов и сумме выручки за месяц.
- Доля отменённых заказов по классам автомобилей за квартал.
- Средняя стоимость и среднее расстояние поездки по дням недели и часам суток.
- Водители со средней оценкой ниже 4.5 за месяц (минимум 10 поездок).
- Постоянные клиенты, совершившие более 10 поездок за месяц, с суммарной потраченной суммой.
Завершение поездки: зафиксировать фактическое расстояние и длительность, рассчитать итоговую сумму по тарифу, перевести заказ в статус «завершён», провести оплату и обновить рейтинг водителя.
Вариант 18. Банковское отделение
Сеть банковских отделений обслуживает клиентов по вкладам и кредитам. Каждый клиент имеет паспортные данные и может открыть несколько счетов разных типов (текущий, накопительный, кредитный) с указанием валюты и остатка. Клиент оформляет вклад на определённый срок под фиксированную ставку либо берёт кредит с графиком платежей (сумма, срок, процентная ставка, ежемесячный платёж). По счетам проходят операции (пополнение, снятие, перевод между счетами, начисление процентов) с указанием суммы, даты и типа. За клиентами закреплены персональные менеджеры. У каждого отделения свой адрес, руководитель и штат сотрудников.
Список запросов:
- Список клиентов с действующими кредитами и суммой остатка задолженности.
- Топ-отделений по сумме привлечённых вкладов за квартал.
- Клиенты, допустившие просрочку по графику платежей кредита, с числом дней просрочки.
- Оборот по операциям (пополнения и снятия) по типам счетов за месяц.
- Клиенты, у которых нет ни одного действующего вклада или кредита (потенциальные для предложения продуктов).
Перевод между счетами: проверить достаточность средств на счёте-отправителе, списать сумму с одного счёта, зачислить на другой, создать две записи об операциях в рамках одной транзакции.
Вариант 19. Сеть ресторанов
Сеть ресторанов обслуживает гостей по предварительному бронированию и на месте. В каждом ресторане несколько столиков разной вместимости, у столика указана зона (основной зал, веранда, VIP). Гость бронирует столик на конкретную дату, время и число персон. По столику открывается счёт, в него добавляются блюда и напитки из меню (блюдо, категория, цена). Меню может различаться по ресторанам сети. После трапезы счёт закрывается, фиксируется итоговая сумма, чаевые и способ оплаты. У каждого ресторана свой адрес и руководитель.
Список запросов:
- Загрузка столиков по дням недели и часам за прошедший месяц (число бронирований).
- Топ-10 блюд по продажам (количество и сумма) за квартал.
- Выручка и средний чек по ресторанам сети за месяц.
- Гости, сделавшие более одной брони за период, с суммой по их счетам.
- Брони, на которые гости не пришли (no-show), по ресторанам за период.
Закрытие счёта: добавить заказанные блюда в счёт, рассчитать итоговую сумму и чаевые, освободить столик, провести оплату.
Вариант 20. Транспортная компания
Транспортно-логистическая компания осуществляет грузоперевозки между городами. Клиент оформляет заявку на перевозку груза: указываются город отправления и назначения, характеристики груза (наименование, вес, объём, тип упаковки), желаемая дата отправки. Под заявку формируется рейс с привязкой к транспортному средству (грузовик, фура, рефрижератор) и водителю. У каждого транспортного средства своя грузоподъёмность и расход топлива. Рейс имеет статус (запланирован, в пути, доставлен, задержан) с фиксацией плановой и фактической даты прибытия. Стоимость перевозки рассчитывается по расстоянию и весу груза. Компания имеет несколько логистических терминалов в разных городах, у каждого свой штат.
Список запросов:
- Список рейсов, доставленных с опозданием, с числом дней задержки за месяц.
- Топ-направлений (город отправления — город назначения) по объёму перевезённого груза за квартал.
- Загрузка транспортных средств (число рейсов и суммарный вес) за период.
- Клиенты, оформившие более 5 заявок за год, с суммарной стоимостью перевозок.
- Средняя стоимость и среднее расстояние перевозки по типам транспортных средств.
Оформление рейса: проверить, что транспортное средство свободно и его грузоподъёмности достаточно для груза, создать рейс с привязкой к водителю и заявке, изменить статус заявки на «в работе», рассчитать стоимость перевозки.