1

我有兩個實體組。餐廳和用戶。餐廳可以由用戶評分(1-5)。並且對fromeach用戶進行評分應該是可檢索的。評級系統數據庫結構

RESTURANT(ID,姓名,.....,total_number_of_votes,total_voting_points) 用戶(ID,姓名......)

評級(ID,restaurant_id,USER_ID,RATING_VALUE)

我是否需要存儲平均值,以便它不需要每次計算?哪個表是存儲avg_rating,total_no_of_votes,total_voting_points的最佳地點?

回答

2

那麼,如果你存儲的平均值的地方;它只會在你最後一次計算它的時候是準確的。 (即,您有5條評論;然後將平均值存儲在某處,您將獲得5條更多新評論,然後您保存的平均值不正確)。

我認爲這種邏輯非常適合中間層。計算平均值不應該是非常耗費資源,並且不應該影響性能。

如果你真的想把它存儲在數據庫中;我可能會將它們存儲在自己的表中,並通過觸發器更新這些值。但是,這可能比在中間層計算更耗費資源。

0

某些數據庫(例如PostGreSQL)允許您將數組存儲爲行的一部分。例如

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

例如,您可以將最後5個評級與餐廳保持在同一行。當您獲得新評級時,將舊評級隨機洗牌,並在最後添加新評級,然後計算平均值。