2

これは空間と時間の問題だと思います。

オンラインクイズアプリケーションを考えてみましょう。ブラウズクイズでは、すべてのクイズで、質問の数を示したいと思います。

  • クイズに10問ある場合は、「10問」または「中期クイズ」と表示する場合があります。
  • クイズに5つの質問がある場合、「5つの質問」または「短時間のクイズ」として表示される場合があります。

表にはQuiz、質問の数を格納するための列がありません。その数の質問を見つけるために、私はすることができます

SELECT COUNT(question_id) 
FROM Quiz 
NATURAL JOIN Quiz_data 
WHERE quiz_id = '$quiz_id'

これはとQuiz_dataのクロステーブルであることに注意してください(つまり、2つのテーブルの両方のPKを格納します)。QuizQuestion_bank

* number_of_question *をクイズに保存すると、クイズに質問が追加/削除される場合があることに注意してください。deleteしたがって、ととは別に、同様insertに行う必要があります。update

質問:毎回計算する必要がありますか、それとも値をQuizテーブルに保存する必要がありますか?投稿のタイトルは、一般的な意味で同じ質問を言います。

4

2 に答える 2

2

通常の状況では、実行時に行数をカウントする必要があります。実行時にカウントすると、常に適切な行数が得られます。ただし、実行時にカウントするのに時間がかかりすぎる場合があります。(ただし、あなたの場合は、それほど時間がかかるようには見えません。)

実行時のカウントに時間がかかりすぎる場合は、カウントをどこかに保存するのが理にかなっています。個人的には、パフォーマンスを向上させるためにそうすることすら好きではありませんが、カウントが常に正しいことを保証するようにdbmsをプログラムできれば、あまり気にしません。

整合性を保証するようにdbmsをプログラムできず、カウントが重要な場合、通常はcronジョブを実行して、すべてのカウントを更新するか、行と一致しないカウントを探します。

于 2012-04-28T13:17:36.443 に答える
2

あなたは知る必要があります

(1)データが変更される頻度、および
(2)その数を決定するのにかかる労力。

一般的な推奨事項として、私は以下を検討します。

  • データがごくまれにしか変更されない場合->その値を計算して保存する必要があります。

  • その数を決定するコストが非常に高い場合->一度計算してみて、保存して再利用します。

  • 一方、正確なカウントが重要な場合は、必要に応じて決定します。

これは明確な「はい」または「いいえ」の決定ではありません。実際には、データ、要件、およびそのような数/カウントを計算するのにどれだけの費用がかかるかによって異なります。

于 2012-04-28T14:49:27.193 に答える