我正在建立一个平台,供应商可以添加产品,商店所有者可以将这些产品'复制'并出售。
供应商可以创建产品,他可以向其添加各种属性,例如尺寸,颜色。
当商店想使用供应商的产品之一时,他可以选择要提供的属性。例如,如果供应商提供3种尺寸的T恤。该商店可以选择只有2种尺寸的T恤。
所以我有一个看起来像这样的 products 表。供应商在此处添加产品。
+----+-------------+-------+
| id | description | price |
+----+-------------+-------+
| 1 | T-Shirt | 10 |
| 2 | Car | 100 |
+----+-------------+-------+
我有一个产品属性表,该表也由供应商
填充+------------+-------------+------------------------------+
| product_id | description | options |
+------------+-------------+------------------------------+
| 1 | size | ["small", "medium", "large"] |
| 1 | color | ["white", "black"] |
+------------+-------------+------------------------------+
商店side
当商店老板想要产品时。我在Shop_products表中记录了记录,引用哪个商店想要什么产品,并添加可选图像,如下
+---------+------------+-----------+
| shop_id | product_id | image |
+---------+------------+-----------+
| 1 | 2 | image.jpg |
| 1 | 3 | image.jpg |
+---------+------------+-----------+
现在剩下的唯一问题是:我如何确保商店可以选择他想要的属性。
- 我应该创建一个shop_product_attributes表..但是我不能在多个角度上建立关系,因为它没有ID?
如果可能会更改您的数据库结构,我会这样做,我知道它对您拥有的东西有所改变,但我认为您必须将产品视为一个产品关系,这是因为尽管T恤是一种产品,但实际的T恤黑色介质与T恤黑色的产品完全不同,您的供应商几乎可以肯定会以这种方式推荐它们
您的产品表看起来像这样,但它不是您的主要表参考产品,这是产品将具有的通用内容,例如描述或名称
+----+-------------+-------+-----------+-------------+
| id | name | price | image | description |
+----+-------------+-------+-----------+-------------+
| 1 | Super-T | 10 | image.jpg | some text |
| 2 | Focus | 100 | image.jpg | some text |
+----+-------------+-------+-----------+-------------+
您的主表将是SKU表,如果您有任何SKU特定的东西,请将它们放在这里
+----+-------------+------------+--------------+
| id | sku | product_id | category |
+----+-------------+------------+--------------+
| 1 | p1-cb-m | 1 | t-shirt |
| 2 | p2-cb-s | 2 | t shirt |
+----+-------------+------------+--------------+
然后有一个attributes_sku表,这将把sku链接到属性
+---------------+--------------+
| sku_id | attribute_id |
+---------------+--------------+
| 1 | 1 |
| 1 | 2 |
+---------------+--------------+
归一化的属性
+----+-------------+------------+
| id | type | name |
+----+-------------+------------+
| 1 | color | black |
| 1 | size | medium |
+----+-------------+------------+
购物sku桌
+---------+------------+
| shop_id | sku_id |
+---------+------------+
| 1 | 1 |
| 1 | 2 |
+---------+------------+
这是您可以做的优点 foreach $shop->skus where category = t-shirt
显示所有T恤
然后您可以做$ skus-> product->名称 $skus->product->attribute->name
或更好的设置SKU模型上的关系以说为颜色$this->attribute->where('type', color)
;
注意一个小笔记我会通过拥有类别和类型表进一步将其归一化,因此您的属性类型实际上是与类型表的属于属于关系的type_id,而您的SKU类别将是类别_id,与类别表,将来,如果您类别或类型决定更改名称,则不必编辑1000张记录等
实际上,您可以在 shop_product_attributes table。
由于您的产品属性表具有2个字段的复合键:[product_id,description]
,您的多次关系关系将具有三元键-[shop_id,product_id,description]
,其中[product_id,description]
用作参考外键也。