将聚合数据存储在表格或视图中?

时间:2017-07-28 21:52:46

标签: sql sql-server database

我正在MS SQL服务器上做一个项目,我目前担心以下情况。

CartItems (table)
CartID      ItemID      Value
1           51          100
1           52          100

如果我想将购物车金额作为固定值提供,而不是为每个查询用SUM计算,我

a)使用列创建表CartInfo并在每个项目更改(触发器)上填充数据

  • CartID
  • CartTotal

b)使用列

创建视图CartInfo
  • CartID
  • CartTotal

两种解决方案都可能有效,但我不确定根据哪些事实我应该选择表格还是视图?

3 个答案:

答案 0 :(得分:3)

考虑索引视图。这将实现总计,提供表格方法的性能优势,但没有额外的代码来维护它。当基础数据发生变化时,总数将实时反映新值。

CREATE VIEW dbo.CartItemSummary
WITH SCHEMABINDING AS
AS
SELECT
      CartID 
    , SUM(Value) AS CartTotal
FROM dbo.CartItem
GROUP BY CartID;
GO
CREATE UNIQUE CLUSTERED INDEX cdx_CartItemSummary ON dbo.CartItemSummary;
GO

答案 1 :(得分:0)

我强烈建议您在此处使用视图,因为您不必处理额外的表和触发器,这会使您的解决方案不易维护和更脆弱。视图正是您所需要的:现有数据的(不同)视图。然后,您不必担心将第二个表中的数据“同步”(例如,通过使用触发器)。视图的结果始终是“最新的”。

答案 2 :(得分:-1)

视图不包含表格方式的信息;它们只是每次从中选择时运行的存储sql。您可能指的是物化视图,但据我所知,它不是SQL Server产品。