users: типи даних (VARCHAR, INT), первинний ключ (Primary Key - id) та Auto Increment.Сесії ідеальні для тимчасової пам’яті (пам’ятати користувача доки він не вийде з акаунту або не закриє браузер). Проте, якщо сервер перезавантажиться чи впаде — всі файли сесій зникнуть назавжди. Щоб зберігати мільйони анкет, коментарів чи товарів “на віки”, щоб вони не зникали при вимкненні світла або оновленні коду, потрібне надійне і швидке “Сховище” (Storage). Таким сховищем для 90% вебсайтів виступає База Даних. У цій лекції ми розберемо структуру БД MySQL, яка постачається у складі XAMPP/MAMP, і створимо в ній нашу першу архітектурну таблицю візуальними інструментами (без написання складного коду).
Чому ми не можемо просто взяти і зберігати всіх зареєстрованих користувачів у звичайному .txt або Excel (csv) файлі звичайними засобами PHP (file_put_contents)?
ivan@mail у текстовому файлі на мільйон рядків, інтерпретатору PHP доведеться прочитати і перебрати всі 999 999 рядків зверху донизу. Це займає секунди. Сервер Баз ДАНИХ (наприклад MySQL) має спеціальні бінарні дерева індексів і знайде його за <0.001 мілісекунди..txt 20-ма процесами в PHP закінчиться катастрофічним збоєм (Lock Error) або втратою частини оплат. MySQL розроблена для тисяч ОДНОЧАСНИХ підключень без втрати даного ані байта долі.Найпопулярніші у вебі бази — Реляційні (Relational - ті, що встановлюють зв’язки/співвідношення між різними сутностями). MySQL (або її сестра MariaDB) — світовий стандарт де-факто для PHP-застосунків.
Сервер бази даних (MySQL Workbench або ваш локальний XAMPP сервер MariaDB) — це величезний “будинок” (Система). Він може обслуговувати одразу кілька проектів одночасно.
Ієрархія зберігання:
shop_db.shop_db ми створюємо таблицю users (користувачі) і окремо поруч незалежну таблицю products (товари).name, price, description. Ми не можемо просто вставити в рядок ціну і кількість, не створивши під них стовпці у таблиці (Ця жорсткість є відмінністю Реляційних баз формату SQL від гнучких NoSQL, таких як MongoDB).phpMyAdminУправляти Базою Даних і створювати таблиці можна виключно командами-запитами з терміналу: CREATE TABLE users (id INT, name VARCHAR);. Це важко, якщо ви цього не робите щодня.
Тому веб-розробники використовують найвідоміший у світі клієнт для управління базами через зручний браузерний інтерфейс (з кнопочками) — програму phpMyAdmin (Вона, до речі, повністю написана на PHP).
MySQL (кнопка Start поруч). (За замовченням він працює на порту 3306).Apache (веб-сервер).http://localhost/phpmyadmin/.
Або просто натисніть кнопку “Admin” навпроти модуля MySQL у панелі XAMPP.Там ви побачите дерево баз даних зліва і робочу зону справа. Ви можете клікнути “Створити (New)” -> написати ім’я БД (напр., task_manager) і обрати кодування. ОБОВ’ЯЗКОВО завжді обирайте кодування utf8mb4_unicode_ci, щоб база могла зберегати не лише латиницю, а й кирилицю та емодзі 😜!
users та Типи данихВідкривши створену базу даних, phpMyAdmin відразу запропонує “Створити нову таблицю (Create Table)”. Давайте спроєктуємо таблицю users (4 колонки).
Кожен стовпець потребує розуміння Типу Даних. База даних зберігає дані в максимально “стиснутому” та оптимізованому для пам’яті вигляді.
25, -10, віку, ID, кількостей товарів або цін (в копійках без ком).VARCHAR(50), Електронна пошта VARCHAR(150), Пароль). Вони заощаджують пам’ять.is_admin, is_published.У таблиці можуть бути два Олександри Петренка (однакове і ім’я, і пароль, наприклад, збіглися). Як серверну систему пізніше сказати базі: “Видали МЕНІ З ЦЬОГО СПИСКУ того Олександра, що реєструвався першим?”. Як їх відрізнити, якщо їхні текстові дані ідентичні?
Для вирішення цієї проблеми у кожної грамотної таблиці ОБОВ’ЯЗКОВО повинен бути особливий стовпець “Паспорту” — унікальний ідентифікатор, який ніколи в житті не повторюється. Зазвичай його так і називають id (або user_id).
INT.Що робить увімкнений Auto Increment? Вам більше не треба як розробнику думати: “А який ID мені присвоїти новому Васі, щоб він не співпав ні з ким?”. Ви взагалі (ніколи) не надсилаєте стовпець id зі своєї PHP-програми під час INSERT (додавання). Сувора база даних з включеним A_I сама вирішить і присвоїть: “Ти будеш 43-м, а ти 44-м…”.
| Ім’я / Стовпець | Тип | A_I (Auto Inc) | Додатково |
|---|---|---|---|
| id | INT |
☑️ YES | Робимо його PRIMARY KEY (Головним індексом) |
| username | VARCHAR(100) |
- | Звичне ім’я |
VARCHAR(255) |
- | Пошта UNIQUE (можна зробити індекс Унікальності щоб не було клонів реєстрацій по пошті) |
|
| password | VARCHAR(255) |
- | Довжина 255 обов’язкова для майбутніх довгих “хешів” пароля (Bcrypt), у жодному разі не 30 і тим паче не 16. |
.txt.phpMyAdmin – це написана на веб-технологіях графічна адмін-панель для полегшення рутинних операцій з MySQL без знання консольних команд (візуальне “поклікування” кнопочок створення таблиць).id з типом INT, властивістю Первинного Ключа (Primary Key) та інкриментом на 1 кожного разу (Auto Increment - AI).DB.txt. Назвіть щонайменше дві критичні переваги спеціалізованого Сервера Баз Даних (MySQL чи PostgreSQL) над підходом текстових файлів, особливо в умовах навантаженого Інтернет-Магазину.products, обирати формат VARCHAR(100) для колонки “Назви”, якщо можна просто обрати TEXT і більше ніколи не думати й не перейматися про ліміти введеної розрядності символів? На які ресурси впливає цей вимушений ліміт довжини?Auto Increment) навпроти стовпця з типом даних Integer при проєктуванні таблиці? Яку проблему логіки розробника Backend-коду вона делегує системі серверу MySQL?