Создаём базу данных для будущего блога
Сегодня мы с вами создадим базу данных для нашего будущего блога. Пока что она будет состоять только из двух таблиц – пользователи и статьи. Но этого уже будет достаточно для того чтобы начать работать с ней из 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', 'admin@gmail.com', '1', 'admin', 'hash1', 'token1', CURRENT_TIMESTAMP);
INSERT INTO `users` (`id`, `nickname`, `email`, `is_confirmed`, `role`, `password_hash`, `auth_token`, `created_at`) VALUES (NULL, 'user', 'user@gmail.com', '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.
Комментарии