簡體   English   中英

將值存儲在表列中與通過導航屬性計算值

[英]Storing the value in a table column vs Calculating the value from navigation property

我需要有關使用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; }
}

我不會將平均值存儲在單獨的字段中

  1. 我將需要經常更新
  2. 我不會在性能方面節省很多

如果您使用Entity Framework上下文進行查詢,並且要求獲得評論屬性的平均值,則不會獲取該評論。 實體框架將生成一條SQL select語句,返回平均值。

類似於: SELECT AVERAGE(ReviewScore) FROM ReviewsTable Where ReviewedProductId = ProductId

此外,僅當遇到嚴重的性能問題時才應使用數據庫非規范化。

我想說的是,如果它像亞馬遜一樣巨大,則可以預先存儲計算出的值。 這將有助於在獲取時提高性能。此外,您可以將將平均值更新的任務委派給某種后台進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM