2011-09-06 86 views
0

我有一個數據庫表處理用戶登錄總數和另一個表處理個人登錄會話。我應該將這些表格分開嗎?還是應該繼續併合並它們?數據庫結構 - 兩張桌子還是一張桌子?

users_logins 
    users_id 
    successful_logins(total) 
    last_online 

users_logins_sessions 
    users_id 
    session_id 
    ip_address 
    user_agent 
    last_activity(time-stamp) 

回答

1

您可能會丟失user_logins,因爲我認爲last_online和last_activity包含相同的值。

然而,您將不得不查詢user_logins_sessions表以獲取給定用戶成功登錄的總數。

SELECT COUNT(user_id) FROM user_login_sessions WHERE user_id = ? 
+0

我喜歡這個想法。 –

+0

請參閱@trevors for last_online的SQL答案 – Bruce

1

這真的取決於你,但我理解它(假設在這裏)會話被清除?通常在我的應用程序中,會話過期並創建一個新的會話,但我不確定在users_logins_sessions中如何管理會話,因爲您不會提供更多信息,它可以以任何方式工作。

如果您的'會話'表永不刪除條目,或者如果會話過期/被間隔刪除,則保持原樣。

我還假設users_id用於其他地方,如果你讓他們分開。

+0

感謝您的意見。我想跟蹤會話,並以某種方式能夠強制登錄用戶,如果我將其status_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>; 
+0

您也可以從單個查詢中檢索這兩個聚合,不是嗎? –