2011-10-13 142 views
3

我需要統計我網站中特定鏈接的點擊次數以及訪問者發送的電子郵件數量。SQL最佳方法點擊次數和表單提交

的問題是:

我已經有產品表和它的說明(我想計算點擊次數),我想我應該擴展該表並創建兩個字段,使發出的點擊次數和電子郵件但也許我可以通過另一種方式來做,通過引用產品ID創建一個單獨的表,其中只包含兩個使此計數的字段。

你認爲這是最好的方法呢?

回答

3

我的點擊和電子郵件存儲在單獨的表,而不是將其添加爲新列的「產品」表。

的數據在邏輯上是不同的 - 「產品」應該包含產品的定義。事實上,某人點擊該產品的鏈接不屬於該定義的一部分 - 這是一個完全獨立的事件。正如本文所說,它可能也會對性能產生影響。

我還可以看到需求在未來擴展 - 你可能需要能夠跟蹤每個用戶類型,或任何每天的點擊,或點擊;我會考慮將點擊和電子郵件的原始數據存儲在表格中,並將其加入產品表格。

例如:

table CLICK 
id (PK) 
product_id (FK to products) 
date 
time 
user_id (FK to users, if that exists) 

記錄插入該表每次點擊;要運行您的報告,您需要返回產品以獲取描述,並使用count()和group by來獲取正確的數據。

2

如果你爲你的產品表只是你可以添加它直接出現,以避免在不同的表重複的主鍵,創建單獨的存儲過程,將被用來訪問你的表這將包含點擊計數和表將包含您的產品信息,你也可以避免使用連接語句,只要你有做,將需要的結果從兩個表,當然你可以最小化數據的select語句這樣做的冗餘。

另一個FYI具有兩列的表通常是交叉引用表,這只是理想的,用於存儲相關的實體之間的關係。

1

擴展產品表,這些領域可能不是一個好主意,因爲點擊電子郵件計數將非常頻繁地更新,從而使您的產品表(或至少它包含了一些行)進行讀/寫經常上鎖。從產品表讀取數據並導致網站速度變慢時,這可能會導致大量延遲。我會去單獨的表路線。

1

艾倫就在這裏。如果你打算分開兩張桌子,延遲也是一個問題。連接兩個表格顯然要慢得多,而不是簡單但非常有效的選擇語句。

我寧願使用:

SELECT ProductID, ProductName, ClickCount, Email FROM tblProducts 

而不是

SELECT p.ProductID, p.ProductName, px.ClickCount, px.EmailCount 
FROM tblProducts p 
INNER JOIN tblProductsXRefClickAndEmail px ON p.ProductID = px.ProductID 
相關問題