Фильтры в интернет-магазине. Урок 1. Структура базы данных
В первом уроке из серии статей, посвященных созданию фильтров в интернет-магазине, мы определимся, какие данные в базе нам нужны. Создадим нужные таблицы и заполним их тестовыми данными. Приступим
Какие данные нам нужны
Почти всю нужную информацию мы узнали из предыдущей вводной статьи. Нам нужна таблица товаров, которая содержит стандартный набор: артикул - он же ключ таблицы (автоинкремент), название, цену (для простоты пусть будет целое число). Рейтинг или популярность, условимся, что это будет целое число от 1 до 10. Значения мы проставим в базе руками и фото - название файла с фото товара. Отдельно будут 2 поля - категория товара и бренд. Опять-таки для упрощения условимся, что каждый товар может принадлежать только одной категории. Бренд у товара тоже один. Бренды и категории вынесем в отдельные таблицы. В основной таблице с товарами будем хранить только айдишники категорий и брендов.
Чтобы было чуть нагляднее, ниже скриншот из dbForgeStudio - таблица товаров с заполненными данными
Создаем нужные таблицы
Сначала вспомогательные таблицы категорий и брендов.
create table categories(
id int(10) unsigned not null auto_increment,
category varchar(255) not null,
primary key (id)
)
engine = innodb
auto_increment = 4
avg_row_length = 5461
character set utf8
collate utf8_general_ci;
create table brands(
id int(10) unsigned not null auto_increment,
brand varchar(255) default null,
primary key (id)
)
engine = innodb
auto_increment = 7
avg_row_length = 2730
character set utf8
collate utf8_general_ci;
Как видим, обе таблицы крайне просты - id и название ккатегории или бренда. Теперь таблица товаров.
create table goods(
id int(10) unsigned not null auto_increment,
good varchar(255) not null,
category_id int(10) unsigned not null,
brand_id int(10) unsigned not null,
price int(11) unsigned not null,
rating int(11) unsigned not null default 0,
photo varchar(255) not null,
primary key (id),
index FK_goods_brands_id (brand_id),
index FK_goods_categories_id (category_id),
constraint FK_goods_brands_id foreign key (brand_id)
references brands (id) on delete cascade on update cascade,
constraint FK_goods_categories_id foreign key (category_id)
references categories (id) on delete cascade on update cascade
)
engine = innodb
auto_increment = 15
avg_row_length = 1170
character set utf8
collate utf8_general_ci;
Полей больше, но тоже ничего сложного. category_id и brand_id указываем внешними ключами для сохранения целостности данных. А теперь заполним таблицы тестовыми данными.
Заполняем их данными
Пусть у нас будет 3 категории
INSERT INTO categories VALUES
(1, 'Ноутбуки'),
(2, 'Смартфоны'),
(3, 'Видеокарты');
6 брендов
INSERT INTO brands VALUES
(1, 'Apple'),
(2, 'Samsung'),
(3, 'Acer'),
(4, 'Lenovo'),
(5, 'Asus'),
(6, 'Gigabyte');
и 14 товаров
INSERT INTO goods VALUES
(1, 'Ноутбук Apple MacBook Air', 1, 1, 60000, 8, 'apple_macbook_air.jpg'),
(2, 'Ноутбук Apple MacBook Pro', 1, 1, 70000, 9, 'apple_macbook_pro.jpg'),
(3, 'Ноутбук Lenovo IdeaPad', 1, 4, 17000, 5, 'lenovo_idea_pad.jpg'),
(4, 'Ноутбук Lenovo G5030', 1, 4, 16000, 7, 'lenovo_g5030.jpg'),
(5, 'Ноутбук Acer Aspire', 1, 3, 21000, 8, 'acer_aspire.jpg'),
(6, 'Смартфон Samsung Galaxy A7', 2, 2, 30000, 9, 'samsung_galaxy_a7.jpg'),
(7, 'Смартфон Samsung Galaxy A5', 2, 2, 17000, 8, 'samsung_galaxy_a5.jpg'),
(8, 'Смартфон Apple iPhone SE', 2, 1, 38000, 10, 'apple_iphone_se.jpg'),
(9, 'Смартфон Asus Zenfone Laser', 2, 5, 12000, 6, 'asus_zenfone_laser.jpg'),
(10, 'Смартфон Lenovo A5000', 2, 4, 11000, 3, 'lenovo_a5000.jpg'),
(11, 'Смартфон Lenovo P90', 2, 4, 16000, 5, 'lenovo_p90.jpg'),
(12, 'Видеокарта ASUS', 3, 5, 2000, 8, 'asus_video.jpg'),
(13, 'Видеокарта GIGABYTE GT-740', 3, 6, 6000, 9, 'gigabyte_video_gt740.jpg'),
(14, 'Видеокарта GIGABYTE GTX-960', 3, 6, 14000, 10, 'gigabyte_video_gtx960.jpg');
Все файлы с картинками найдете в архиве с исходниками, папка goods.
P.S. Исходники пока не выкладываю, они будут после публикации всех уроков этой серии.
Следующий урок про структуру проекта и базовую верстку готовится к публикации. За обновлениями и выходом следующих статей следите здесь на сайте или в твиттере @webdevkin15
UPDATED: урок про структуру проекта и верстку опубликован
Все об интернет-магазинах
- Демо интернет-магазина
- Корзина интернет-магазина. С чего все началось
- Оформляем заказ на клиенте и сервере
- Добавляем доставку
- Фильтры и сортировки на клиенте и сервере
- Урок 0. Вводный
- Урок 1. Структура базы данных
- Урок 2. Структура проекта и верстка
- Урок 3. Сбор данных на клиенте и отправка на сервер
- Урок 4. Пишем базовый php-код и sql-запросы
- Урок 5. Прием данных с сервера и рендеринг на клиенте
- Урок 6. Заключительный, дорабатываем некоторые штрихи
- Сравнение товаров
- Постраничная навигация по товарам
- Преобразуем каталог, переключаем внешний вид товаров одной кнопкой
- Отправка sms при оформлении заказа
- Админка интернет-магазина на vue.js - серия уроков
- Авторизация на сессиях. Делаем логин в админке
- Docker для начинающих. Докеризуем интернет-магазин
Истории из жизни айти и обсуждение кода.