2012-10-26 78 views
0

美好的一天大家,如何使用存储在数据库中的数据?

我有一些问题,关于如何计算存储在数据库中的数据。就像,我有一个表:

| ID | Item name | quantity of items | item price | date | 

和,比如我有存储10000条记录。

首先,我需要做的是从一个日期间隔拾取物品,所以我不会需要我的计算整个数据库。然后我从那个日期间隔的项目,我必须添加一些表,例如计算:

full price = quantity of items * item price 

和他们新的表存储每个项目。所以,从日期间隔挑选的项目数据库应该是这样的:

| ID | Item name | quantity of items | item price | date | full price | 

的一点是,我不知道如何来存储项目,我挑取日期间隔。像,我有创建一些临时表,或者什么? 这将使用ASP.NET Web应用程序,并在数据库中进行计算,我想我会使用SQL查询。也许有一个更简单的方法来做到这一点?谢谢你的时间来帮助我。

+3

似乎计算字段今天是一个主题。任何计算值都应该不**作为字段存储。您在查询中进行计算。您可以在查询中请求数据作为日期间隔。 – Kermit

回答

0

有几种方法:

  • 使用SQL查询来计算对飞 - 这种方式没有任何东西存储到数据库中
  • 使用同一个或另一个表来执行计算
  • 使用计算领域

如果您的数据库负载较低(每分钟几个查询,每个提取几千行),那么请首先使用。 如果在飞行中的计算性能较差(数百万条记录,X取每秒...)尝试第二或第三的形式给出。 如果你的数据库支持计算和持久化字段,比如说MSSQL服务器,那么第三个就可以。

编辑:

通常情况下,为他人说,你会在你的查询进行计算。也就是说,只要你的项目够简单。

首先,当您存储的所有项目,其价格表变得与插入/更新/攻击来自多个客户端删除,你不想阻止或由其他人阻止。你必须明白,例如表X更新可能会阻止您从表X中选择,直到完成(查找页面/行锁定)。这意味着你要平行非规范化的结构(表产品,并与它一起计算的东西)。这是例如报告发挥作用。

其次,当计算是很简单的(A * B)及以上不那么多条记录做了,那么它的确定。当你有例如10M记录和你有关联与其他几个行的每一行,并做了一些群体的一些聚集,有一个计算的机会/坚持字段将节省您的时间 - 您可以获得高达10-100倍,使用这种方法更快的结果。

0

就像其他人所说的,你可以在飞行中执行这些查询,而不是将它们存储起来。

然而,要回答你的问题,这样的查询应该做的伎俩..

我还没有测试,所以语法可能会关闭触摸,但它会让你在正确的轨道上。

最终你必须做一个插入一个选择

insert into itemFullPrice 
select id, itemname, itemqty, itemprice, [date], itemqty*itemprice as fullprice from items where [date] between '2012/10/01' AND '2012/11/01' 

again..don't拍我,如果我有语法有点过..它是忙碌的一天今天:d

0

拥有10000条记录,使用临时表不是一个好主意。

你最好有另一张名为ProductsPriceHistory的表格,你可以定期计算和存储月度报告。

通过这种方式,您的报告速度会更快,并且您不必在每次想要获取报告时进行计算。

请注意,如果您的日期间隔是固定的,我的意思是每月,每季度,每年等等,请注意这种方法是可以的。 如果您的日期间隔是动态的,从2011年10月20日到2011年10月25日,从2011年5月20日到2011年8月13日,这种方法无法工作。

另一种方法是在ASP.Net上进行计算。

0

即使有10000条记录,你最好的办法就是在飞行中计算这样的事情。这是结构化数据库设计的目的。

例如:

SELECT [quantity of items] * [item price] AS [full price] 
    , [MyTable].* 
FROM [MyTable] 

更复杂的计算涉及到的JOIN的记录可能借给本身存储值3个或多个表和数千人。

+1

成千上万的记录不值得存储值。百万+也许.. – Pleun

0

你应该分开在您的应用程序的担忧:

  • aspx页面呈现
  • 用于数据持久
  • 一些中介“业务”层的像FULLPRICE = P * Q额外的逻辑
  • SQL服务器

例如如果您使用Linq-2-sql进行数据检索,那么向您的实体添加完整价格非常简单。实体框架相同。另外,如果你愿意,你可以在SQL select中计算p * q。只有当性能真的成为问题时,你才可以开始考虑临时表,带有聚集索引的视图等。

相关问题