这不是关于特定技术问题的问题,而是关于数据库设计的一般问题。尽管如此,技术栈是:ASP.NET MVC、SQL DB。
我最近继承了一个系统,它有一个订单-->订单项目-->产品概念,即一个订单有很多订单项目,每个订单项目都与一个产品相关联。
订单项在保存到数据库时存储以下内容:
- 订单编号
- 产品编号
- 数量
- 单位成本(从产品写入)
- 总净值(根据数量 * 单位成本计算)
- 增值税
- 总毛额
通过 UI 查看的 Order Item 如下所示:
Qty | ProdCode | ProdDescription | Unit Cost | Total NET | VAT | Total Gross
数量、单位成本和总计都从订单项目中拉到 UI 中,产品代码和产品描述从关联的产品记录中拉出。
一切似乎都足够明智。
所以我的问题围绕着应该从产品中写入哪些数据与应该从产品中引用哪些数据。具体来说,单位成本是在创建订单项目时从产品中写入的。我认为这是因为产品价格发生了变化,而您不希望这种变化适用于旧订单。很好,有道理。
我的问题是:同样的逻辑也应该适用于产品代码和产品描述吗?如果没有,为什么不呢?
在我看来,产品代码和描述似乎也应该写入订单项目,即产品代码和描述与产品单位成本一样容易发生变化。在这种情况下,如果您要返回查看旧订单,订单上的产品代码和描述似乎与最初订购的不同,这对我来说似乎是错误的。
构建系统的开发人员不再可以讨论他设计系统时的想法。
该系统运行良好,没有任何投诉。然而,这主要是因为产品代码/描述从未有任何更新,即使它们可供各种用户编辑。
在我进行大规模更改之前,我很想听听人们对此的想法,这是一种常见的情况吗?我什么都不担心吗?