我需要有关使用Entity Framework 6的建议。假设该网站提供了许多带有许多评论的产品(想想Amazon.com)。假设大多数访问者查看产品而不是撰写评论,那么如果我想显示每个产品的平均用户评分,我是否应该添加AverageReviewRating
列来存储其值(据说)加快查询性能?
这是一种好的还是坏的做法?另一种方法是从导航属性访问每个评论并从中计算平均评级。推荐的方法是什么?
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
// Should I store the rating in a pre-calculated column or not?
public int AverageReviewRating { get; set; }
public virtual ICollection<Review> Reviews { get; set; }
}
答案 0 :(得分:0)
我不会将平均值存储在单独的字段中,因为
如果使用实体框架上下文进行查询并请求平均审阅属性,则不会获取审阅。实体框架将生成一个返回平均值的SQL select语句。
类似于:SELECT AVERAGE(ReviewScore) FROM ReviewsTable Where ReviewedProductId = ProductId
此外,只有在遇到严重的性能问题时才应使用数据库非规范化。
答案 1 :(得分:0)
我想说如果它像亚马逊一样巨大,你可以预存储计算值。 这有助于在获取时获得更好的性能。同时,您可以将更新平均值的任务委派给某种后台进程。