1

2つのエンティティグループがあります。レストランとユーザー。レストランはユーザーが評価(1〜5)できます。また、各ユーザーからの評価は取得可能である必要があります。

Resturant(id、name、.....、total_number_of_votes、total_voting_points)ユーザー(id、name ......)

評価(id、restaurant_id、user_id、rating_value)

毎回計算する必要がないように、平均値を保存する必要がありますか?avg_rating、total_no_of_votes、total_voting_pointsを保存するのに最適なテーブルはどれですか?

4

2 に答える 2

3

さて、平均値をどこかに保存すると、前回計算した時点でのみ正確になります。(つまり、5つのレビューがあり、平均をどこかに保存します。さらに5つの新しいレビューを取得すると、保存された平均は正しくありません)。

私の意見では、この種のロジックは中間層に完全に適しています。平均の計算は、リソースをあまり消費するものであってはならず、実際にはパフォーマンスに影響を与えるべきではありません。

本当にデータベースに保存したい場合は、私はおそらくそれらを独自のテーブルに保存し、トリガーを介してそれらの値を更新します。ただし、これは中間層で計算するよりもさらに多くのリソースを消費する可能性があります。

于 2010-06-23T11:37:53.143 に答える
0

PostGreSQLなどの一部のデータベースでは、配列を行の一部として格納できます。例えば

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

したがって、たとえば、最後の5つの評価をレストランと同じ行に保持することができます。新しい評価を取得したら、残っている古い評価をシャッフルし、最後に新しい評価を追加して、平均を計算します。

于 2016-02-18T20:06:38.230 に答える