1

두 개의 엔티티 그룹이 있습니다. 레스토랑 및 사용자. 레스토랑은 사용자가 평가할 수 있습니다 (1-5). 그리고 각 사용자의 평가는 검색 가능해야합니다.등급 시스템 데이터베이스 구조

음식점 (ID, 이름, ....., total_number_of_votes, total_voting_points) 사용자 (ID, 이름 ...)

평가 (ID, restaurant_id 266 RATING_VALUE)

매번 계산할 필요가 없도록 평균값을 저장해야합니까? 어느 테이블이 avg_rating, total_no_of_votes, total_voting_points를 저장할 최적의 장소입니까?

답변

2

어쨌든 평균값을 어딘가에 저장하면, 마지막으로 계산했을 때만 정확합니다. (즉, 5 개의 리뷰가 있고 평균을 어딘가에 저장하면 5 개의 새로운 리뷰를 얻은 다음 저장된 평균이 틀립니다).

내 생각에 이런 유형의 논리는 중간 계층에 완벽하게 적합합니다. 평균을 계산하는 것은 리소스 집약적이어서는 안되며 실제로 성능에 영향을주지 않아야합니다.

데이터베이스에 실제로 저장하려는 경우; 나는 아마 그것들을 자신의 테이블에 저장하고 트리거를 통해 그 값을 업데이트 할 것이다. 그러나 이것은 중간 계층에서 계산하는 것보다 훨씬 리소스 집약적 일 수 있습니다.

0

일부 데이터베이스 (예 : PostGreSQL)를 사용하면 배열을 행의 일부로 저장할 수 있습니다. 예 :

create table restaurants (
    ..., 
    ratings integer[], 
    ... 
); 

예를 들어, 레스토랑과 동일한 행에 마지막 5 개의 평점을 유지할 수 있습니다. 새로운 등급을 받으면 이전 등급을 임의로 섞은 다음 끝에 새 등급을 추가 한 다음 평균을 계산하십시오.