复制店数据库设计

时间:2013-05-25 00:33:57

标签: database-design relational-database

我正在尝试设计一个数据库,并且想知道我的设计是否有任何意义。

我正在尝试为小型内部Copy Shop设计数据库,以跟踪订单和价格工作。我认为创建关系数据库是存储此信息的好方法。典型订单的几个例子是:

  • 订单#1:在普通的20磅8.5x11纸上装订100套7个B& W页和3页彩页
  • 订单#2:一张24“x 36”海报层压并安装在foamcore上

我开始研究的设计是这样的: database design

例如,我有:

  • 产品:{复印订单,海报}
  • 属性:{B& W页,彩页,套装,装订,纸张尺寸,纸张类型,海报尺寸}
  • 属性选项:{Staple Upper-Left,...,8.5x11,...,Plain 20lb,...,24“x 36”,...}

到目前为止,我认为这是合理的。我无法弄清楚的是如何添加定价配置文件。问题是属性选项的价格取决于其他属性选项,并且在每种情况下都不同。使用上面的例子:

  • 订单#1的价格:[普通8.5x11纸张上的B& W打印价格] x [B& W页数] + [普通8.5x11纸张上的彩色打印价格] x [彩页数量] ] + [套数] x [主食价格]
  • 订单#2的价格:[24x36海报层压和安装在泡沫铁芯上的价格] x [海报数量]

此外,我们为不同类型的客户收取不同的价格,因此我计划提供多种价格资料。

在关系数据库中有没有合理的方法呢?或者我应该以其他方式做到这一点?现有数据库的设计很差(几年前由我提供),并且大多数属性都是硬编码为字段名称,每个产品都有单独的表。因此,例如,paper_type是copy_orders表中的字段,poster_size是poster_orders表中的字段。我用代码来计算价格。我想设计一些更好,更灵活的东西。

我(显然)不是关系数据库的专家,所以任何建议都将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

通常的答案是“它取决于”。举个例子:

The price of Order #1: [price of B&W prints on plain 8.5x11 paper]x[number of B&W pages] + [price of color prints on plain 8.5x11 paper]x[number of color pages] + [number of sets]x[price of staples]

您需要有三个部分(或物品,或产品,或SKU):b& w在普通8.5X11纸张上打印,在普通8.5X11纸张和订书钉上打印彩色。这些部件中的每一个都有价格(这里存在一个问题,与保持价格历史相关并确保您获得每个部件的当前价格,但我现在将忽略它)。然后订单#1的价格变为

amount of part1 * price of part1 +
amount of part2 * price of part2 +
amount of part3 * price of part3

对于第二个示例,您必须定义一个名为“24x36海报层压并安装在foamcore上”的零件,然后定义其价格。

如果属性的成本可以分配一个百分比(例如彩色打印成本比b& w打印成本高25%[虽然现在可能是另一种方式]),那么你定义一个部分'平面打印' 8.5x11纸'并给它一个价格。在属性表中,添加“百分比额外价格”字段,并为属性“彩色打印”插入值25(或0.25或1.25,具体取决于您希望如何管理事物)。

对于客户来说,一种方法是定义每个客户从价目表中获得的恒定折扣。如果客户每个零件获得不同的折扣,那么您别无选择,只能定义一个包含三个字段的表 - 客户ID,零件ID和价格。

虽然这看起来很复杂,但最终还是最好的方式。