JPJ*_*edi 9 data-binding database-design
哪种方式最好将销售信息存储在数据库中:
存储每个项目的所有单个详细信息,因为您以后通常需要它们(出于统计/信息目的或任何其他原因).您必须确保始终遵循相同的计算逻辑来获得总销售价格.所以你可能需要存储货币,折扣,价格单位等等.这里还有一些要考虑的要点:
如果您想稍后输出单个物料价格,则需要单个物料数据.
不要将总价格与单项数据一起保存,因为您必须始终保持同步.一个月/几年后你会感到困惑,关于哪一个用于计算.
如果您在数据仓库中使用数据并且不需要详细信息,请汇总数据.
这是第3个Normal Form问题.
选项1采用第3范式.没有派生数据.必须为每个查询进行计算.因此,可以在任何字段上进行更新而不会破坏任何内容.
选项2打破第3范式.它保存派生数据.计算不是在查询时完成的,因此更快.但是,不会重做计算的更新将导致数据不一致.这被称为"更新异常".更新导致派生数据字段不一致.
此外 - 根据计算 - 当需要更改派生数据时,可能无法推断出哪些字段应该更改.
我想说你总是将成本和价格存储为单独的列并存储总计。总有一天,你需要那些你会后悔的细分(报告、发票)。
如果您也存储计算值,问题就真的变成了。这实际上取决于应用程序的情况(有多少行、多少事务等)。如果它是中小型应用程序,它可能对性能并不重要,所以这只是其他因素的问题。
如果总计的公式可能变得更加复杂(例如税费、折扣等),您可能需要存储总计。否则,在其他领域复制这种逻辑可能会非常困难。
我个人也总是存储总量。我只是发现额外的数据库列的成本总是被其他地方的总成本所抵消。