Php 使用多种项目变体构建电子商务数据库

Php 使用多种项目变体构建电子商务数据库,php,sql,database,data-structures,Php,Sql,Database,Data Structures,如果电子商务站点的每个项目都有多个变体,如何最好地组织我的SQL表?我经营着一家电子烟公司,所有的事情都是按照口味和强度来组织的。下面是我的SQL表的粗略模型: itemNum itemName itemPrice itemConc stockRemaining -------------------------------------------------- 1 Banana 10.99 0 5 2 Banana

如果电子商务站点的每个项目都有多个变体,如何最好地组织我的SQL表?我经营着一家电子烟公司,所有的事情都是按照口味和强度来组织的。下面是我的SQL表的粗略模型:

itemNum itemName itemPrice itemConc stockRemaining
--------------------------------------------------
   1     Banana    10.99      0           5       
   2     Banana    10.99      6           42
   3     Banana    10.99      12          12
   4     Banana    10.99      18          0
   5     Cherry    10.99      0           19
   6     Cherry    10.99      6           36
  ...     ...       ...      ...          ...
香蕉
樱桃
是口味,其中
0
6
12
18
是强项。当一个人向购物车中添加东西时,东西以两个数组存储在
$\u SESSION
数据中:
$productNumbers
$productamountries
,因此当有人向购物车中添加5个0强度的樱桃和2个18强度的香蕉时,以下内容被初始化:

$productNumbers[] = {5, 4};
$productQuantities[] = {5, 2};
然而,这是繁琐的管理和有太多的膨胀。当我认为它可以被优化时,我最终得到了每种味道四行。我最终需要为每个单独的项目/强度组合添加库存,而不仅仅是为一种口味添加库存;当我只需要其中的1/4时,我就有可能有数百行。我在想下面的事情:

itemNum itemName itemPrice zero six twelve eighteen
---------------------------------------------------
   1     Banana    10.99    0    1     5      2 
   2     Cherry    10.99    6    3     42     3
  ...     ...       ...    ...  ...    ...   ...
但我不确定如何最好地实现这一点。
itemPrice
右侧的列将是每种口味的个人强项的库存水平,但在考虑我的购物车系统时,我如何区分它们?这看起来非常有效,但是实现起来很麻烦。如果不使用多个阵列,我想不出一种方法可以让它正常工作:

$productNumbers[]; //itemNum
$zeroQty[]; //quantity order of zero
$sixQty[]; //quantity order of six
//etc

这意味着我需要初始化多个数组,即使它们可能不被使用。似乎我可以有一个迟钝的SQL结构,但只是一种简单的初始化方式,或者一个简单的SQL结构和一种迟钝的初始化方式。

你是关于设计还是实现的问题?(现在看来你两个都在问。)

您可以将香烟数据存储到两个表中

项目
(如果强度不影响价格,主键:itemNum):

itemStock
(主键:itemNum,itemConc):

现在,您可以轻松地检查每个项目的库存,并添加新的优势。如果每个强度的项目价格不同,您可以将其移动到itemStock表中。或者,如果您想控制不同香烟盒尺寸的颜色,请将其添加到新表中

你的购物车可以像Marc B建议的那样包含
(itemNum、itemName、itemPrice、strength)


这就是你要找的吗?

不要这样做<代码>(itemNum、itemName、itemPrice、strength)将是一种更好的方法。如果您最终得到了另一种口味,即
one
seven
eighty
,则必须向表中添加更多列,并浪费大量空间。通用强度字段可以让您拥有所需的任何强度。然后你为这些记录输入一个itemID字段,每种强度都有自己的自动ID,问题也得到了解决。我想你需要研究一下什么是数据规范化,这就是ZZ-bb实现的。
itemNum  itemName itemPrice
--------------------------
   1     Banana    10.99
   2     Cherry    10.99
itemNum  itemConc  stockRemaining
-------------------------------
   1     0         0
   1     6         5
   1     12        7
   1     18        25
   2     0         3
   2     6         10
...