3

我有如下的登录日志表

Field       Type
login_id    int(10)     NOT NULL
platform    varchar(50) NOT NULL
browser     varchar(50) NOT NULL
ipaddress   varchar(50) NOT NULL
last_login  datetime    NULL
last_logout datetime    NULL

但是在这个结构上,我很困惑我可以添加登录时间,但很难更新它以用于注销时间。我没有添加主键,因为日志很频繁,主键很快就会达到最大值。最好的方法应该是什么?请帮忙。

4

4 回答 4

6

像这样同时具有登录和注销的单行只是自找麻烦,因为它假定每个登录都有相应的注销,但事实并非如此。有时他们会在公共计算机上登录并且永远不会退出,有时他们会打开一个匿名窗口并登录。

相反,我会将其缩减为一种类型:

  • 登录ID
  • 平台
  • 浏览器
  • IP地址
  • 日期
  • 类型(登录/注销)
于 2012-03-14T07:00:05.597 回答
2

为什么不只创建具有 2 列的表注销日志。
参考相应的 login_id 和注销时间。

last_login 和 last_logout 对我来说没有意义,但你的逻辑可能需要它。因为 IMO,您应该避免使用可以有 NULL 的列。

编辑:作为一个插件,我会说你为什么要积累这么多数据。如果只是为了分析用户的浏览器、平台,可以使用谷歌分析。然后,您可以为每个用户保留 last_login 和 last_logout。同样,您的业务逻辑可能需要它。

于 2012-03-14T06:50:26.203 回答
0

我的建议是在每个用户重新登录后更新其条目,以避免主键达到最大值。

于 2012-03-14T06:56:37.743 回答
0

我的建议是,如果您只需要最后一次登录和最后一次注销的信息......将 user_id 作为主键......只需更改该信息而不是添加新记录......您可以添加一个计数字段增强您的功能...获取该人登录的计数...

如果你想要每一个登录数据......只需使用序列化概念......它会有所帮助......将数组设置为键,并将您的最后一次登录,注销,浏览器作为数组的值......序列化并存储在数据库中...

于 2012-03-14T06:47:17.280 回答