选择总和还是更新总余额的字段?

时间:2015-06-03 08:46:48

标签: sql database entity-framework database-design azure-sql-database

我正在使用Entity Framework和Azure Sql。

我有用户,他们在余额表上有记录。有些用户可能有100万条记录。在每次http请求之前我需要用户的总余额。

我有两种方法可以获得用户的总余额:

第一: 在事务中插入余额并更新totalbalance字段(单独)。

for (i = 0 to N) 
    if matrix[i][temp]==1:
      Sum[i]=Sum[i]-1
      if Sum[i]==0:
        add i as child of temp
        add i to queue

如果我需要总余额,我只需从transaction( InsertBalance(amount) Update CustomerSummary Set Totalbalance=Totalbalance+Amount ) 表中选择此项。

第二:直接插入余额而不使用任何交易。 如果我需要总余额,我必须通过查询获得总和。

第一种方法对于总余额是否可靠?

我可以像第一种方法一样快速地获得第二种方法的总和吗?

1 个答案:

答案 0 :(得分:4)

第二种方法保证准确 - 如果你想要特定列的总和,没有什么比计算总和的查询更准确。

维护摘要表的原因是性能。通常,这样的表以两种方式之一维护:

  • 触发器
  • 包装所有数据修改操作
  • 的存储过程

insert的示例是“应用程序端”解决方案。危险在于有人可能会说平衡不正确,然后在数据库中直接更改值。总数不会改变。

为了使其正常工作,您需要对数据库的访问权进行正确的控制,以确保每当amount更改时,其所有依赖项都会发生更改。注意:如果您在需要时计算余额,这不是问题。