2016-10-04 52 views
0

我负责创建用于记录生产数据的数据库(我没有正式的数据库或SQL经验)使用Microsoft SQL我可以想到2种不同的方法构建我们记录的数据。
1:我可以记录每种材料的累加器当前值
2:我可以记录从最后一条记录产生的数量。数据库设置:记录增量或总值

有些背景知识,我们将每分钟记录一次信息,以追踪混合中使用的每种材料的产量和数量。

我们已经有报道显示,在一定的日期内,在一段时间内,印出的材料和混合物的数量是多少。

我想我的问题归结为在查询中求和值或搜索与材质/混合相关的最大值更快?

+0

您的询问对我来说不是很清楚,您能否详细说明 – TheGameiswar

+0

除非您解释数据的完整业务环境,否则像“累加器”,“混合”和“材料”等词语并不意味着什么。 –

+0

对不起,好吧,让我们假设我正在做柠檬水,我有3种成分,水糖,柠檬汁。我的组合将是柠檬水。我想知道跟踪哪些成分和使用量的最佳方法。但我必须假设柠檬水每天可以多次使用,而且不需要背靠背。和水可能在超过1混合。我所说的“累计器”总计了混合过程中使用的材料数量,并且当混合改变或机器停止时复位。所以我不一定会寻找最高的总用水量,因为总数将在一天中多次重置 – Neal

回答

0

如果记录包含净数量,那么在任何给定时间点查找数量肯定会更快。然后,当您想要查找数量时,您只需阅读一条记录 - 最新记录或相应日期和时间的记录 - 并选取数量。如果你存储了deltas,那么你必须从零开始将它们总结起来。另一方面,如果存在多个独立的变化来源和/或如果可能的变化被取消或颠倒,则存储“当前量”成为问题。如果交易不按顺序到达,或者旧的交易被修改或删除,会发生什么?

这是银行账户余额的典型例子。存款和提款可能来自多个来源,无法预测时间。我们经常想要按顺序发布交易。旧的交易可能会被取消。

例如:

1月1日:帐户以$ 1,000开启。余额= $ 1,000。

1月2日:存款300美元。余额= $ 1300。

1月3日:撤回$ 200。余额= $ 1100。

1月4日:检查用于1月2日存款反弹。反向存款。所以1月2日的余额变成了1000美元。但是1月3日的平衡呢?我们必须将其更新至800美元。

在现实生活中,在退回支票后可能会发生一系列长期交易。如果我们将最后的余额存储在每条记录中,那么每条记录都必须更新。

交易的生效日期通常与进入系统的日期不同。因此,我们会定期发现在现有交易之前必须按顺序插入交易,然后必须更新所有后续交易。

现在,也许你的柠檬水摊是一种不同的过程。如果我们给一个碗加水,我们可能会说,“加足够的水使其达到”满“标记,而不是”加4升“。如果是这种情况 - 如果在大多数情况下用户知道并将输入到计算机中的是新的总量而不是三角洲 - 那么有意义的是,您输入的是总量,如果您关心三角洲,你计算它。但是,如果用户知道的是三角洲,那么他们应该输入三角洲,你应该携带三角洲,并计算数量。

是的,如果您存储的所有数据都是变化量,那么计算净数量需要从第零天起累计所有记录。如果记录数量适中,这可能是完全可以接受的。如果不是这样,我有时候做的事情就是在某个日期保持“总记录”与总运行总数。然后为了获得当前数量,我找到最新的总记录,然后添加该日期以来的交易金额。编写代码非常痛苦,但却显着提高了性能。