JavaRush /Java блог /Random UA /Розбираємо бази даних та мову SQL - "Java-проект від А до...
Roman Beekeeper
35 рівень

Розбираємо бази даних та мову SQL - "Java-проект від А до Я"

Стаття з групи Random UA
Стаття із серії про створення Java-проекту. Її мета — аналіз ключових технологій, результат — написання телеграм-бота. Вступна частина - тут . Алоха, інженери-програмісти. Сьогодні говоримо про бази даних та мову SQL. "Java-проект від А до Я": розбираємо бази даних та мову SQL - 1На кого розраховано цю статтю? Та на всіх, кому цікаво. Одні можуть розпочати свій шлях із цієї статті, інші зможуть освіжити в пам'яті цікаві факти. Ця частина буде суто теоретичною. Перш ніж розповідати, що таке бази даних та SQL-синтаксис, потрібно зрозуміти та визначити, для чого ми їх вивчатимемо. На даному етапі говоритимемо ТІЛЬКИ про SQL бази даних: NoSQL у цьому циклі статей розглядати не будемо.

База даних: що це

"Java-проект від А до Я": розбираємо бази даних та мову SQL - 2База даних (далі БД) - це місце, де зберігаються структуровані дані, які можна отримати за допомогою мови запитів. Бази даних вміють не тільки зберігати, а й обробляти та змінювати інформацію у великих обсягах. Для ремарки: спробуйте швидко змінити 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 - мова програмування для маніпулювання та управління базами даних. Для розуміння, як це працює, подивимося на малюнок:"Java-проект від А до Я": розбираємо бази даних та мову SQL - 3Користувач надсилає SQL-запити в СУБД, СУБД розуміє, що потрібно зробити, робить це, і якщо запит був на отримання даних, то повертає їх. Тому нам як розробникам необхідно освоїти мову запитів SQL. Ви можете подумати: «О, ще одна мова. Я тут Java з божою допомогою ледве розумію, а ви мені ще одну мову відразу пропонуєте». Це не так: SQL був придуманий як мова-специфікація для СУБД так, щоб писати цією мовою могли бухгалтери, які дуже далекі від баз даних та програмування загалом. Це означає, що вивчити його буде не так вже й складно. Головне – ПРАКТИКА-ПРАКТИКА-ПРАКТИКА. Сьогодні буде теорія, але наступна стаття буде про практику. Так як реляційна база даних - це набір двовимірних-масивів-таблиць і відносини між ними, то і робота йтиме навколо них. Якщо говорити про приклад,"Java-проект від А до Я": розбираємо бази даних та мову SQL - 4Для нас на даному етапі важливо зрозуміти, що записи в таблиці – це дані про якийсь об'єкт із 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-таблицями, і вам зрозумілі терміни рядок і стовпець . В рамках баз даних ми більше говоримо про записи та поля: "Java-проект від А до Я": розбираємо бази даних та мову SQL - 5Таким чином виходить, що кожен об'єкт класу City - це запис у таблиці в базі даних.

Первинний ключ

"Java-проект від А до Я": розбираємо бази даних та мову SQL - 6Часто буває так, що поля бази даних мають однакові значення. Наприклад, соцмережі, де на ім'я, прізвище і навіть по-батькові може знайтися більше однієї людини. А реляційні бази даних вимагають наявності унікального поля, яким можна було б отримати доступ до запису. Ось це і називається перший ключ або Primary Key. Зазвичай як такий ключ використовують поле ID(id) — скорочення від identifier. Саме тому до кожної таблиці потрібно додати поле ID ."Java-проект від А до Я": розбираємо бази даних та мову SQL - 7

Зовнішній ключ

У прикладі таке поле є у таблиці City, яка використовує ключ від Country. І працює це так: кожне місто знає унікальний ідентифікатор інформації по своїй країні, і якщо взяти його та створити запит до БД, ми отримаємо вичерпну інформацію про країну. Як видно на картинці, є зв'язок між двома таблицями: "Java-проект від А до Я": розбираємо бази даних та мову SQL - 8Тут показаний принцип зовнішнього ключа.

Які розділи є в SQL

На співбесідах, до речі, часто запитують, які операції є в SQL:
  • DDL (Data Definition Language) — група операторів, що змінюють/створюють таблиці, їхню структуру та інше. Тобто створення таблиці, її видалення, створення/видалення полів у таблицях; створення нового первинного ключа тощо;
  • DML (Data Manipulation Language) – група операторів, що управляють зміною даних. Це всі операції, які змінюють дані в БД: додавання, отримання, зміна та видалення;
  • DCL (Data Control Language) – засоби підтвердження прав користувача на виконання дій. Операції з надання доступу та прав для конкретного користувача, щоб він міг виконувати DDL/DML операції.

Які типи даних є в SQL

Таблиці можуть зберігати та обробляти певні типи даних. Тут буде все схоже на те, що ми використовуємо в Java. Поговоримо про основні. Їх всього три, інші вже будемо додавати за потребою та/або за бажанням: "Java-проект від А до Я": розбираємо бази даних та мову SQL - 9Як видно з картинки, це:
  • INT - Цілочисленні значення. Використовуються для унікального ідентифікатора і просто цілого числа;
  • VARCHAR - це наш String ;
  • DATE це наш LocalDate.
Поки що все просто так? Типи полів задаються під час створення таблиці. Зрозуміло, що не можна буде записати у полі значення іншого типу.

Хто такі SQL оператори

Оператор - це окрема команда, яка справляє якусь дію. Оператори складаються із пропозицій, ті, у свою чергу, із ключових слів, які використовуються у запитах. Подивимося на приклад: "Java-проект від А до Я": розбираємо бази даних та мову SQL - 10Тут уже цікавіше, тут уже збудовано запит. Що там роблять? Все просто, там говориться: "Взяти три поля (Name, Age та CreatedDate) з таблиці Clients, вибрати тільки ті записи, де name дорівнює Roman".

Висновок

У цій статті ми почали вивчати бази даних. Ми зрозуміли, що це таке, і навіщо воно нам. Далі пробіглися за першими ознаками SQL, про які детальніше поговоримо вже в наступній статті. Традиційно пропоную зареєструватися на GitHub і підписатися на мій обліковий запис , щоб стежити за цією серією та іншими моїми проектами, які я веду там.

Домашнє завдання

Щоб додати інтерес до цієї серії статей на JRTB, час від часу будуть домашні завдання. Наприклад, без сьогоднішнього завдання наступну статтю вже значно складніше зрозуміти, адже там буде багато практики. Тому завдання: встановити СУБД MySQL собі на комп'ютер і увійти до бази даних чи через консоль, чи інші рішення. Дякую всім за прочитання, до швидких зустрічей!

Список всіх матеріалів серії на початку цієї статті.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ