0

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

我正在尝试为小型内部复印店设计一个数据库来跟踪订单和定价工作。我认为创建一个关系数据库将是存储这些信息的好方法。典型订单的几个例子是:

  • 订单 #1:100 套 7 张黑白页面和 3 张彩色页面,装订在 20 磅 8.5x11 普通纸上
  • 订单 #2:一张 24" x 36" 海报,层压并安装在泡沫芯上

我开始着手的设计是这样的: 数据库设计

例如,我有:

  • 产品:{复制订单,海报}
  • 属性:{黑白页、彩色页、套、装订、纸张尺寸、纸张类型、海报尺寸}
  • 属性选项:{Staple Upper-Left, ..., 8.5x11, ..., Plain 20lb, ..., 24" x 36", ...}

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

  • 订单 #1 的价格:[8.5x11 普通纸黑白打印价格]x[黑白页数]+[8.5x11 普通纸彩色打印价格]x[彩色页数]+[套数] x[订书钉的价格]
  • 订单 #2 的价格:[24x36 海报层压并安装在泡沫芯上的价格]x[海报数量]

此外,我们对不同类型的客户收取不同的价格,所以我计划有多个价格配置文件。

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

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

4

1 回答 1

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):在 8.5X11 普通纸上进行黑白打印,在 8.5X11 普通纸上进行彩色打印和订书钉。这些零件中的每一个都有一个价格(这里有一个与维护价格历史和确保您获得每个零件的当前价格有关的问题,但我现在将忽略它)。那么订单#1的价格变为

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

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

如果属性的成本可以指定一个百分比(例如,彩色打印成本比黑白打印高 25% [尽管现在可能是相反的方式]),那么您定义一个部件“在普通 8.5x11 纸上打印”和给它一个价格。在您的属性表中,您添加一个“百分比额外价格”字段并为属性“彩色打印”插入一个值 25(或 0.25 或 1.25,取决于您要如何管理事物)。

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

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

于 2013-05-27T07:27:43.153 回答