Часть 16 из 16
Мы начали с разрозненных списков фестиваля, а теперь база умеет связывать площадки, программу, артистов и продажи, собирать отчёты и защищать связанные изменения. Остался шаг, который легко пропустить, пока всё работает: сохранить данные и убедиться, что их можно вернуть.
В заключительной части экспортируем SQL-дамп через phpMyAdmin, импортируем его в отдельную схему и проверим итоговый отчёт. Так мини-проект закончится не кнопкой «Экспорт», а проверенным восстановлением.
Делаем экспорт в phpMyAdmin
Выберите city_festival, нажмите «Экспорт», выберите формат SQL и сохраните файл с датой, например city_festival-2026-10-24.sql. Дамп содержит структуру и данные, так что храните его как копию, не публикуйте настоящие пользовательские данные.
Проверяем восстановление отдельно
Создайте пустую базу city_festival_restore, выберите её и на вкладке «Импорт» загрузите дамп. После завершения выполните SHOW TABLES и несколько SELECT. Это подтверждает, что база восстанавливается, а не только что файл скачался.
Для больших файлов интерфейс может упереться в лимит загрузки; используйте согласованный способ через командную строку.
Итоговый отчёт
SELECT event_name,venue_name,sold_count,revenue,
ROUND(revenue/NULLIF(sold_count,0),2) AS average_ticket
FROM v_event_sales ORDER BY revenue DESC;
NULLIF не допускает деления на ноль. У события без продаж средняя стоимость будет NULL, а не выдуманное значение.
Что теперь умеет проект
- Хранит сущности и связи в отдельных таблицах.
- Выбирает, соединяет и агрегирует данные без двойного счёта.
- Защищает ограничения, объединяет изменения транзакциями.
- Проверяет план, права доступа и резервную копию восстановлением.
Продолжите практику: задайте новый вопрос о фестивале, составьте SELECT шаг за шагом и проверьте пустую таблицу, одинаковую выручку и билет без отметки прохода.
Чем дамп отличается от выгрузки отчёта
CSV обычно переносит строки одной таблицы, но может не содержать ключи, ограничения, индексы и определения представлений. SQL-дамп базы может включать структуру объектов и их данные. Для восстановления проекта важно сохранить оба слоя и учитывать кодировку.
В phpMyAdmin перед экспортом проверьте, что выбрали всю схему, а не только одну таблицу.
Почему копию нужно восстановить
Успешно скачанный файл ещё не доказывает, что его удастся импортировать. Создайте отдельную пустую схему и восстановите туда дамп. Затем проверьте таблицы, число строк и один сложный объект, например v_event_sales. Тестовая база защитит оригинал, если файл содержит команду DROP или таблицы с теми же именами.
Для настоящего сервиса одного ручного экспорта может быть мало: частота копий, хранение вне сервера и допустимая потеря данных зависят от требований проекта. Регулярно выполняйте тест восстановления и ограничивайте доступ к дампам — в них могут оказаться персональные или коммерческие данные.
Итоговое упражнение
Добавьте новое событие на выбранную площадку и два слота выступлений. Внесите несколько продаж с разными суммами и временем, отметьте один билет прошедшим через журнал, затем постройте отчёт: продажи по событиям, накопительная выручка и свободные события без билетов.
Проверьте один запрос через EXPLAIN и экспортируйте схему для восстановления.
Как развивать проект дальше
Перед добавлением новой таблицы сформулируйте, какую сущность она описывает и как связана с остальными. Для нового запроса сначала запишите ожидаемый результат словами, потом составьте SELECT маленькими этапами и проверьте пограничные случаи: пустой результат, одинаковые значения, NULL и дубликат ключа.
Такой подход превращает SQL из набора команд в инструмент анализа данных.
Что должно войти в план восстановления
SQL-дамп — один из способов переноса и резервирования, но не вся стратегия аварийного восстановления. Для сервиса решите, как часто делать копии, где хранить их отдельно от исходного сервера, кто может скачать файл и какой объём потери изменений допустим. Эти требования определяются стоимостью и назначением проекта.
Копия на том же диске не защитит от потери диска.
Перед импортом убедитесь, что выбрана пустая тестовая схема: дамп может создавать или удалять одноимённые объекты. При ошибке импорта прочитайте первую ошибку и проверьте версию, кодировку, права пользователя и лимиты загрузки. Не продолжайте работу с половинчатой копией, пока не выяснили, какие таблицы восстановились.
Проверьте не только таблицы
Восстановите view и запустите итоговый отчёт, проверьте внешние ключи через SHOW CREATE TABLE, а затем выполните запрос по одной известной продаже. Сверьте результат с исходной базой. Именно такая проверка обнаружит пропущенные представления или пустые таблицы, хотя сам файл успешно импортировался.
Курс завершён, но проект можно расширять: добавить категории билетов, возвраты или оплату. Для каждой новой сущности сначала определите её ключ и связи, затем опишите несколько запросов, которые должны работать. Так схема будет отвечать реальным задачам фестиваля, а не расти набором случайных колонок.
Проверка восстановления в четыре шага
- Экспортируйте всю схему в SQL-дамп.
- Создайте отдельную пустую базу для проверки.
- Импортируйте дамп и дождитесь завершения без ошибок.
- Сверьте таблицы, связи, представление и итоговый SELECT.
Только после этого можно считать копию проверенной. Держите файл отдельно от исходной базы и ограничивайте доступ: дамп может содержать все данные проекта.
← Предыдущая статья: EXPLAIN и права MySQL: ускоряем и защищаем базу
0
17