Database design 在客户订单系统中跟踪变更单的表格设计?

Database design 在客户订单系统中跟踪变更单的表格设计?,database-design,Database Design,我正在为大型商业建筑项目的项目管理订购系统设计表格。输入客户订单时,客户拥有其原始采购订单。接下来,客户将通过添加订单或进行更改来更改原始PO。我需要将这些更改标记/跟踪并编号为客户订单上的变更单,但原始订单需要保留在订单顶部及其小计(以保留原始报价/订单)的完整位置,并且以下列出的任何更改将作为其相关定价的更改。然后在底部会有一个新的总数,用于说明原始订单和变更单 关于如何设计表格以跟踪这些与原始订单项目/总计分开的更改,我有什么想法 到目前为止,我有表格:客户、订单、订单详情、产品等 编辑:

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

关于如何设计表格以跟踪这些与原始订单项目/总计分开的更改,我有什么想法

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

编辑:希望澄清:

  • 客户下订单(订单表:OrderID、PO、OrderDate等)
  • 订单有一对多行项目(OrderDetail表:LineID、Qty、, 说明等)
  • 一个订单可以有一对多的订单更改
  • 订单更改只是将行项目添加到订单中,每个订单 变更(一个或多个行项目)需要记录(例如 “变更单#1”、“变更单#2”等),以便 客户和我的客户之间很容易参考
一旦下了订单,如果客户希望以后添加到订单中,我会看到向OrderDetail表添加添加行项目

因此,我的客户需要能够查找:

  • 原始订单上有哪些项目,原始订单是什么 总数
  • 每次变更时,对订单做出了哪些“变更单” 订单有自己的日期和价格
  • 新订单的总数是多少
我的问题是,我可以将变更订单行项目放在同一个表中,还是放在不同的表中?如何显示原始订单的一部分?如何显示每个变更单中的项目

最好换一张桌子还是两张桌子

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

初始订单:
订单标题:

-Version=1

订单详细信息:

-Version=1 Part=A

-Version=1 Part=B

添加变更单后的订单:
订单标题:

-Version=2

订单详细信息:

-Version=1 Part=A

-Version=1 Part=B

-Version=2 Part=A

-Version=2 Part=B

-Version=2 Part=C

这将是伟大的,但我要跟踪什么是原始订单的一部分,什么是版本1的一部分,等等。您的想法看起来不错,但如果不与“版本1 B部分”进行比较,就无法清楚地显示“版本2 B部分”是否被编辑

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

初始订单:
订单标题:

-日期等

订单详细信息:

-Version=0 Part=A

-Version=0 Part=B

多次订单更改后的订单:
订单标题:

-日期等

订单详细信息:

-Version=0 Part=A

-Version=0 Part=B

-Version=1 Part=C

-Version=1 Part=B升级到D(价格是B和D之间的差额

-Version=2 Part=A已删除(价格为负数)

接下来的问题是报告有多简单?在打印采购订单或发票时,我是否可以列出每个“版本”及其自己的组标题和小计?因为很多时候每个“版本”都有自己的批次定价


我是在正确的轨道上,还是偏离了正轨?

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

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


您可以通过使用(Ident、Orderid、VersionNumber)的TBLordServerVersion将其正常化该行将使用当前版本号进行更新。这将允许您跟踪订单的每个迭代。如果表太大,则可以简单地将冗余数据删除到另一个表中,您可以合并以获得所需的报告。我希望我已经提供了帮助,如果只是一点点。此外,我认为在没有支持的情况下对某人进行否决是不礼貌的解释。(顺便说一句,我不投你反对票).

您的第一个示例正是我所想的。我发现您的第二个示例是一个很好的变体,但报告起来更复杂。客户是否看到发票/订单中的所有内容,包括所有更改?或者您是否将其分组只是为了管理,一个管理报告工具?您是否打算为每个版本创建模拟发票或者你想用一个简单的例子来展示整个订单