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



目前我很难决定/权衡跟踪会员网站登录信息的利弊。

目前

我有两个表,login_i和login_d。

  • login_i包含成员id、密码、上次登录日期和登录次数。(成员id是主键,显然是唯一的,所以每个成员一行)
  • login_d包含历史上所有登录数据的列表,跟踪每次登录发生的时间。它包含成员的id,登录的日期时间,登录的ip_address。这个表的主键只是一个自动递增的INT字段,实际上没有什么目的,但需要一个主字段和唯一的唯一字段(另一方面,索引是不同的,但仍然不关心)。

在很多方面,我认为这两个表非常相似,但拥有后者的好处是可以准确地查看成员登录的时间,登录次数以及来自哪个IP。login_i中的所有信息(上次登录和计数)都真实地存在于login_d中,但是以更简洁的形式存在,而不需要在后一个表中计算count(*)。

谁有建议,哪种方法是首选?无论如何存在两个表,但是如果login_d存在,我应该在login_i中保留last_login和count的记录吗?

<

添加认为/问题/h2>

下面的评论很好-如何根据用户名/电子邮件/ip跟踪登录尝试?如果这也存储在一个表(第三个表我假设)。

这叫做反规范化。

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

有时这样做是为了节省计算上昂贵的结果-可能像您的总登录计数值。

的缺点是,在某些时候,您可能会遇到一个表中的值与另一个表中的值不匹配的情况。当然,你会尽你最大的努力使他们及时更新,但有时事情会发生。在这种情况下,如果应用程序逻辑从其中一个源接收到不正确的值,您可能会在应用程序逻辑中生成错误。

在这种特殊情况下,登录计数对于应用程序的成功运行可能不是那么关键-所以不是一个很大的风险-尽管您仍然会有维护该值的开销。

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

最新更新