我目前有一个简单的基于PHP的购物车,但我需要添加一个新功能,以便每个尺寸都有一个独特的数量。例如,库存中可能有1个大型但有3个小型。
每种产品都有独特的产品代码,但有多种尺寸和颜色。目前表中有一个数量字段。我还需要能够在订购产品后减少数量。
为了灵活性,我目前将选项引用为数据库条目中的单个字段,该字段是json对象,看起来像这样:
{"colors":"Red,Blue","sizes":"S,M,L"}
这使我可以灵活地使用不同名称的多个选项,而无需在db中创建选项表。
我可以简单地将json对象扩展为:
{"colors":"Red,Blue","sizes":{"S":"1","M":"3","L":"0"}}
我担心这将导致我在未来发生不可预见的问题。我还担心在销售变得更加复杂之后做这种减量。
目前,我只需要更新产品代码匹配的位置并减少数量。通过上述更改,我必须检索产品信息,解码选项,查找大小和减少,然后更新数据库。这感觉太复杂了。
是否有更好的方法按尺寸处理产品数量?
答案 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
);
当然,第二个表不是联结表,但你明白了