Продолжение вот этого творения.
В настоящей статье мы создадим индексы, заполним таблицы, поработаем с ними и за одно протестируем.
Построение индексов
Структура запроса для создания индексов (объектов базы данных, создаваемый с целью повышения производительности поиска данных):
Заполнение таблиц и работа с ними
Для заполнения таблиц были выбраны функции. Структура создания функции:
Структура вызова функции:
Скрипты функций
Функция createTrain создает в таблицы поездов новый поезд стандартного, скоростного или товарного типа с соответствующим количеством вагонов.
Для вызова этой функции необходимо прописать select createTrain() и в скобках указать нужный тип.
Функция createTrip создает новую поездку в таблицу расписания.
Для вызова этой функции необходимо прописать select createTrip() и в скобках указать номер поезда, дату прибытия и дату отправления со станции.
Функция sellTickets продает билет на рейс. Информация отображается в таблице с билетами.
Для вызова этой функции необходимо прописать select sellTickets() и в скобках указать номер рейса, имя и фамилию пассажира.
Функция shift сдвигает время прибытия и время отправления поезда со станции.
Для вызова функции необходимо прописать select shift() и в скобках указать номер рейса и новое время прибытия и отправления.
Функция timeBarrier добавляет в таблицу данные о ж/д переезде на определенную дату.
Для вызова функции необходимо прописать select timeBarrier() и в скобках указать интересующую дату.
Функция archive анализирует данные в таблицах расписания и билетов, оставляет в них лишь актуальные, остальные же переносит в таблицы архивов.
Для вызова функции необходимо прописать select archive().
Скрипт, который выводит расписание рейсов на 2 недели вперед:
select arrival, departure, idTrain, leftTickets from timeTable where to_days(arrival)>=to_days(now()) and to_days(arrival)<=to_days(now())+14 order by arrival;
Тестирование
Тестирование данных – это процесс исследования программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов, выбранных определенным образом.
Во время создания функций мы убедились, что они работают исправно на корректных данных, поэтому необходимо испытать их на некорректных.
Функция «createTrain» принимает один из трех типов поездов, поэтому при написании какого-то четвертого, мы увидим ошибку, и поезд не будет создан.
select createTrain('testTrain'); - не выолняется
Функция «createTrip» принимает номер поезда, дату прибытия и дату отправления со станции. Рассмотри три тестовых запроса: 1 – укажем несуществующий номер поезда; 2 – укажем дату прибытия меньше, чем дата выполнения запроса (а именно 17.06.2018 11:30); 3 – укажем дату прибытия меньше, чем дату отправления. В итоге, все запросы не были выполнены и дали ошибку.
select createTrip(4,'2018-06-20 07:30:00','2018-06-20 08:10:00');
select createTrip(1,'2018-06-02 07:30:00','2018-06-16 08:10:00');
select createTrip(2,'2018-06-15 07:30:00','2018-06-14 08:10:00');
Функция «sellTickets» принимает номер рейса, имя и фамилию пассажира. Так как типы полей имени и фамилии не ограниченны, то необходимо протестировать лишь отправляемый номер рейса. Указав несуществующий номер, мы видим ошибку выполнения.
select sellTickets(15,'lolo','popo');
Функция «shift» принимает номер рейса и новое время прибытия и отправления. Эта функция подобна «createTrip», поэтому также устойчива ко всем тестовым вызовам, продемонстрированным выше.
Функция «timeBarrier» принимает дату. Эта функция реализована таким образом, что она принимает любую дату (меньше, чем дата выполнение самого запроса или дату, в которую нет рейсов). В таких ситуация таблица «barrier» - пустая, что означает, что железнодорожный переезд весь день открыт.
Функция «archive» не принимает никаких данных, поэтому протестировать на введение некорректных ее невозможно.
Результат
В результате была создана реляционная база данных для железнодорожной станции с третьей нормальной формой таблиц. Все обязательные данные и особенности были учтены. Весь проект автоматизирован специальными функциями создания и корректирования данных. А также, был создан архив для хранения неактуальной информации, которая может понадобиться в будущем.
С помощью реализованного проекта можно поддерживать существование реальной железнодорожной станции с переездом через автомагистраль для учета и хранения всей необходимой информации.