数据库结构 - 两个表还是一个表?

时间:2011-09-06 19:08:53

标签: mysql

我有一个处理用户登录总数的数据库表和另一个处理各个登录会话的表。我应该将这些表分开,还是应该继续合并?

users_logins
    users_id
    successful_logins(total)
    last_online

users_logins_sessions
    users_id
    session_id
    ip_address
    user_agent
    last_activity(time-stamp)

3 个答案:

答案 0 :(得分:1)

这实际上取决于你,但我理解为(在此做出假设)会话被清除了?通常在我的应用程序会话过期,并且创建一个新会话时,我不确定您是如何在users_logins_sessions中管理它的,因为您没有提供更多关于此的信息,它可以以任何方式工作。

如果你的'session'表永远不会删除条目,你应该合并,或者如果会话到期/每隔一段时间删除就不管它是什么。

我还假设users_id在其他地方使用,如果你将它们分开。

答案 1 :(得分:1)

您可能会丢失user_logins,因为我假设last_online和last_activity包含相同的值。

但是,您必须查询user_logins_sessions表以获取给定用户成功登录的总数。

SELECT COUNT(user_id) FROM user_login_sessions WHERE user_id = ?

答案 2 :(得分:1)

如果您只有users_logins_sessions表,则可以轻松查询successful_logins和last_online。

SELECT COUNT(1) AS successful_logins 
    FROM users_logins_sessions 
    WHERE users_id = <user_id>;

SELECT MAX(last_activity) AS last_online 
    FROM users_logins_sessions 
    WHERE users_id = <user_id>;