2011-04-25 147 views
0

我有这个数据库,用所谓的“徽章”和“主体”的表,我在“主题”标志字段名为“is_canceled”布尔值,现在有些人之所以建议我有所谓的“canceled_subject_count”,“徽章”的字段,它具有相同的值数据库设计,最佳实践,需要咨询

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

的,他说的是性能,最好是取值直线,而让它先求和的原因之一

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

感谢

回答

5

这就是所谓的denormalization。这样做的初始数据库设计可能以后节省您的时间和精力,但有可能是过早的优化。你可能更好而不是添加canceled_subject_count字段,如果在一些分析后,你发现一个测量的性能瓶颈,当计算一个徽章的取消主题,那么你可以添加该字段。

+0

+1。很好的回答:) – 2011-04-25 04:50:33

0

这真的取决于软件的使用。这种优化取决于如何往往价值的变化,有多少人在看呢,等

如果很少改变了很多,在发生变化时可能是更明智的存储值和更新。

如果总数是不断变化的,这将是更明智的只是每个查询的计算。

但除非你服务的请求的巨量,这笔钱将花费你几乎没有什么和可能是更容易保持数据的完整性在良好的状态。