数据库设计,最佳实践,需要建议

时间:2011-04-25 04:38:05

标签: mysql database-design

我有这个数据库,有一个名为“徽章”和“主题”的表,我在“主题”中有一个标记字段,名为“is_canceled”bool值,现在由于某种原因有人建议我在“徽章”中有一个字段“called”canceled_subject_count“,其值与

相同
"SELECT SUM(is_canceled) as cancel_count FROM subjects WHERE is_canceled = 1 AND badge_id = ".$some_badge_id

他说的是表现的原因之一,最好是直接取值而不是首先求和

你觉得怎么样?我应该有这个领域吗?为什么?

谢谢

2 个答案:

答案 0 :(得分:5)

这称为denormalization。为初始数据库设计执行此操作可能会以后节省您的时间和精力,但可能是过早优化。您可能最好添加canceled_subject_count字段,如果经过一些分析后,您在计算徽章的已取消主题时会发现测量的性能瓶颈,那么您可以添加该字段。 / p>

答案 1 :(得分:0)

这实际上取决于软件的使用。这种优化很大程度上取决于价值变化的频率,观看者的数量等等。

如果它很少改变,存储值并在发生更改时更新可能更聪明。

如果总和不断变化,那么每次查询计算它都会更聪明。

但除非你服务于大量的请求,否则这笔费用几乎不会花费你任何费用,而且可能更容易保持你的数据完整性。