用于跟踪客户订单系统中的变更单的表设计?

时间:2012-08-15 02:33:11

标签: database-design

我正在为大型商业建筑项目的项目管理订购系统设计表格。输入客户订单时,客户具有原始采购订单。在此过程中,客户将通过添加订单或进行更改来更改原始采购订单。我需要标记/跟踪这些更改并将其编号为客户订单上的变更单,但原始订单需要在订单的顶部保持完整及其小计(以保留原始报价/订单),以及任何更改以下列出的相关定价变更。然后会在底部有一个新的总计,它将考虑原始订单和变更单。

关于如何设计表格以跟踪原始订单商品/总数之间的这些更改,我有哪些想法?

到目前为止,我有表格:客户,订单,订单详情,产品等。

编辑:希望澄清:

  • 客户下订单(订单表:OrderID,PO#,OrderDate等)
  • 订单包含一到多个订单项(OrderDetail表格:LineID,数量, 描述等)
  • 订单可以包含一到多个订单更改。
  • 订单更改只是在订单中添加订单项,每个订单 需要记录更改(一个或多个行项目)(例如 “更改订单#1”,“更改订单#2”等,以便它们可以 客户和我的客户之间很容易引用。

订单下达后,如果客户想要稍后添加订单,我会看到向OrderDetail表添加附加行项目。

所以我的客户需要能够查找:

  • 原始订单上有哪些商品,原始订单是什么 总。
  • 每次更改都会对订单进行“更改订单” 订购有自己的日期和价格。
  • 新订单总数

我的问题是,我可以将更改订单行项目放在同一个表格或不同的表格中吗?如何显示原始订单的一部分?如何显示每个变更单的哪些项目?

最好使用另一张或两张桌子吗?

编辑:可能的解决方案
@Darklantern - 如果我理解你的想法,请告诉我,它会是这样的

初始订单:
Order Header:
- Version = 1

Order Detail:
- Version = 1 Part = A
- Version = 1 Part = B

添加更改订单后的订单:
Order Header:
- Version = 2

Order Detail:
- Version = 1 Part = A
- Version = 1 Part = B
- Version = 2 Part = A
- Version = 2 Part = B
- Version = 2 Part = C

这会很棒,但是我要追踪的只是原始订单的一部分,只是版本1的一部分,等等。您的想法看起来不错,但不会清楚地显示“版本2 B部分”是否已编辑或并非没有将它与“版本1 B部分”进行比较。

我把你的想法更进了一步。它会起作用,或者我没有看到什么缺陷:

初始订单:
Order Header:
- Date, etc

Order Detail:
- Version = 0 Part = A
- Version = 0 Part = B

多次订单更改后的订单:
Order Header:
- Date, etc

Order Detail:
- Version = 0 Part = A
- Version = 0 Part = B
- Version = 1 Part = C
- Version = 1 Part = B Upgraded to D (price is the difference between B and D
- Version = 2 Part = A removed (price is a negative amount)

那么关注的是报道的简单程度如何?打印采购订单或发票时,是否可以使用自己的组标题和小计列出每个“版本”?因为很多时候每个“版本”都有自己的批量定价。

我是在正确的轨道上,还是走在兔子路上?

3 个答案:

答案 0 :(得分:0)

您的问题过于宽泛,您可能希望准确指定您想要实现的目标。例如,是否要为修改的项目输入新行,然后请求最新的行版本,或者您是否只需要1行(根据需要修改此行),然后将更改信息放入审计表中(前端编码) )。在网上查找可能有助于您设计的ERD,我相信这个概念并不新鲜。检查Northwind / Pubs示例数据库以获取一些想法。

答案 1 :(得分:0)

嗯......我应该买新眼镜。我建议将订单项留在一个表中。将OrderNumber添加到Order和Line项目,当一个项目被取代时,将所有项目(包括new)增加到新版本(将被取代的项目保留为其原始版本)。最终订单将具有标题版本=匹配的订单项版本。这更容易报告。

您可以通过使用tblOrderVersion来标准化,使用(Ident,Orderid,VersionNumber),其中该行将使用当前版本号进行更新。这将允许您跟踪订单的每次迭代。如果表格太大,将冗余数据移除到另一个表格中可以很简单,您可以将其合并以获取所需的报告。我希望我帮助过一点点。此外,我认为在没有解释的情况下向某人投票是无礼的。 (顺便说一下,我向你投票)。

答案 2 :(得分:0)

你的第一个例子正是我的想法。我看到你的第二个样本是一个很好的变化,但报告的更复杂。客户是否看到发票/订单中的所有内容,包括所有更改?或者您是仅将此分组用于管理,管理报告工具?您是否正在为每个版本创建模拟发票,或者您想以分类帐样式格式演示整个订单。从报告中思考(您不会说哪个工具用于报告)的观点,第一个“版本”更简单,您可以按订单明细/产品列出,以便进行快速比较。您可以为每个版本创建小计。您当然可以创建按版本分组的发票/报表,但是如何在每个组中混合来自不同版本的项目,这对于脚本来说可能很复杂。我会更多地考虑这一点。当然,如果你能够编写脚本,那么版本2可能更好。