Подскажите как правильно спроектировать БД интернет-магазина для работы с прайс листами от разных поставщиков ?
К примеру есть два поставщика (Поставщик_1 и Поставщик_2)
Ихние прайсы выглядают так:
Поставщик_1
| | | | Count |
| SKU | Brand | Price | Kiev | Lviv | Vinnitsa |
|-----------|----------|---------|-------|------|----------|
| 335809 | KYB | 2000.33 | 2 | 1 | 0 |
| N5524011G | NIPPARTS | 1096.40 | 3 | 1 | 0 |
| RC133 | GATES | 181.18 | 5 | 2 | 0 |
| AL 104190 | ALKO | 776.62 | 0 | 2 | 4 |
| | | | | | |
Поставщик_2 (Указывает цены в USD) и дает курс к грн (1USD = 28UAH)
| SKU | Brands | Price USD | Kiev_1 | Kiev_2 | Lviv | Vinnitsa |
|-----------|----------|-----------|--------|--------|------|----------|
| | | | | | | |
| 335809 | KAYABA | 71,89 | 1 | 8 | 1 | 2 |
| N5524011G | NIPPARTS | 38,93 | 1 | 3 | 1 | 0 |
| RC133 | GATES | 6,29 | 11 | 0 | 2 | 7 |
| AL 104190 | AL-KO | 27,75 | 7 | 2 | 2 | 1 |
Так как у разных поставщиков разные названия брендов, собрал базу псевдонимов
-- ----------------------------------
-- Бренды (Производители)
-- ----------------------------------
CREATE TABLE brands (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(64),
PRIMARY KEY (`id`),
CONSTRAINT unique_brands_name UNIQUE (name)
) ENGINE=MyISAM;
-- Псевдонимы брендов
CREATE TABLE brands__aliases (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
brands_id INT(10) UNSIGNED NOT NULL,
name VARCHAR(100),
PRIMARY KEY (`id`),
CONSTRAINT unique_brands_and_aliases_name UNIQUE (brands_id,name),
CONSTRAINT FK_brands_aliases_bid FOREIGN KEY (`brands_id`) REFERENCES brands(`id`)
) ENGINE=MyISAM;
Сайт с поддержкой мультиязычности, "Категории товаров:"
-- Мультиязычность
CREATE TABLE language (
id TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL,
iso_code CHAR(2) NOT NULL COMMENT 'ISO 639-1',
status BOOLEAN DEFAULT TRUE, -- Отображаэмость на сайте
PRIMARY KEY (`id`),
CONSTRAINT unique_languages_iso_code UNIQUE (iso_code),
CONSTRAINT unique_languages_name UNIQUE (name)
) ENGINE=MyISAM COMMENT='по стандарту ISO-639-1';
-- Категории товаров
-- Создаём структуру, дерева, какой оно является в режиме AL
CREATE TABLE category (
id INT(10) UNSIGNED AUTO_INCREMENT,
image VARCHAR(128) NULL DEFAULT NULL,
top BOOLEAN DEFAULT FALSE COMMENT 'Популярная',
status BOOLEAN DEFAULT TRUE COMMENT 'Отображаемый',
parent_id INT(10) UNSIGNED NULL DEFAULT NULL COMMENT 'Номер родителя', -- Идентификатор родительского узла
-- NS колонки (Nested Sets)
left_key INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Левый ключ', -- Точка отсчета начала ветки
right_key INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Правый ключ', -- Точка остановки конца ветки
level INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Уровень', -- Уровень узла (Количество родителей узла)
PRIMARY KEY (`id`),
INDEX categoryp_idx (`parent_id`),
INDEX categorylr_idx (left_key, right_key),
CONSTRAINT FK_category_parent_id_id FOREIGN KEY (`parent_id`) REFERENCES category(`id`)
) ENGINE=MyISAM COMMENT='модель Nested Sets';
-- Мультиязычность категории
CREATE TABLE category__translation (
category_id INT(10) UNSIGNED NOT NULL,
language_id TINYINT(3) UNSIGNED NOT NULL,
name VARCHAR(128) NOT NULL,
description MEDIUMTEXT,
meta_description VARCHAR(255),
meta_keyword VARCHAR(255),
PRIMARY KEY (`category_id`,`language_id`),
INDEX category_name_idx (`name`),
CONSTRAINT FK_category_сid FOREIGN KEY (`category_id`) REFERENCES category(`id`),
CONSTRAINT FK_category_lid FOREIGN KEY (`language_id`) REFERENCES language(`id`)
) ENGINE=MyISAM;
-- Todo: сделать таблицу в которой будут хранится изображения
На сайте цена товара будет калькулироваться от цен поставщиков
(Самая низкая с прайсов цена + наша наценка)
Также один товар может находится в нескольких категориях:
-- -----------------------
-- Товары (Продукты)
-- -----------------------
-- Таблица с продуктами
CREATE TABLE product (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
image VARCHAR(128) NULL DEFAULT NULL,
price DECIMAL(13,6) NOT NULL,
brand INT(10) UNSIGNED NOT NULL,
SKU VARCHAR(64) NOT NULL COMMENT 'Артикул товара',
PRIMARY KEY (`id`),
INDEX product_brand_idx (mpn_number,brand),
CONSTRAINT FK_product_brand_id FOREIGN KEY (`brand`) REFERENCES brands(`id`)
) ENGINE=MyISAM;
-- Связь (Товар - Категория)
CREATE TABLE product__category (
product_id INT(10) UNSIGNED NOT NULL,
category_id INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`product_id`,`category_id`),
CONSTRAINT FK_produc_category_pid FOREIGN KEY (`product_id`) REFERENCES product(`id`),
CONSTRAINT FK_produc_category_cid FOREIGN KEY (`category_id`) REFERENCES category(`id`)
) ENGINE=MyISAM;
Вопрос:
Так-же буду очень рад услышать другие советы и рекомендации...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты