数据库设计:在何处放置总金额字段

Nin*_*Cat 4 database-design

我正在设计一个跟踪订单的应用程序.每个订单可以有> 1个workItem,每个workItem可以有一个单独的价格.

我将workItem的价格存储在workItem表中,认为在UI或报告中,收集工作成本(既向客户收费又付给承包商)将通过查询现有数据来计算. workItems表.

以这种方式保留或将总金额存储在Order表中是否有意义?如果我选择后者,数据是不是多余的?也许有这种举动的性能考虑因素.你怎么看?

cle*_*tus 6

这取决于您的数据库的使用方式.

理想的解决方案是将单独的项目保留在工作项目行中.这样可以避免重复数据.例如,当您添加或更新工作项时,否则您必须同时更新工作项和总计.

使用适当的索引,这样的查询通常具有高性能:

SELECT i.*, SUM(wi.amount) total
FROM invoice i
JOIN workitem wi ON i.invoice_id = wi.invoice_id
GROUP BY i.invoice_id
Run Code Online (Sandbox Code Playgroud)

话虽如此,如果您发现性能问题,您可能会对数据模型进行非规范化并存储总数.但是如果你需要的话,只能走那条路.在我看来,不应该先发制人.