Часть 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, а затем выполните запрос по одной известной продаже. Сверьте результат с исходной базой. Именно такая проверка обнаружит пропущенные представления или пустые таблицы, хотя сам файл успешно импортировался.

Курс завершён, но проект можно расширять: добавить категории билетов, возвраты или оплату. Для каждой новой сущности сначала определите её ключ и связи, затем опишите несколько запросов, которые должны работать. Так схема будет отвечать реальным задачам фестиваля, а не расти набором случайных колонок.

Проверка восстановления в четыре шага

  1. Экспортируйте всю схему в SQL-дамп.
  2. Создайте отдельную пустую базу для проверки.
  3. Импортируйте дамп и дождитесь завершения без ошибок.
  4. Сверьте таблицы, связи, представление и итоговый SELECT.

Только после этого можно считать копию проверенной. Держите файл отдельно от исходной базы и ограничивайте доступ: дамп может содержать все данные проекта.

← Предыдущая статья: EXPLAIN и права MySQL: ускоряем и защищаем базу