2012-03-05 44 views
5

我已经与十几个模板系统(Zen Cart,Cube Cart等)合作过。这些都有自己奇怪的方式来构建产品,选项和类别。所有的附加功能都会导致McGuyver的一堆卡片的情况,使得代码的工作量大大增加。产品,选项和类别最优雅的MySQL模式是什么?

所以六年前,我建立了自己的webstore引擎,这个引擎多年来一直在发展,并成为自己的一摞卡。现在我正在对发动机进行全面检修。虽然没有一个引擎将可满足所有网络存储器的需求,我想知道如果下面的模型有什么缺点,或是否有更好的方法来创建一个灵活的,标准化的,非厌恶的商业数据库:

enter image description here

注:
option_types =颜色,大小,材料
options =红色,白色,蓝色,S,M,L,棉,氨纶,皮革

不是省略对目的基本的东西其他(位置,活性等),任何人都可以看到一种改进方法?

+4

你制作了哪些软件? – mpm 2012-03-05 05:20:25

+0

为什么'item_categories'和'item_options'具有'id'属性而不是使'(category_id,item_id)'和'(item_id,option_id)'为主键? – 2012-03-05 05:22:46

+2

@camus http://ondras.zarovi.cz/sql/demo/ – neokio 2012-03-05 05:27:29

回答

3

这是我的笔记/意见。你错过了基数,但我会尽我所能来猜测它们。

  • Categories没问题。

  • item_categories删除id,因为您没有使用它。在category_id和item_id上创建一个复合主键。

给每个记录的唯一ID是在许多方面更聪明:更快地在一个领域比查找两个,安全删除等

你会怎么做查询上那个ID?您将运行的查询是:“获取项目的所有类别”和“获取所有项目的类别”。我不明白为什么删除会更安全。但是,我想说,添加一个id可能不安全,因为您可能有不同的ID,但category_id和item_id对相同。你必须有检查约束,确保对是唯一的(而不是什么的PK来?)

  • items是确定...(见下文评论)
  • 删除iditem_options(相同的情况下,上述的,看看下面的评论)
  • option_types是确定

现在,我觉得项和选项的方式是将需要更多的思考有关。这似乎是一个多对多的关系。作为一件商品,例如T恤可以有多种尺寸,所以说每件商品和选项都应该有不同的尺寸。但是,除了尺寸之外,如果还有不同的材料,例如棉花和皮革,会发生什么情况。您将不得不获得有关棉花S,棉花M,棉花L和皮革S,皮革M和皮革L的信息。这很有道理,因为我很确定他们都会有不同的价格和重量。但现在让我们为我们的T恤添加2种颜色。您必须为我们现在拥有的12种组合中的每一种添加价格和重量。

更何况,如果用户想看到物品的价格,他将不得不选择所有选项,直到他达到价格。我不知道应该如何做,因为我不知道这些要求。我只是抛出一个想法:你可以应用价格和重量变化超过基本价格和重量,这将是该项目的一部分。

只是临睡前一些未处理的想法:

  • option_types可能是某种层次
  • 的仔细一想,你会如何处理stock因为设计。你会有10件黑色T恤衫......但是你会有多少件黑色皮革T恤衫?这个数字如何与10个原始数字相关?
+0

我已更新图形以显示更多关于选项的内容......''option_sets'将为每个选项包含一个记录,例如“棉花,S,黑色”将是3条记录。 – neokio 2012-03-05 10:12:32

0

选项表我会在名称下添加值。即 黑色L 黑色M 黑色S 蓝色L 的Blue M 蓝S- 等 可以使用旋关闭以Mosty的想法。

相关问题