2011-07-17 77 views
0

我正在使用C#開發使用ASP.Net開發的Web應用程序。 Allong具有其他功能,可以讓用戶將各種項目添加到他們的個人清單中。有關上述功能的數據庫表是:如何計算添加特定項目的時間?

------------------------- 
| Item     | 
------------------------- 
| ItemId (Primary Key) | 
| . . . & other attribs | 
------------------------- 

--------------------------- 
|List      | 
--------------------------- 
|ListId (Primary Key)  | 
|. . . and other attribs | 
--------------------------- 

既然有許多人以上兩個表之間一對多的關係(即一個項目在多個列表添加一個列表包含很多項目),所以我創建爲第三個表

--------------------------------- 
|ItemList      | 
--------------------------------- 
|ItemId (Foreign Key)   | 
|ListId (Foreign Key)   | 
|. . . and other Attributes  | 
--------------------------------- 

現在,我需要跟蹤某個項目被添加到列表中的次數。爲了獲得這個我有兩個可能的選擇

  1. 我在項目表中添加一個新的屬性,並增加一個值,每次當一個特定的項目被添加到某個列表。
  2. 第二個選項是,每當我需要知道多少 次特定的項目添加到列表中,然後我將適用於 SELECT COUNT查詢(用where子句)在ITEMLIST表

請建議哪種方法更好,爲什麼?我更傾向於第二種方法,關於效率我猜都有相同的效果

回答

2

由於計數已經彙總,所以選項1對讀取操作會更好。這種方法的缺點是您必須:

  • 手動更新此號碼,以便在您的應用程序中進行每次插入和刪除。
  • 每次將項目添加到列表中時更新此編號。如果您的應用程序寫入讀取比率很高,則可能不值得付出努力

如果應用程序與讀取操作相比具有更多的插入/刪除操作,選項2的性能會更好。原因是SQL Server只需要在需要時計算計數。

我會建議去選擇#2,除非你已經確定性能問題,會讓你想採取不同的方法。

2

從數據純度的角度來看,第二種方法更好。讓數據說出自己的真實故事 - 如果您可以通過快速執行Select count(ListId), ItemID as CountOfLists from ItemList Group By ItemID來計算出某件產品的列表數量,那麼比起在代碼中找到修改ItemList的所有點並確保它們更有吸引力更新Item.Count

如果您出於性能原因正在尋找非規範化/預先彙總數據,您會考慮第一個選項而只有。您必須做額外的工作以確保您的項目表中的計數列始終準確(或者,eventually準確)

相關問題