Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 建议跟踪所有登录,更新登录表,或两者兼而有之?_Mysql_Database_Database Design_Ip Address - Fatal编程技术网

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

Mysql 建议跟踪所有登录,更新登录表,或两者兼而有之?,mysql,database,database-design,ip-address,Mysql,Database,Database Design,Ip Address,目前,我很难决定/权衡跟踪会员网站登录信息的利弊 目前 我有两个表,login\u I和login\u d login_i包含成员的id、密码、上次登录日期时间和登录总数。成员id是主键,显然是唯一的,因此每个成员一行 login_d包含历史记录中所有登录数据的列表,可跟踪每次登录。它包含成员id、登录日期时间、登录ip_地址。这个表的主键只是一个自动递增的INT字段,实际上是没有目的的,但需要一个主键和唯一唯一唯一的单个字段。另一方面,索引是不同的,但仍然不相关。 在许多方面,我认为这些表非常

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

目前 我有两个表,login\u I和login\u d

login_i包含成员的id、密码、上次登录日期时间和登录总数。成员id是主键,显然是唯一的,因此每个成员一行 login_d包含历史记录中所有登录数据的列表,可跟踪每次登录。它包含成员id、登录日期时间、登录ip_地址。这个表的主键只是一个自动递增的INT字段,实际上是没有目的的,但需要一个主键和唯一唯一唯一的单个字段。另一方面,索引是不同的,但仍然不相关。 在许多方面,我认为这些表非常相似,但使用后者的好处是可以准确地查看成员登录的时间、次数以及来自哪个IP。login_i last login and count中的所有信息都真实地存在于login_d中,但形式更简洁,无需在后一个表中计算count*

有人对哪种方法更可取有意见吗?两个表将存在,但如果存在登录,我是否应该保留上次登录的记录并在登录中计数

补充想法/问题
下面的评论很好-根据用户名/电子邮件/ip跟踪登录尝试怎么样?如果这也存储在一个表中,我假设第三个表。

这称为非规范化

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

有时,无论如何,这样做是为了节省昂贵的计算结果——可能像您的总登录计数值一样

不利的一面是,您可能会在某个时候陷入一种情况,即一个表中的值与其他表中的值不匹配。当然,你会尽你最大的努力让他们保持适当的最新,但有时事情会发生。在这种情况下,如果应用程序逻辑从其中一个源接收到不正确的值,则可能会在应用程序逻辑中生成错误


在这种特定情况下,登录次数对于应用程序的成功运行可能不是那么关键,因此风险不大,尽管您仍然需要维护该值的开销。

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

我也在想同样的问题。大巧合。我也在尝试登录。顺便说一句,问得好。@santiagobasulto-关于登录尝试的观点很好。我在运行的intranet应用程序上也有类似的安全功能,但这肯定是有价值的信息!这一点很好,但老实说,这是一个在如此早期阶段的应用程序,我不确定我们需要多久使用一次。我认为运行select*from login_I(其中total_count>X)比使用更复杂、更昂贵的子查询/连接集来计算可能数万名成员的登录要简单得多。最后一个想法是,在这里进行非规范化感觉像是过早优化。我不会这么做,但是如果你发现在某个时候你看到了性能问题,那么就继续改变策略。很好,谢谢你为我所要完成的技术术语。我相信存储在两个表中是必要的,但仍然不能完全确定是否要在login\u I中保留最后一次登录,但可能需要更多时间。我很想听到其他的回应。我同意,如果你非常需要它,而且它并不重要,那么将“复制品”存储在login_I中。为了简化维护,您可以在登录时尝试使用触发器来计数+,并在登录时设置新的时间。