建议跟踪所有登录,更新登录表,或两者兼而有之?

时间:2011-09-14 21:55:18

标签: mysql database database-design ip-address

目前,我很难决定/权衡跟踪会员网站登录信息的优缺点。

目前

我有两个表,login_i和login_d。

  • login_i包含成员的ID,密码,上次登录日期时间和登录总数。 (成员ID是主键,显然是唯一的,因此每个成员一行)
  • login_d包含历史记录中所有登录数据的列表,用于跟踪每次登录时的情况。它包含成员的id,登录的日期时间,登录的ip_address。这个表的主键只是一个自动递增的INT字段,真的没用,但需要一个主要的,唯一的唯一单个字段(另一方面的索引不同但仍然没有关注)。

在很多方面,我认为这些表非常相似,但后者的好处是确切地查看成员何时登录,多少次以及它来自哪个IP。 login_i中的所有信息(上次登录和计数)如实地存在于login_d中,但是以更简洁的形式存在,而无需在后一个表上计算COUNT(*)。

有人建议选择哪种方法吗?无论如何都存在两个表,但如果login_d存在,我应该记录last_login并在login_i中计数吗?

添加了思想/问题

下面做了很好的评论 - 如何跟踪基于用户名/电子邮件/ IP的登录尝试?这应该也存储在一个表格中(我假设的第三个表格)。

2 个答案:

答案 0 :(得分:1)

这称为非规范化。

理想情况下,你永远不会反规范化。

无论如何,有时候还是可以节省计算成本高昂的结果 - 可能就像你的总登录计数值一样。

缺点是您可能会在某种程度上陷入一个表中的值与其他表中的值不匹配的情况。当然,你会尽力使它们保持最新状态,但有时会发生。在这种情况下,如果从其中一个源收到错误的值,您可能会在应用程序逻辑中生成错误。

在这种特定情况下,登录次数可能不是成功运行应用程序的关键 - 所以不是很大的风险 - 尽管您仍然需要维持价值的开销。

答案 1 :(得分:0)

您经常需要上次登录并统计吗?如果是,那么你应该将它存储在login_i中。如果它很少使用,那么您可以花时间在所有登录的巨型表中处理查询,而不是存储重复的数据。