数据库结构-两个表或一个表



我有一个数据库表处理用户登录总数,另一个表处理单个登录会话。我应该把这些表分开还是合并呢?

users_logins
    users_id
    successful_logins(total)
    last_online
users_logins_sessions
    users_id
    session_id
    ip_address
    user_agent
    last_activity(time-stamp)

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

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

SELECT COUNT(user_id) FROM user_login_sessions WHERE user_id = ?

这真的取决于你,但我的理解是(在这里假设)会话被清除?通常在我的应用程序会话过期,并创建一个新的会话,我不确定你如何在你的users_logins_sessions中管理它,因为你没有给出更多的信息,它可以以任何一种方式工作。

如果你的'session'表从不删除条目,你应该合并它,或者在会话过期/被删除的时候让它保持原来的样子。

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

如果您只有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>;

相关内容

最新更新