1. Історія появи баз даних — БД та СУБД

Давним-давно в одній американській країні, у великій ІТ-компанії якось постало завдання зберігати дуже великі обсяги даних. Що ж у цьому складного, спитаєш ти? Адже великі компанії мають гроші, а отже, можна купити якомога більше жорстких дисків, і проблему вирішено.

Відмінне рішення, але, як кажуть, диявол криється в деталях. Великі обсяги даних потрібно було не лише зберігати, а й змінювати, робити з них різні вибірки. Причому вибирати дані потрібно різні, з різних місць, а робити все це треба швидко і красиво.

Загалом все було так, як завжди: замовники захотіли щось таке, чого не існує, і рішення з купівлею жорстких дисків цього разу нікого не задовільнило.

Тому програмісти цієї ІТ-компанії вибили собі більший бюджет, провели дослідницьку роботу, а коли бюджет закінчився, виступили з презентацією, в якій запропонували зберігати дані у вигляді Бази Даних. У базі даних всі дані зберігаються в таблицях, а кожна таблиця зберігається в окремому файлі. Все геніальне — просто.

Але замовників така презентація не влаштувала, і далі посипалися причіпки:

  • Де гроші, Лебовськи?
  • Чим база даних краща за старе-добре зберігання даних у вигляді набору файлів?
  • Нам потрібне дійсно гарне рішення, а не ось це все!
  • І на це пішов увесь бюджет?

У кімнаті презентацій повисла мертва тиша. Однак несподівано для всіх ситуацію врятував молодший розробник, який заявив, що до БД додається спеціальна програма — СУБД (Система Управління Базою Даних), яка вміє:

  • Створювати, змінювати та видаляти Бази Даних
  • Вносити зміни до баз даних, а саме: додавати нові записи, видаляти старі та змінювати їх
  • А також супер швидко виконувати різні вибірки будь-яких даних

І програмісти навіть закінчують проєктувати спеціальну супермову для фільтрації даних — SQL. І мовляв, за допомогою цієї чарівної SQL-мови будь-який менеджер зможе легко відфільтрувати й отримати будь-які дані з бази даних.

Програмісти просто ще не встигли закінчити проєктувати цю мову, тому в презентації немає жодного слова про SQL та СУБД.

На спільну радість, на замовників справило враження таке пояснення, тому вони висловили кілька суперечливих одна одній ідей про те, якою має бути ця нова мова, і навіть виділили бюджет на її доопрацювання.

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

2. Популярні СУБД та MySQL

Нині існують сотні популярних СУБД, тому тобі буде корисно дізнатися про деякі з них. З чого почати?

З одного боку, ринок корпоративних СУБД існує вже кілька десятиліть. Тож на ньому є як визнані лідери, так і перспективні новачки. З іншого боку, вимоги бізнесу постійно зростають, тому постійно змінюються підходи до влаштування ІТ-інфраструктур компаній.

Зараз нікого не здивуєш базою даних із кластера в пару тисяч серверів з горизонтальним і вертикальним шардуванням, розподіленими транзакціями, а також ІТ-відділом з парою десятків системних адміністраторів, які ходять і змінюють жорсткі диски серверів за заздалегідь складеним розкладом.

Загалом, якщо ти працюватимеш на велику компанію, ти побачиш, що скоріше за все вона платить за свої бази даних купу грошей, і користується чимось таким:

Oracle Database

Компанія Oracle випустила свою першу базу даних ще 1979 року. Вона одразу мала назву Oracle 2.0, щоб переконати клієнтів, що продукт не новий, а перевірений часом.

Поточна версія бази (станом на 2022 рік) — Oracle 21c, де буква c — від слова cloud, що ніби натякає, що компанія Oracle йде в ногу з часом та її рішення сумісні з усіма хмарними технологіями.

Microsoft SQL Server

Компанія Microsoft заробляє купу грошей не на продажах Windows, а на серверних рішеннях для середнього та великого бізнесу. Microsoft Office, Microsoft SharePoint, Microsoft Server тощо. І, звісно ж, для цього потрібна хороша база даних. Тому купа компаній, використовуючи продукти та рішення Microsoft, змушені використовувати її базу даних.

СУБД від Microsoft називається просто SQL Server, тому якщо почуєш на співбесіді питання “чи працювали ви з SQL Server?”, то знай, що мають на увазі не абстрактну СУБД, а саме Microsoft SQL Server.

PostgreSQL

Це хороша безкоштовна СУБД, яку часто використовують не лише дрібні та середні компанії, а й серйозні корпорації. Це одна з баз даних, яку пропонує Amazon AWS як DB-as-service.

MySQL

MySQL — це дуже популярна безкоштовна СУБД з відкритим вихідним кодом. Вона добре документована, швидко працює, підтримує величезний набір функцій. Нині день доступна 8-ма версія цієї СУБД.

У 2008 її купила компанія Sun, яку у 2009 купила компанія Oracle. І це пішло їй лише на користь — продукт постійно розвивається та покращується.

Ми вчимося працювати з базами даних саме на прикладі MySQL Community Server 8.0.

3. Таблиці в базі даних: колонки та стовпці

Різні СУБД можуть зберігати дані в різних форматах, тому ми візьмемо найпростіший класичний варіант — СУБД MySQL.

І одразу постає питання: як зберігати, наприклад, якісь бухгалтерські документи? Найпростіший варіант — зберігати кожен документ у вигляді файлу Excel. Тоді всі пов'язані між собою документи можна тримати в одній папці. Приблизно так працює і MySQL.

Ще одна аналогія: у мові Java у тебе в проєкті є класи та пакети, але водночас класи та пакети на диску представлені у вигляді файлів та папок. Щось схоже є й у MySQL.

Дані MySQL зберігають у вигляді таблиць, які об'єднані в бази даних, але водночас таблиці та база представлені на диску у вигляді файлів та папки. База даних — це папка, а файли в ній — таблиці.

Кожна таблиця складається з колонок та рядків. Приклад:

Важливо! Кожна колонка має ім'я та тип даних, тому всі ячейки однієї колонки повинні зберігати значення однакового типу.

Можна провести аналогію між таблицею у MySQL та класом у Java. Таблиця — це клас, таблиця, як і клас, має унікальне ім'я. Колонки таблиці — це поля класу, колонки, як і поля, мають унікальне ім'я і тип. Рядки таблиці — це екземпляри класу Java.

Клас може існувати без об'єктів, а таблиця — без рядків. У Java можна створити новий об'єкт, а в MySQL до таблиці можна додати новий рядок. У об'єкта можна змінити значення полів, а в MySQL можна змінити значення в рядку.

Точніше буде навіть сказати, що таблиця — це не клас, а колекція об'єктів певного класу. Якщо в MySQL у нас є таблиця Employee з даними про співробітників, то в Java ми користувалися б колекцією ArrayList<Employee>.

І, звісно, одразу постає питання: а як отримати певні дані з цієї колекції?