Фильтры в интернет-магазине. Урок 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 для начинающих. Докеризуем интернет-магазин
Истории из жизни айти и обсуждение кода.