Что такое база данных и зачем она нужна
15 минПроблема: где хранить данные?
Пока в нашем блоге посты хранятся в массиве прямо в PHP-коде:
$posts = [
["title" => "Первый пост", "content" => "..."],
["title" => "Второй пост", "content" => "..."],
];
Это плохо, потому что:
- При перезагрузке сервера данные остаются в коде
- Пользователи не могут добавлять свои посты
- Если постов 10 000, код станет огромным
- Поиск среди 10 000 постов будет медленным
Что такое база данных?
База данных — это программа, которая умеет:
- Хранить большие объёмы данных
- Быстро искать нужные данные
- Безопасно изменять данные
- Связывать разные типы данных между собой
Мы используем MySQL — одну из самых популярных баз данных в мире. Она бесплатная и работает в нашем Docker-контейнере.
Аналогия: Excel-таблица
База данных похожа на Excel, только мощнее.
Представьте Excel-файл со списком пользователей:
| ID | Имя | Пароль | |
|---|---|---|---|
| 1 | Иван | ivan@mail.ru | *** |
| 2 | Мария | maria@gmail.com | *** |
| 3 | Пётр | petr@yandex.ru | *** |
В терминах баз данных:
- Таблица — весь этот "лист" (users)
- Столбцы — ID, Имя, Email, Пароль
- Строки (записи) — каждый пользователь
- Поле — одна ячейка (например, "Иван")
Ключевые понятия
Первичный ключ (Primary Key)
Первичный ключ — уникальный идентификатор каждой записи. Обычно это столбец id с числами 1, 2, 3...
Зачем: чтобы точно найти нужную запись. Может быть два Ивана, но id=1 только один.
Автоинкремент (AUTO_INCREMENT)
Базе данных можно сказать: "сама придумывай ID для новых записей". Каждая новая запись получит следующий номер автоматически.
Типы данных
Каждый столбец имеет тип данных:
| Тип | Что хранит | Пример |
|---|---|---|
INT |
Целое число | 1, 42, 999 |
VARCHAR(255) |
Строка до 255 символов | "Иван", "ivan@mail.ru" |
TEXT |
Длинный текст | Содержимое статьи |
DATETIME |
Дата и время | 2024-01-15 14:30:00 |
BOOLEAN |
Да/нет | true, false |
Несколько таблиц — связи
В блоге нужны минимум две таблицы:
┌──────────────────┐ ┌──────────────────┐
│ users │ │ posts │
├──────────────────┤ ├──────────────────┤
│ id (PK) │◄────┐ │ id (PK) │
│ username │ │ │ user_id (FK)─────┤
│ email │ │ │ title │
│ password │ │ │ content │
│ created_at │ └───│ created_at │
└──────────────────┘ └──────────────────┘
Внешний ключ (Foreign Key)
user_id в таблице posts — это внешний ключ. Он указывает на id в таблице users.
Это означает: "у каждого поста есть автор, и автор — это пользователь из таблицы users".
Пример данных:
| users | ||||
|---|---|---|---|---|
| id | username | |||
| 1 | admin | admin@blog.ru | ||
| 2 | ivan | ivan@mail.ru | ||
| posts | ||||
|---|---|---|---|---|
| id | user_id | title | ||
| 1 | 1 | Привет, мир! | ||
| 2 | 1 | Второй пост | ||
| 3 | 2 | Мой первый пост | ||
Посты 1 и 2 написаны пользователем admin (user_id=1).
Пост 3 написан пользователем ivan (user_id=2).
Почему не хранить всё в файлах?
Можно сохранить данные в JSON-файл:
{"users": [{"id": 1, "name": "Иван"}, ...]}
Проблемы:
- Конкурентный доступ: если два пользователя одновременно редактируют — данные испортятся
- Скорость: чтобы найти одного пользователя, нужно прочитать весь файл
- Размер: файлы в гигабайт работают очень медленно
- Связи: сложно связать разные типы данных
База данных решает все эти проблемы.
✅ Что такое база данных и зачем она нужна
✅ Что такое таблицы, столбцы, строки
✅ Что такое первичный и внешний ключи
В следующем уроке познакомимся с phpMyAdmin — удобным инструментом для работы с базой данных.