2012-04-28 5 views
2

이것은 공간 대 시간의 문제입니다.파생 된 특성을 매번 열로 복제하거나 매번 계산해야합니까?

온라인 퀴즈 응용 프로그램을 고려해보십시오. 탐색 퀴즈에서는 모든 퀴즈에 대해 얼마나 많은 질문이 있는지 보여 드리고자합니다.

  • 퀴즈에 10 개 질문이 있으면 "10 개 질문"또는 "중간 퀴즈"로 표시 될 수 있습니다.
  • 퀴즈에 5 개 질문이있는 경우이를 "5 개 질문"또는 "단기 퀴즈"로 표시 할 수 있습니다.

Quiz 테이블에는 질문 수가 저장되는 열이 없습니다. 은 (는 두 테이블 모두의 PK와 저장 즉) 나는 Quiz_dataQuizQuestion_bank의 크로스 테이블입니다

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

참고 할 수있는 질문의 번호를 찾으려면.

퀴즈에 * number_of_question *을 저장하면 퀴즈에 질문을 추가/삭제할 수 있습니다. 따라서 deleteinsert을 제외하면 update도 필요합니다.

질문 : 매번 계산해야합니까, 아니면 Quiz 테이블에 값을 저장해야합니까? 게시물 제목은 일반적으로 동일한 질문을 말합니다.

답변

2

당신은 알 필요가

(1) 얼마나 자주 데이터 변경 및
(2) 그 수를 결정하는 데 걸리는 많은 노력. > 당신이 계산 안하고, 그 다음에 그 값을 저장 - 데이터 변경 사항은 아주 드물게 경우

  • : 일반적인 권장 사항으로

    , 내가 볼 것입니다.

  • 해당 숫자를 결정하는 비용이 매우 높은 경우 -> 한 번 계산하여 저장하고 다시 사용하십시오.

  • 한편, 정확한 개수를 결정하는 것이 중요하다면 -> 필요에 따라 결정하십시오.

이것은 분명한 예 - 나 - 아무 결정하지 않습니다 - 정말 데이터, 요구 사항, 얼마나 비용이 많이 드는이 같은 번호/수를 계산하는 것입니다에 따라 달라집니다.

+0

숫자가 거의 변경되지 않고 정확도가 중요하지 않으므로 ('medium'/ 'small'의 경우) 열에 저장하려고합니다. 감사! –

2

정상적인 상황에서는 런타임에 행 수를 계산해야합니다. 런타임에 계산하면 항상 적절한 수의 행이 제공됩니다. 그러나 어떤 경우에는 런타임에 계산하는 데 너무 오래 걸립니다. 그래도 시간이 너무 오래 걸리는 것처럼 보이지는 않습니다.

런타임에 계산할 때 너무 오래 걸리는 경우 어딘가에 계산을 저장하는 것이 좋습니다. 개인적으로, 나는 성능 향상을 위해 그런 것을하고 싶지 않지만, dbms를 프로그램하여 수를 항상 보장한다고 보장 할 수 있다면, 나는 그다지 신경 쓸 필요가 없습니다.

무결성을 보장하기 위해 dbms를 프로그래밍 할 수없고 중요하지 않은 경우 일반적으로 cron 작업을 실행하여 모든 개수를 업데이트하거나 행과 일치하지 않는 개수를 찾습니다.

관련 문제