购物车数据库设计:按尺寸添加数量的功能

时间:2015-10-18 17:28:32

标签: php mysql shopping-cart

我目前有一个简单的基于PHP的购物车,但我需要添加一个新功能,以便每个尺寸都有一个独特的数量。例如,库存中可能有1个大型但有3个小型。

每种产品都有独特的产品代码,但有多种尺寸和颜色。目前表中有一个数量字段。我还需要能够在订购产品后减少数量。

为了灵活性,我目前将选项引用为数据库条目中的单个字段,该字段是json对象,看起来像这样:

{"colors":"Red,Blue","sizes":"S,M,L"}

这使我可以灵活地使用不同名称的多个选项,而无需在db中创建选项表。

我可以简单地将json对象扩展为:

{"colors":"Red,Blue","sizes":{"S":"1","M":"3","L":"0"}}

我担心这将导致我在未来发生不可预见的问题。我还担心在销售变得更加复杂之后做这种减量。

目前,我只需要更新产品代码匹配的位置并减少数量。通过上述更改,我必须检索产品信息,解码选项,查找大小和减少,然后更新数据库。这感觉太复杂了。

是否有更好的方法按尺寸处理产品数量?

1 个答案:

答案 0 :(得分:0)

我永远不会在嵌入大小/数量的单个产品行中保存字符串或json块。

我会选择产品表。

然后使用带有大小列和数量列的productId的Junction表。

架构理念:

create table Products
(   prodId int auto_increment primary key,
    prodName varchar(100) not null
);

create table ProductQuantities
(   -- table to store quantities for Product/Sizing combos
    id int auto_increment primary key,
    prodId int not null,
    size varchar(10) not null,
    quantity int not null,
    constraint foreign key (prodId) references products(prodId),
    key(prodId),
    unique key (prodId,size) -- maintains sanity for no duplicates at the combo level, plus a general index
);

当然,第二个表不是联结表,但你明白了