SQL最佳方法计算点击次数和表单提交

时间:2011-10-13 14:33:34

标签: sql

我需要计算我网站中特定链接的点击次数以及来自访问者的已发送电子邮件的数量。

问题是:

我已经有一个包含产品及其描述的表格(我想计算点击次数),我想我会扩展这个表并创建两个字段,点击计数和电子邮件发送。但也许我可以做另一个这样,通过引用产品ID,创建一个单独的表,其中只包含两个可以计数的字段。

您认为这是最好的方法吗?

4 个答案:

答案 0 :(得分:3)

我会将点击和电子邮件存储在单独的表中,而不是将它们作为新列添加到“products”表中。

数据在逻辑上是不同的 - “产品”应包含产品的定义。有人点击该产品的链接这一事实并不属于该定义的一部分 - 这是一个完全独立的事件。正如Ben所说,它可能也会对性能产生影响。

我还可以看到将来扩展的要求 - 您可能需要能够跟踪每天的点击次数,或每个用户类型的点击次数等等;我只考虑在表格中存储点击和电子邮件的原始数据,并将其加入产品表。

例如:

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

每次有人点击时都会在该表中插入记录;要运行报告,您需要加入产品以获取描述,并使用count()和group by来获取正确的数据。

答案 1 :(得分:2)

如果您的产品表只是 SMALL ,您可以直接将其添加到那里以避免在单独的表格中重复主键创建用于访问包含点击次数的表格的单独存储过程以及包含产品信息的表,您还可以避免使用连接语句需要两个表的结果的select语句,当然,您可以通过这样做来最小化数据冗余。

另一个FYI包含两列的表通常是交叉引用表,仅适用于存储相关实体之间的关系。

答案 2 :(得分:1)

使用这些字段扩展products表可能不是一个好主意,因为点击和电子邮件计数会经常更新,导致您的产品表(或至少包含其中的某些行)被读/写锁定常常。从产品表中读取和放慢网站速度时,这可能会导致大量延迟。我会去单独的餐桌路线。

答案 3 :(得分: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