Несколько вариантов для базы данных продуктов

Я знаю, что есть много вопросов с таким же беспокойством, но я получил так много ответов, но, к сожалению, я не понял или, возможно, не удовлетворен.

Цель. Я хочу, чтобы у моих товаров могло быть несколько атрибутов, и в зависимости от их комбинации они могли иметь свою цену, артикул и наличие.

Пример Футболка имеет атрибуты (параметры) размера, цвета и материала.

поэтому я хочу эту гибкую структуру, которая

Цвет: Красный, Размер: M, Материал: Мягкий -> цена $ 1, артикул XXX, сток 3 Цвет: Красный, Размер: L, Материал: Мягкий -> цена 2 доллара, артикул XXX, сток 4 Цвет: Черный, Размер: XL, Материал: жесткий -> цена 3 $, sKu XXX, сток 4

Прямо сейчас у меня есть следующая структура, которая подходит, если указан только один атрибут (опция). Но он не подходит для вариаций (комбо).

Таблица товаров

CREATE TABLE `products` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `brand_id` int(11) DEFAULT NULL,
  `vendor_id` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `long_description` longtext COLLATE utf8_unicode_ci NOT NULL,
  `short_description` longtext COLLATE utf8_unicode_ci,
  `images` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `weight` decimal(8,2) NOT NULL,
  `discount` int(11) DEFAULT NULL,
  `discount_start` timestamp NULL DEFAULT NULL,
  `discount_end` timestamp NULL DEFAULT NULL,
  `status` tinyint(4) NOT NULL,
  `released_on` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Таблица параметров

CREATE TABLE `options` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Таблица Products_Options

CREATE TABLE `products_options` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL,
  `sku` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `option_id` int(11) DEFAULT NULL,
  `option_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `unit_price` decimal(8,2) NOT NULL,
  `available_stock` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Таким образом, таблица products_options может хранить продукты следующим образом

Color: Red -> price $1, sku xxx, stock 3
Size: M -> price $1, sku xxx stock 3

Но это не отражает, хочу ли я хранить цвет: красный размер: м по одной цене, артикулу и наличию.

Спасибо


person Raheel    schedule 15.11.2015    source источник
comment
Найдите тег EAV, который я добавил.   -  person Rick James    schedule 30.11.2015
comment
@Raheel, надеюсь, у тебя есть решение. Вы можете дать ответ?   -  person Sankalp Tambe    schedule 23.11.2016
comment
@SankalpTambe Я отказался от использования SQL   -  person Raheel    schedule 11.12.2016
comment
@RaheelKhan Надеюсь, у вас есть решение. Пожалуйста, дайте ответ. Заранее спасибо.   -  person Mitul Koradiya    schedule 21.07.2017
comment
@MitulKoradiya Извини, брат, я отказался от этого проекта. Должен ли я удалить этот вопрос или оставить его так, чтобы кто-то другой мог получить ответы ниже?   -  person Raheel    schedule 22.07.2017
comment
У тебя что-то есть?   -  person Oliver D    schedule 28.02.2021


Ответы (2)


Вам следует попробовать указать поля цены, артикула и запаса в таблице продуктов. Каждый уникальный продукт имеет ровно одно из этих полей и входит в таблицу продуктов. Просмотрите образец схемы базы данных.

person Ken L    schedule 16.11.2015
comment
Это не решает мою проблему, братан. Как можно запросить, например: получить все рубашки красного цвета и небольшого размера? - person Raheel; 17.11.2015

вы разделите основную информацию о продуктах и ​​другую информацию (размер / цвет) на 2 таблицы.

Товары (название, описание и т. д.) - это относится к товарам с одинаковыми характеристиками, например к определенному диапазону носков. Это "семейство" - в нем нет запасов. , рассматривайте это как пустую оболочку .. Важно отметить, что здесь вы должны различать, скажем, женские и мужские версии продукта и создавать здесь новый продукт для каждой ..

ProductsQty: в нем будет указан идентификатор продукта (см. выше), а затем будут столбцы размера / цвета с несколькими строками для каждого варианта - если вы скажете 3 (размер, цвет, вес), вам понадобится 3 ряда, например ... (чтобы пройти еще один шаг для предметов, не связанных с одеждой) - это будет основная "спецификация" продукта - т.е. средний или большой, или 330 мл, 200 Вт, в основном, что определяет базовый размер устройства, будь то мл, мм, дюймы, граммы, ватты, вольты ... Вы можете расширить это значение, имея в виду, что тип продукта будет определять, где разделить эти два. Одежда имеет цвета и размер, но топливный бак может иметь литр в качестве основного отличия и, возможно, цвет тоже, поэтому вы можете иметь столбец varchar и вводить любые единицы, галлоны, футы (я использую матрицу1, матрицу2, матрицу3, чтобы быть более общий ..)

Вам понадобится новая строка для каждого цвета и размера. Синие носки среднего размера отличаются от синих носков маленького размера.

Основные отличия в функциях должны быть связаны с новым продуктом - то есть, если у вас есть набор динамиков, который похож на другую модель, но имеет, скажем, - дополнительный Bluetooth, это будет новый продукт высшего уровня .. вы должны быть умны, когда разделяете размер / color и когда создавать новый продукт. Вы сохраняете только вариации цвета / размера во второй таблице для вашего примера.

Завязать:

** Пример продукта: мужская пуховая куртка Sierra Dri **.

Таблица товаров (идентификатор, название, описание):

221, мужская всепогодная куртка Sierra DriDown, качественная 3-х сезонная куртка bla bla

Кол-во товаров (идентификатор, товар, размер, цвет, кол-во)

998, 221, большой, синий, 22

999, 221, большой, черный, 4

Если у вас более одного магазина, вы должны использовать идентификатор ProductsQty в новой таблице и иметь там storeid и qty для каждого из подпродуктов.

вы также можете сохранить артикул в любой таблице - если в семействе есть такой же артикул, сохраните его в продуктах, если нет - поместите его в таблицу ProductsQty ..

Теперь вы можете искать по размеру / цвету / артикулу - надеюсь, это имеет смысл ..

person Fstarocka Burns    schedule 18.02.2016
comment
Спасибо за ответ, но мою проблему это не решает. Я тоже думал об этом решении, но что, если есть новый атрибут, например модель. Тогда вам нужно настроить таблицу базы данных, а я этого не хочу. - person Refilon; 18.03.2017