База даних (БД) - це програма, яка дає змогу зберігати й обробляти інформацію в структурованому вигляді. БД - окрема незалежна програма, яка не входить до мови програмування. У базі даних можна зберігати будь-яку інформацію, щоб пізніше отримувати до неї доступ.
Бази даних потрібні для зберігання інформації. Щоб отримати повне розуміння необхідності використання БД у сучасному веб-програмуванні, необхідно відповісти на три запитання:
Яку інформацію і навіщо ми зберігаємо?
У якому вигляді і як треба зберігати цю інформацію?
Як і яким способом можна отримати доступ до цієї інформації?
Припустимо, ви вирішили зробити сайт, де кожен користувач може вести особистий щоденник спостереження за погодою у своєму місті. Такий сайт повинен мати щонайменше одну форму введення з такими полями: місто, дата, температура, хмарність, погодне явище, і так далі.
Щодня спостерігач записує показання погоди в цю форму, щоб коли-небудь у майбутньому повернутися на сайт і подивитися, яка була погода місяць або навіть рік тому. Із цього прикладу випливає, що програміст якимось чином має зберігати дані з форми для подальшого використання.
Крім звичайного перегляду щоденника погоди за місяць у вигляді таблиці, можна зробити і складніший проект. Наприклад, щоб електронний щоденник чимось якісно відрізнявся від свого паперового аналога, буде непогано додати туди можливості для простого аналізу: показати, який день був найхолоднішим у листопаді або якої тривалості була найдовша серія похмурих днів.
Виходить, що дані треба не просто якось зберігати, а й мати можливість їх обробляти й аналізувати.
Саме для цих цілей і існують бази даних.
В основі всієї структури зберігання лежать три поняття - база даних, таблиця і запис.
👉 База даних - це високорівневе поняття, яке означає об'єднання сукупності даних, що зберігаються для виконання однієї мети.
Якщо ми робимо сучасний сайт, то всі його дані будуть зберігатися всередині однієї бази даних.
Стосовно бази даних таблиця є вкладеним об'єктом. Тобто одна БД може містити в собі безліч таблиць. Аналогією з реального світу може бути шафа (база даних) всередині якої лежить безліч коробок (таблиць).
Таблиці потрібні для зберігання даних одного типу, наприклад, списку міст, користувачів сайту, або бібліотечного каталогу. Таблицю можна уявити як звичайний аркуш в Excel-таблиці, тобто сукупність рядків і стовпців.
Заповнюючи таблицю, користувач визначає стовпці, у кожного з яких є заголовок. У рядках зберігається інформація. У БД так само: створюючи нову таблицю, необхідно описати, з яких стовпців вона складається, і дати їм імена.
Запис - це рядок електронної таблиці. Це неподільна сутність, яка зберігається в таблиці. Коли ми зберігаємо дані веб-форми з сайту, то насправді додаємо новий запис у якусь із таблиць бази даних.
Запис складається з полів (стовпців) та їхніх значень. Але значення не можуть бути якими завгодно. Визначаючи стовпчик, програміст має вказати тип даних, який зберігатиметься в цьому стовпчику: текстовий, числовий, логічний, файловий тощо. Це потрібно для того, щоб у майбутньому в базу не були записані дані неправильного типу.
Зберемо все разом, щоб зрозуміти, який вигляд матиме ведення щоденника погоди за участю бази даних.
Створимо для сайту нову БД і дамо їй назву weather_diary.
Створимо в БД нову таблицю з ім'ям weather_log і визначимо там такі стовпці:
Місто (тип: текст)
День (тип: дата)
Температура (тип: число)
Хмарність (тип: число; від 0 (немає хмарності) до 4 (повна хмарність))
Чи були опади (тип: істина або брехня)
Коментар (тип: текст)
Під час збереження форми будемо додавати в таблицю weather_log новий запис і заповнювати в ньому всі поля інформацією з полів форми.
Тепер можна бути впевненими, що спостереження наших користувачів не пропадуть, і до них завжди можна буде отримати доступ.
Англійське слово relation можна перекласти як "зв'язок", "відношення". А визначення "реляційні бази даних" означає, що таблиці в цій БД можуть вступати у відношення і перебувати у зв'язку між собою.
Наприклад, одна таблиця може посилатися на іншу таблицю. Це часто потрібно, щоб скоротити обсяг і уникнути дублювання інформації. У сценарії зі щоденником погоди користувач вводить назву свого міста. Ця назва зберігається разом із погодними даними. Але можна вчинити інакше:
Створити нову таблицю з ім'ям cities.
Усі міста в Україні відомі, тому їх усі можна додати в одну таблицю.
Переробити форму, змінивши поле введення міста з текстового на поле типу select, щоб користувач не вписував місто, а вибирав його зі списку.
Під час збереження погодного запису в полі для міста поставити посилання на відповідний запис із таблиці міст.
Так ми вирішимо відразу два завдання:
Скоротимо обсяг збереженої інформації, оскільки погодні записи більше не міститимуть назву міста;
Уникнемо дублювання: всі користувачі обиратимуть одне із заздалегідь визначених міст, що унеможливить помилки.
Зв'язки між таблицями в БД бувають різних видів. У прикладі вище використовували зв'язок типу "один-ко-багатьом", адже одному місту може відповідати безліч погодних записів, але не навпаки! Бувають зв'язки й інших типів: "один-до-одного" і "багато-до-багатьох", та вони використовуються значно рідше.