产品数据库的多个版本

问题描述 投票:2回答:3

我知道有很多同样令人担忧的问题,但我已经回答了很多问题,但不幸的是我听不懂或可能不满意。

目标我希望我的产品可以具有多个属性,并根据它们的组合可以具有其价格,sku和库存

示例T型粪便产品具有尺寸,颜色和材料属性(选项)

所以我想要这个灵活的结构

颜色:红色,尺寸:M,材料:柔软->价格$ 1,sku XXX,库存3颜色:红色,尺寸:L,材料:柔软->价格$ 2,sku 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

但是它不能反映我是否要存储颜色:红色尺寸:m有一个价格,sku和库存

谢谢

mysql database-design e-commerce database-schema entity-attribute-value
3个回答
0
投票

您应该尝试在产品表中输入价格,库存和库存字段。每个唯一产品都具有这些字段中的一个,并且都属于产品表。 Please look at the sample db schema.


0
投票

您将把产品的主要信息和其他信息(尺寸/颜色)分成2个表。

产品(名称,说明等)-适用于所有规格相同的产品-例如,一定范围的袜子。“其系列”-不存储任何库存,将其视为空壳。.需要注意的是,您要区分产品的女士版和男士版,然后在此处为每个版本创建一个新产品。

ProductsQty

:这将列出产品的ID(上方),然后每个尺寸/颜色列中的每个变化都包含多行-如果您说3(尺寸,颜色,重量),则需要3例如行。(对于非衣服物品,则需要进一步走一步)-这将是产品的主要“规格”-即中型或大型(330毫升,200瓦),基本上决定了设备的基本尺寸,它可以毫升,毫米,英寸,克,瓦,伏特..您可以扩展此范围-请记住,产品类型将决定将两者分开的位置。衣服有颜色和尺寸,但油箱可能以升为主要区别,也可能是颜色-因此,您可以使用varchar列并输入任何单位,加仑,英尺(即使用matrix1,matrix2,matrix3作为更通用。)

您需要为每种颜色

尺寸增加一个新行。中号的蓝袜子与小号的蓝袜子是不同的产品。

主要功能差异应该是新产品-即,如果您的扬声器设置与其他型号相似,但又说-附加蓝牙,这将是新的顶级产品。.您必须精明何时拆分尺寸/颜色以及何时创建新产品。您的示例仅在第二张表中存储颜色/尺寸变化。

绑起来:

**示例产品:男士Sierra Dri羽绒服**

产品表

(ID,名称,说明):

221,男士Sierra DriDown全天候夹克,优质3季夹克bla bla bla

ProductsQty

(id,产品,大小,颜色,数量)

998,221,大,蓝色,22

999,221,大,黑色,4

如果您有多个商店,则可以在新表中使用ProductsQty id,并在其中具有每个子产品的storeid和qty。

您还可以将sku存储在任何一个表中-如果该家族具有相同的sku,将其存储在产品中,否则,将其放置在ProductsQty表中。

现在您可以搜索大小/颜色/ sku-希望这有意义。.

对不起,我没有答案。由于这个问题,我也很头疼。让我问:您有解决方案吗?您可以分享解决方法吗?


-1
投票

对不起,我没有答案。由于这个问题,我也很头疼。让我问:您有解决方案吗?您可以分享解决方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.