Стаття із серії про створення Java-проекту. Її мета — аналіз ключових технологій, результат — написання телеграм-бота. Вступна частина - тут . Алоха, інженери-програмісти. Сьогодні говоримо про бази даних та мову SQL. На кого розраховано цю статтю? Та на всіх, кому цікаво. Одні можуть розпочати свій шлях із цієї статті, інші зможуть освіжити в пам'яті цікаві факти. Ця частина буде суто теоретичною. Перш ніж розповідати, що таке бази даних та SQL-синтаксис, потрібно зрозуміти та визначити, для чого ми їх вивчатимемо. На даному етапі говоритимемо ТІЛЬКИ про SQL бази даних: NoSQL у цьому циклі статей розглядати не будемо.
База даних: що це
База даних (далі БД) - це місце, де зберігаються структуровані дані, які можна отримати за допомогою мови запитів. Бази даних вміють не тільки зберігати, а й обробляти та змінювати інформацію у великих обсягах. Для ремарки: спробуйте швидко змінити Excel набір значень за якимись ознаками. У принципі нічого складного. Не те що у нашому неоцифрованому реальному світі. Наприклад, перейменування провулків, вулиць, міст. Було б усе віртуально і занесено до БД, була б вона нормалізована, це була б дрібниця. А так страждає безліч носіїв даних, які не можуть автоматично змінитись. У цьому контексті SQL для баз даних – це мова, яка БД розуміє та реагує відповідно. Скажімо, перейменувати місто не склало б труднощів, перейменування Дніпропетровська в Дніпро виглядало б приблизно так:UPDATE city SET name = “Днипро” WHERE id = 1231;
Всі наступні запити в систему вже видавали б ім'я, яке нам потрібне.
Навіщо потрібні бази даних
Як я вже казав, за допомогою баз даних можна зберігати дані. Але що це за дані? Щоб зрозуміти на життєвому прикладі, можна поговорити про якусь програму. Наприклад, про той же телеграм-бот. Ми хочемо знати, скільки людей користується ботом. Як це можна продати? У звичайному Java-додатку можна створити безліч унікальних елементів - Set, яке буде зберігати nickname користувача або ID-шник чату. Це працюватиме? Буде. Рівно доки Java-додаток не зупинять, а як тільки його запустять знову, то безліч унікальних елементів буде порожнім. Тобто дані, які зберігалися у працюючому додатку, просто зникли. Що з цим зробити? Можна винести зберігання стану системи (дані) з Java-програми кудись в інше місце. Можна зберігати це у форматі CSV у звичайному файлі на комп'ютері. Можна взагалі одним рядком в окремому файлі. Це можна зробити, і потім перезаписувати ці дані перед тим, як Java-програма зупиниться. Хоча гарантія, що запис буде успішним, далеко не близька до 100%, тому що банально можна висмикнути шнур живлення сервера, і запис не відбудеться. У цьому підході є суттєвий недолік: немає ніякої функціональності щодо отримання, агрегування та пошуку інформації на рівні файлів. Так, звичайно, можна вичитати файл, створити під нього об'єкти, але при цьому доведеться щоразу викачувати додаток всі дані. А їх може бути багато, наприклад пара гігабайт. Цього можна уникнути, якщо зберігати дані у БД. Яким чином? Через таблиці та відносини між ними. На цьому всі реляційні бази даних стоять. як Java-додаток зупиниться. Хоча гарантія, що запис буде успішним, далеко не близька до 100%, тому що банально можна висмикнути шнур живлення сервера, і запис не відбудеться. У цьому підході є суттєвий недолік: немає ніякої функціональності щодо отримання, агрегування та пошуку інформації на рівні файлів. Так, звичайно, можна вичитати файл, створити під нього об'єкти, але при цьому доведеться щоразу викачувати додаток всі дані. А їх може бути багато, наприклад пара гігабайт. Цього можна уникнути, якщо зберігати дані у БД. Яким чином? Через таблиці та відносини між ними. На цьому всі реляційні бази даних стоять. як Java-додаток зупиниться. Хоча гарантія, що запис буде успішним, далеко не близька до 100%, тому що банально можна висмикнути шнур живлення сервера, і запис не відбудеться. У цьому підході є суттєвий недолік: немає ніякої функціональності щодо отримання, агрегування та пошуку інформації на рівні файлів. Так, звичайно, можна вичитати файл, створити під нього об'єкти, але при цьому доведеться щоразу викачувати додаток всі дані. А їх може бути багато, наприклад пара гігабайт. Цього можна уникнути, якщо зберігати дані у БД. Яким чином? Через таблиці та відносини між ними. На цьому всі реляційні бази даних стоять. немає жодної функціональності з отримання, агрегування та пошуку інформації на рівні файлів. Так, звичайно, можна вичитати файл, створити під нього об'єкти, але при цьому доведеться щоразу викачувати додаток всі дані. А їх може бути багато, наприклад пара гігабайт. Цього можна уникнути, якщо зберігати дані у БД. Яким чином? Через таблиці та відносини між ними. На цьому всі реляційні бази даних стоять. немає жодної функціональності з отримання, агрегування та пошуку інформації на рівні файлів. Так, звичайно, можна вичитати файл, створити під нього об'єкти, але при цьому доведеться щоразу викачувати додаток всі дані. А їх може бути багато, наприклад пара гігабайт. Цього можна уникнути, якщо зберігати дані у БД. Яким чином? Через таблиці та відносини між ними. На цьому всі реляційні бази даних стоять.SQL: мова, яку розуміють бази даних
Існують Системи Управління Базами Даних (далі – СУБД) та мова, яку вони розуміють – SQL. SQL - мова програмування для маніпулювання та управління базами даних. Для розуміння, як це працює, подивимося на малюнок:Користувач надсилає SQL-запити в СУБД, СУБД розуміє, що потрібно зробити, робить це, і якщо запит був на отримання даних, то повертає їх. Тому нам як розробникам необхідно освоїти мову запитів SQL. Ви можете подумати: «О, ще одна мова. Я тут Java з божою допомогою ледве розумію, а ви мені ще одну мову відразу пропонуєте». Це не так: SQL був придуманий як мова-специфікація для СУБД так, щоб писати цією мовою могли бухгалтери, які дуже далекі від баз даних та програмування загалом. Це означає, що вивчити його буде не так вже й складно. Головне – ПРАКТИКА-ПРАКТИКА-ПРАКТИКА. Сьогодні буде теорія, але наступна стаття буде про практику. Так як реляційна база даних - це набір двовимірних-масивів-таблиць і відносини між ними, то і робота йтиме навколо них. Якщо говорити про приклад,Для нас на даному етапі важливо зрозуміти, що записи в таблиці – це дані про якийсь об'єкт із Java-світу. Наприклад, ці дві таблиці через Java можна описати так:public class Country {
private Long id;
private String name;
}
public class City {
private Long id;
private String name;
private Country country;
private Integer population;
}
Ну чи не краса, га? У базі даних може зберігатися скільки завгодно таблиць. У нашому випадку їх дві.
Структура таблиці
Я думаю, що всі так чи інакше стикалися з excel-таблицями, і вам зрозумілі терміни рядок і стовпець . В рамках баз даних ми більше говоримо про записи та поля: Таким чином виходить, що кожен об'єкт класу City - це запис у таблиці в базі даних.Первинний ключ
Часто буває так, що поля бази даних мають однакові значення. Наприклад, соцмережі, де на ім'я, прізвище і навіть по-батькові може знайтися більше однієї людини. А реляційні бази даних вимагають наявності унікального поля, яким можна було б отримати доступ до запису. Ось це і називається перший ключ або Primary Key. Зазвичай як такий ключ використовують поле ID(id) — скорочення від identifier. Саме тому до кожної таблиці потрібно додати поле ID .Зовнішній ключ
У прикладі таке поле є у таблиці City, яка використовує ключ від Country. І працює це так: кожне місто знає унікальний ідентифікатор інформації по своїй країні, і якщо взяти його та створити запит до БД, ми отримаємо вичерпну інформацію про країну. Як видно на картинці, є зв'язок між двома таблицями: Тут показаний принцип зовнішнього ключа.Які розділи є в SQL
На співбесідах, до речі, часто запитують, які операції є в SQL:- DDL (Data Definition Language) — група операторів, що змінюють/створюють таблиці, їхню структуру та інше. Тобто створення таблиці, її видалення, створення/видалення полів у таблицях; створення нового первинного ключа тощо;
- DML (Data Manipulation Language) – група операторів, що управляють зміною даних. Це всі операції, які змінюють дані в БД: додавання, отримання, зміна та видалення;
- DCL (Data Control Language) – засоби підтвердження прав користувача на виконання дій. Операції з надання доступу та прав для конкретного користувача, щоб він міг виконувати DDL/DML операції.
Які типи даних є в SQL
Таблиці можуть зберігати та обробляти певні типи даних. Тут буде все схоже на те, що ми використовуємо в Java. Поговоримо про основні. Їх всього три, інші вже будемо додавати за потребою та/або за бажанням: Як видно з картинки, це:- INT - Цілочисленні значення. Використовуються для унікального ідентифікатора і просто цілого числа;
- VARCHAR - це наш String ;
- DATE це наш LocalDate.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ