【发布时间】:2014-02-26 07:07:46
【问题描述】:
今晚我一直在思考如何下注来解决运行总分的问题。我正在使用带有实体框架和 SQL Server 2012 的 C# 来开发一个可以分析我的银行交易的应用程序。
在数据库中,我创建了一个表Payment,其中包含以下属性:
PaymentDate, FromAccountId, ToAccountId, Amount
后一个属性Amount 始终为正值;事务的方向应由属性FromAccountId 和ToAccountId 确定。
现在,我必须能够在任何给定时间计算运行总数。例如,通过从月末减去月初的总和,我可以推断出特定帐户的余额。计算这个运行总计将在应用程序中发挥重要作用,因此单个计算不能花费太长时间。
我想出了 4 种策略来计算这个总和:
- 使用时间和帐户作为输入参数的存储过程。
- 在我的应用程序中计算运行总计(由于我使用的是实体框架,因此计算实际上会在数据库中进行)
- 创建一个表
RunningTotal并为每个事务更新它。这种方法的缺点是我必须自己保持这个表是最新的,即更多的业务逻辑。 - 与选项 3 类似,但随后使用基于付款表的视图。这样,我应该不得不处理额外的业务逻辑。
问题是,我无法确定哪种方法是最好的。你有什么想法?
【问题讨论】:
-
所有这些选项都有利有弊。因此,这是一个见仁见智的问题,因此对于 Stack Overflow 来说是题外话。您尚未考虑的一个选项是选项 3 的变体,但使用数据库触发器来更新运行总计。这可能是我会使用的,但这一切都取决于......
-
对于 SQL Server 2012,我会查看选项 #1 以便能够使用新的
LAG和LEADT-SQL 函数,这将允许你很容易计算运行总数。请参阅Intro to LAG and LEAD 了解说明 -
感谢所有回复。由于我绝不是 t-sql 专家,因此您提供给我的有关 Sql Server 2012 功能的信息非常有帮助。
标签: c# sql architecture sql-server-2012