前提:我是SQL和数据库的新手。SQL复合属性和冗余
我不明白的是:如果构建它们的所有组件都存储在数据库的其他属性中,那么这些组合属性是否被认为是冗余的?如果是,我是否仍然可以使用它们来避免昂贵的查询,即使这意味着在数据库中添加一些冗余?
举个例子:设想一个网上商店,用户可以购买和出售物品。该表是:
user(unique_id, name, money, ...)
transaction(seller_id, buyer_id, item_id, ...)
item(unique_id, price, ...)
现在,找到的用户已作出我总结用户已售出的所有商品的价格,从取出的利润它是用户购买的所有产品的价格。 伪代码:
profits = SUM(sales) - SUM(purchases)
我该查询看到的问题是,它会为取得了用户变得更大交易的数量更慢。
为了加快速度,我可以简单地在user
表中添加一个属性profits
,每当用户进行一次交易时,该属性将被更新。这将比总结和减去所有事务的速度快,但它看起来像在数据库中引入了一些冗余,因为profits
是一个复合值。我应该打扰吗?
你正在使用哪个dbms? (其中一些有“计算”栏。) – jarlh
在发布答案之前,请您澄清一下。你抱怨性能(然后我建议你使用索引)或反规范化(添加额外的列)? – Dewfy
@jarlh我正在使用PostgreSQL – cei