Лабораторна робота №2
З дисципліни: «WEB-орієнтовані технології. Backend розробки»
Тема: «Створення бази даних у MySQL. Підключення Node.js до MySQL. Робота з ORM Sequelize»
Мета роботи
Метою лабораторної роботи є набуття практичних навичок створення бази даних у MySQL, виконання основних SQL-запитів, підключення серверного застосунку на Node.js до бази даних та використання ORM Sequelize для роботи з даними. Окремою ціллю є реалізація зв’язків між таблицями за принципом One-to-Many.
Короткі теоретичні відомості
MySQL є реляційною системою керування базами даних, у якій інформація зберігається у вигляді таблиць, пов’язаних між собою ключами. Для роботи з даними використовується мова SQL, яка дає змогу створювати таблиці, додавати записи, змінювати їх, видаляти та отримувати потрібні вибірки.
Node.js є серверним середовищем виконання JavaScript. Воно дозволяє створювати backend-застосунки, які можуть працювати з файлами, мережею, API та базами даних. Для прямого підключення до MySQL у роботі використовується драйвер mysql2, який дозволяє надсилати SQL-запити з коду Node.js та отримувати результати їх виконання.
Sequelize є ORM-бібліотекою для Node.js. Вона дозволяє працювати з таблицями бази даних через JavaScript-моделі. Це спрощує розробку, робить код більш структурованим і зменшує кількість SQL, який потрібно писати вручну. Крім того, Sequelize дозволяє описувати зв’язки між сутностями, наприклад один-до-багатьох або один-до-одного.
Постановка задачі
У межах лабораторної роботи було створено базу даних для вебзастосунку оренди велосипедів. Предметна область включає користувачів системи, станції прокату, велосипеди, бронювання та оплату. Користувач у системі може мати роль клієнта або адміністратора. Велосипед належить певній станції, користувач може створювати бронювання, а для кожного бронювання формується відповідний запис про оплату.
Для реалізації цієї логіки було спроєктовано такі таблиці: users, stations, bikes, bookings, payments. Між ними реалізовано зв’язки таким чином: одна станція може містити багато велосипедів, один користувач може мати багато бронювань, один велосипед може брати участь у багатьох бронюваннях, а одному бронюванню відповідає один платіж.
Опис структури бази даних
Таблиця users призначена для збереження інформації про користувачів системи. У ній містяться ім’я користувача, електронна пошта, пароль, роль та дата створення запису.
Таблиця stations зберігає інформацію про станції прокату. Для кожної станції задається назва, адреса та координати. Це дозволяє визначати, де саме розміщується велосипед.
Таблиця bikes містить відомості про велосипеди. Для кожного велосипеда зберігається назва, тип, ціна за годину, статус, опис, фото та посилання на станцію, до якої він належить. Статус велосипеда показує, чи доступний він для оренди, чи вже орендований, перебуває на обслуговуванні або тимчасово неактивний.
Таблиця bookings реалізує процес бронювання. У ній містяться посилання на користувача і велосипед, час початку та завершення оренди, кількість годин, загальна вартість та статус бронювання. Це дозволяє зберігати повну історію оренд.
Таблиця payments зберігає дані про оплату бронювання. Для кожного платежу фіксуються сума, метод оплати, статус та час здійснення платежу.
Реалізація в MySQL
На першому етапі було створено базу даних bike_rental_db. Після цього у ній були створені всі необхідні таблиці з первинними та зовнішніми ключами. Використання зовнішніх ключів забезпечило цілісність даних і правильний зв’язок між сутностями предметної області.
У процесі виконання лабораторної роботи були реалізовані стандартні SQL-операції INSERT, SELECT, UPDATE та DELETE. За допомогою INSERT до таблиць додавалися користувачі, станції, велосипеди, бронювання та оплати. За допомогою SELECT отримувалися записи з таблиць, що дозволяло перевіряти правильність збережених даних. Операція UPDATE використовувалась для зміни стану велосипеда або статусу бронювання. Операція DELETE дозволяла видаляти тестові записи з таблиць.
Рис. 1 Ініціалізація бази в коді
Рис. 2 Написання моделі Station
Підключення Node.js до MySQL
Після створення бази даних було налаштовано Node.js застосунок. Для прямого підключення до MySQL використано пакет mysql2. У конфігураційному файлі були вказані параметри з’єднання: адреса сервера, порт, назва бази, ім’я користувача та пароль. Це дало змогу виконувати SQL-запити безпосередньо з JavaScript-коду.
Окремо було створено файл для демонстрації роботи з mysql2, у якому реалізовано додавання нової станції та велосипеда, отримання записів з бази, оновлення ціни та статусу велосипеда, а також видалення тестових даних. Таким чином було підтверджено можливість прямої взаємодії Node.js застосунку з MySQL.
Використання Sequelize
Для більш зручної роботи з базою даних у проєкті також було використано ORM Sequelize. Для кожної таблиці створено відповідну модель: User, Station, Bike, Booking, Payment. У моделях були описані поля таблиць, типи даних, обмеження та значення за замовчуванням.
Після цього були налаштовані зв’язки між моделями. Модель Station пов’язана з моделлю Bike через зв’язок один-до-багатьох. Аналогічно, модель User має багато бронювань, а модель Bike також може мати багато бронювань. Модель Booking пов’язана з моделлю Payment через зв’язок один-до-одного.
Завдяки Sequelize стало можливо виконувати CRUD-операції через методи моделей. Це дозволило створити більш зручний та читабельний код, ніж при роботі лише з сирими SQL-запитами.
Рис. 3 Написання роутів з викоистанням Sequelize
Опис роботи застосунку
У межах лабораторної роботи було реалізовано серверний застосунок для оренди велосипедів. Сервер запускається на Node.js і використовує Express. Застосунок надає маршрути для роботи зі станціями, велосипедами та бронюваннями.
Під час створення бронювання користувач обирає велосипед і вказує проміжок часу оренди. Програма обчислює кількість годин, розраховує загальну вартість на основі ціни за годину, створює запис у таблиці bookings, а також формує відповідний запис у таблиці payments. Після створення бронювання статус велосипеда змінюється на rented. Після завершення або скасування бронювання статус велосипеда повертається до available.
Така логіка демонструє практичне використання бази даних у реальному вебзастосунку та показує, як взаємодіють між собою окремі сутності предметної області.
Результати роботи
У результаті виконання лабораторної роботи було створено повноцінну базу даних для системи оренди велосипедів. Було реалізовано таблиці для користувачів, станцій, велосипедів, бронювань та оплат. Підключення Node.js до MySQL було виконано двома способами: через драйвер mysql2 та через ORM Sequelize. У межах застосунку були продемонстровані основні CRUD-операції, а також реалізовані зв’язки між таблицями відповідно до моделі предметної області.
Отриманий результат показує, що MySQL зручно використовувати для зберігання структурованих даних вебзастосунку, Node.js забезпечує серверну логіку, а Sequelize дозволяє ефективно керувати моделями та зв’язками між ними.
Рис. 4 Отримання списку станцій
Рис. 5 Створення велосипеда
Рис. 6 Редагування велосипеда
Оскільки ми намагаємося редагувати ресурсу якого не існує, то ми отримуємо 404
Рис. 7 Видалення велосипеда
Висновок
У ході виконання лабораторної роботи було досягнуто поставленої мети. Було створено базу даних у MySQL, спроєктовано структуру таблиць відповідно до теми власного вебзастосунку, реалізовано основні SQL-запити, налаштовано підключення Node.js до MySQL та використано ORM Sequelize для роботи з даними. Також було реалізовано зв’язки між таблицями за принципом One-to-Many та One-to-One.
Отже, лабораторна робота дозволила закріпити знання з організації баз даних, роботи з SQL, налаштування серверного підключення та побудови backend-частини застосунку на Node.js з використанням сучасних інструментів.