我正在MS SQL服务器上做一个项目,我目前担心以下情况。
CartItems (table)
CartID ItemID Value
1 51 100
1 52 100
如果我想将购物车金额作为固定值提供,而不是为每个查询用SUM计算,我
a)使用列创建表CartInfo并在每个项目更改(触发器)上填充数据
b)使用列
创建视图CartInfo两种解决方案都可能有效,但我不确定根据哪些事实我应该选择表格还是视图?
答案 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产品。