Пусть требуется создать программную систему, предназначенную для менеджера музыкальных групп. Такая система должна обеспечивать хранение сведений о группах, включающих название группы, год образования и страну, состав исполнителей, положение в последнем хит-параде; репертуар группы. Сведения о каждой песне из репертуара группы — это ее название, композитор, автор текста. Необходимо также хранить данные о последней гастрольной поездке каждой группы: название гастрольной программы, названия населенных пунктов, дата начала и окончания выступлений, средняя цена билета (зависит от места выступления и положения группы в хит-параде). Возможно появление новой группы и изменение состава исполнителей. Каждая песня может быть в репертуаре только одной группы.
Менеджеру могут потребоваться следующие сведения:
- Автор текста, композитор и дата создания песни с данным названием? В репертуар какой группы она входит? Репертуар наиболее популярной группы?
- Цена билета на последний концерт указанной группы?
- Состав исполнителей группы с заданным названием, их возраст и амплуа?
- Место и продолжительность гастролей группы с заданным названием?
- Какие группы в текущем году отмечают юбилей
- Самый молодой вокалист? Какую группу он представляет?
- Приобретены практические навыки проектирования ER-модели и структуры базы данных по текстовому описанию предметной области. В ходе работы разработана ER-модель на основе текстового описания предметной области, посвящённой менеджменту музыкальных групп. После этого создана структура базы данных, соответствующая нормальной форме Бойса — Кодда, что обеспечивает эффективное и надёжное хранение данных без избыточности.
- Реализована спроектированная база данных в СУДБ PostgreSQL. Создана и заполнена тестовыми данными таблицы. Созданы запросы, отвечающие на поставленные вопросы.
- Созданы модели спроектированной базы данных с использование Sequelize. Написан скрипт для заполнения тестовыми данными с помощью NodeJS и описаны связи между таблицами. Также реализованы запросы в соответствии с заданием и проведен анализ ответов.
- Создан файл для заполнения БД тестовыми данными с использованием библиотеки faker. Проведены исследования времени для запросов на разном количестве объемов данных– чем больше количество данных, тем дольше выполняется запрос. Для сокращения времени выполнения запроса можно индексировать БД, что и было сделано. Проведены исследования, которые отражают, что индексы уменьшают время выполнения запроса. Также проведены исследования, показывающие, что использование сортировок увеличивает время выполнения запросов. Для всех исследований сделаны графики.
- Разработан web-сервер для выполнения запросов, каждый запрос протестирован. Изучена утилита SQLmap, помогающая тестировать запросы на SQL-инъекции. Замечено, что она работает не идеально: не всегда определяет все виды инъекций, а значит каждый запрос все еще требует ручного тестирования.