## База даних: MySQL / H2 / PostgreSQL

База даних зберігає інформацію про користувачів та інші об’єкти системи. У Spring Boot ми працюємо з БД через JPA.
SQL
Tables
Primary Key
Constraints
JPA / Hibernate
Transactions

### 1) Для чого потрібна база даних у нашому проєкті

- Зберігає дані постійно (на відміну від пам’яті JVM, яка стирається після зупинки).
- Дозволяє шукати, фільтрувати, оновлювати дані.
- Підтримує цілісність (унікальність email, зв’язки між таблицями, тощо).
- Без БД реальний backend — це просто “демо”.

### 2) Реляційні БД і SQL — коротко, без води

Реляційна БД — це таблиці (rows/columns). SQL — мова для роботи з цими таблицями.

Основні операції

- SELECT — читати
- INSERT — додати
- UPDATE — змінити
- DELETE — видалити

Ключові поняття

- Таблиця / рядок / колонка
- Primary Key (id)
- Unique (email)
- Foreign Key (зв’язки)

### 3) MySQL vs PostgreSQL vs H2 — що вибрати і коли

Суть: H2 — для навчання/швидкого старту, MySQL/PostgreSQL — для “по-справжньому”.

H2 (вбудована/тимчасова)

- Стартує миттєво
- Не треба ставити сервер БД
- Ідеально для лабораторних

Мінус: “іграшкова” для продакшну.

MySQL (популярна в бізнесі)

- Дуже поширена
- Проста для початку
- Добре для CRUD-систем

Мінус: місцями менше “розумних” можливостей, ніж у Postgres.

PostgreSQL (сильна, “доросла”)

- Багато фіч і строгість
- Стабільність і масштабування
- Часто вибір продуктів/стартапів

Мінус: для новачків може бути трохи “важчою”.

### 4) Як Spring Boot “підключається” до БД

Потрібно 3 речі: driver, URL, credentials.

Що додаємо в проєкт

- spring-boot-starter-data-jpa (JPA/Hibernate)
- Драйвер БД: mysql-connector-j або postgresql
- Для H2: h2

Де налаштовуємо

- application.properties або application.yml
- URL, логін, пароль
- Hibernate DDL (create/update)

### 5) Приклади налаштувань (готові шаблони)

H2 (найшвидше для лабораторної)
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=update spring.h2.console.enabled=true

H2 Console зазвичай: /h2-console (дивимося таблиці прямо в браузері).

MySQL (як у багатьох компаніях)
spring.datasource.url=jdbc:mysql://localhost:3306/app_db?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

Потрібно створити БД app_db перед запуском (або дозволити авто-створення через інструмент БД).

PostgreSQL (часто “дорослий стандарт”)
spring.datasource.url=jdbc:postgresql://localhost:5432/app_db spring.datasource.username=postgres spring.datasource.password=your_password spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

Postgres суворіший і часто краще ловить “криві” дані.

### 6) Як дані потрапляють в БД (на рівні курсу)

Ми не будемо писати SQL руками на кожному кроці. Ми використовуємо JPA:

- @Entity описує таблицю
- Repository дає CRUD методи
- Spring сам формує SQL за вас (через Hibernate)

@Entity public class User { @Id @GeneratedValue private Long id; private String name; private String email; }

### 7) Типові граблі студентів (і як швидко лікувати)

- “Access denied” → неправильний логін/пароль або користувач без прав.
- “Unknown database” → БД не створена (app_db).
- “Cannot load driver class” → не додали драйвер у залежності.
- “Connection refused” → сервер БД не запущений.
- Дані зникли → це H2 in-memory (після перезапуску все стирається).

### 8) Що ми використовуємо на практичній №2

- Для швидкого старту: H2 (щоб у всіх запустилось)
- Для реалістики (за бажанням/для сильніших): MySQL або PostgreSQL
- Підключення через Spring Data JPA

Далі буде окремий слайд з налаштуванням конкретної БД крок за кроком.

Далі: налаштування application.properties та перевірка таблиць у БД