Фильтры в интернет-магазине. Урок 1. Структура базы данных

август 8 , 2016
Предыдущая статья Следующая статья Демо Исходники

В первом уроке из серии статей, посвященных созданию фильтров в интернет-магазине, мы определимся, какие данные в базе нам нужны. Создадим нужные таблицы и заполним их тестовыми данными. Приступим


Какие данные нам нужны

Почти всю нужную информацию мы узнали из предыдущей вводной статьи. Нам нужна таблица товаров, которая содержит стандартный набор: артикул - он же ключ таблицы (автоинкремент), название, цену (для простоты пусть будет целое число). Рейтинг или популярность, условимся, что это будет целое число от 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: урок про структуру проекта и верстку опубликован

Все об интернет-магазинах

Предыдущая статья Следующая статья Демо Исходники
Заходите в группу в контакте - https://vk.com/webdevkin
Анонсы статей, обсуждения интернет-магазинов, vue, фронтенда, php, гита.
Истории из жизни айти и обсуждение кода.
Как Вам статья? Оцените!