Создаём базу данных для будущего блога

Сегодня мы с вами создадим базу данных для нашего будущего блога. Пока что она будет состоять только из двух таблиц – пользователи и статьи. Но этого уже будет достаточно для того чтобы начать работать с ней из PHP. Поехали!

Этот и дальнейшие уроки предполагают, что вы имеете базовые представления о работе с базой данных MySQL. Если же нет – пройдите наш бесплатный курс MySQL с нуля, прежде чем идти дальше.

Итак, в первую очередь давайте создадим новую базу данных для нашего приложения. Если у вас как и у меня установлен OpenServer, то все действия будут такими же. Иначе – сами мучайтесь :D.

Открываем phpMyAdmin http://127.0.0.1/openserver/phpmyadmin/server_databases.php и открываем вкладку «Базы данных». Вводим имя нашей новой базы - my_project, и выбираем сравнение utf8_general_ci.

Таблица пользователей

Давайте теперь создадим таблицу с пользователями. Назовём её users и создадим в ней следующие поля:

  • id с типом INT и типом AUTO_INCREMENT – это id пользователя
  • nickname c типом VARCHAR, длиной в 128 символов и уникальным индексом – чтобы никнейм мог принадлежать только одному пользователю и не было дублей
  • email c типом VARCHAR, длиной в 255 символов и уникальным индексом – чтобы один email можно было использовать лишь единожды
  • is_confirmed с типом BOOLEAN – подтверждён ли email (по умолчанию - false)
  • role с типом ENUM и двумя возможными значениями – admin и user. Здесь будем хранить тип пользователя.
  • password_hash с типом VARCHAR и длиной в 255 символов – тут будем хранить хеш пользовательского пароля
  • auth_token с типом VARCHAR и длиной в 255 символов – тут будем хранить авторизационный токен, мы пока не изучали что это такое, пока просто добавим, позже пригодится
  • created_at с типом DATETIME – тут будет храниться дата и время создания пользователя. По умолчанию в качестве значения будет использоваться CURRENT_TIMESTAMP – то есть текущие дата и время.

структура таблицы пользователей

Запрос для создания таблицы:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `nickname` varchar(128) NOT NULL,
  `email` varchar(255) NOT NULL,
  `is_confirmed` tinyint(1) NOT NULL DEFAULT '0',
  `role` enum('admin','user') NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `auth_token` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `nickname` (`nickname`),
  ADD UNIQUE KEY `email` (`email`);

ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Давайте теперь добавим пару пользователей: админа и простого пользователя. Для этого выполним запрос:

INSERT INTO `users` (`id`, `nickname`, `email`, `is_confirmed`, `role`, `password_hash`, `auth_token`, `created_at`) VALUES (NULL, 'admin', '[email protected]', '1', 'admin', 'hash1', 'token1', CURRENT_TIMESTAMP);
INSERT INTO `users` (`id`, `nickname`, `email`, `is_confirmed`, `role`, `password_hash`, `auth_token`, `created_at`) VALUES (NULL, 'user', '[email protected]', '1', 'user', 'hash2', 'token2', CURRENT_TIMESTAMP);

Зайдём в нашу табличку users и убедимся в том, что появилось 2 новых записи.

Записи о пользователях

Таблица для статей

Теперь давайте создадим таблицу «articles» для будущих статей.
Определяем следующие столбцы:

  • id с типом int и типом AUTO_INCREMENT (A_I) – id самой статьи;
  • author_id с типом int – это id автора статьи;
  • name c типом VARCHAR и длиной 255 – название статьи;
  • text с типом TEXT – текст статьи;
  • created_at с типом DATETIME – тут будет храниться дата и время создания статьи. По умолчанию в качестве значения будет использоваться CURRENT_TIMESTAMP – то есть текущие дата и время.

Создание таблицы для статей

Жмем «вперед» и получаем следующую картину:

Структура таблицы со статьями

Запрос для создания таблицы:

CREATE TABLE `articles` (
  `id` int(11) NOT NULL,
  `author_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `articles`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `articles`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Ну и давайте добавим парочку новых статей. Выполним следующие запросы:

INSERT INTO `articles` (`id`, `author_id`, `name`, `text`, `created_at`) VALUES (NULL, '1', 'Статья о том, как я погулял', 'Шёл я значит по тротуару, как вдруг...', CURRENT_TIMESTAMP);
INSERT INTO `articles` (`id`, `author_id`, `name`, `text`, `created_at`) VALUES (NULL, '1', 'Пост о жизни', 'Сидел я тут на кухне с друганом и тут он задал такой вопрос...', CURRENT_TIMESTAMP);

Зайдём в табличку и полюбуемся на новые записи.

Записи о статьях

Вот и всё – мы создали простейшую базу данных для блога и даже добавили в неё несколько записей. В следующих уроках мы будем работать с неё с помощью PHP.

Текущее состояние проекта на гитхабе. Дамп базы в файле dump.sql.

loader
Логические задачи с собеседований