我想这是空间与时间的问题。
考虑在线测验应用程序。在浏览测验中,每次测验都要展示它有多少问题。
在Quiz
表中,我没有用于存储问题数量的列。
为了找到这么多问题,我可以做到
SELECT COUNT(question_id)
FROM Quiz
NATURAL JOIN Quiz_data
WHERE quiz_id = '$quiz_id'
请注意,Quiz_data
是Quiz
和Question_bank
的交叉表(即它存储了2个表的PK)。
请注意,如果我在测验中存储* number_of_question *,则可以在测验中添加/减去问题。除了delete
和insert
之外,还需要update
。
问题:我应该每次计算,还是将值存储在Quiz
表中?帖子标题在一般意义上说同样的问题。
答案 0 :(得分:2)
在正常情况下,您应该计算运行时的行数。在运行时计数将始终为您提供正确的行数。但在某些情况下,在运行时计数需要太长时间。 (但是,在你的情况下看起来不应该花太长时间。)
如果在运行时计数太长,将计数存储在某处是有意义的。就个人而言,我甚至不喜欢这样做以提高性能,但如果我可以编程dbms以保证计数总是正确的,我不会太介意。
如果无法对dbms进行编程以保证完整性,并且计数很重要,我通常会运行一个cron作业来更新所有计数或查找与行不匹配的计数。
答案 1 :(得分:2)
你需要知道
(1)您的数据更改频率,以及
(2)确定该数字需要多少努力。
作为一般性建议,我会看一下:
如果数据变化非常少 - >你应该计算然后存储该值。
如果确定该数字的成本非常高 - >尝试计算一次,存储和重用。
另一方面,如果准确计数至关重要 - >根据需要确定它。
这不是一个明确的是或否决定 - 它实际上取决于您的数据,您的要求以及计算这样一个数量/数量的成本。