2010-10-19 78 views
4

我的應用程序讓用戶互相發送文件。普通用戶可以編輯他們的聯繫人,更改密碼等。此外,管理員用戶可以添加/刪除用戶並查看所發生事件的日誌。我的問題是如何將這個日誌存儲在MySQL數據庫中?如何存儲登錄數據庫?

我認爲存儲日誌是這樣的:

log_id time user_id action_type      description 
------ ---- ------- ---------------- ---------------------------------------- 
    1  ....  4  User added   Added new user: alex 
    2  ....  1  Contact added  Added contact Paul to group Family 
    3  ....  1  User removed  Removed user: gabrielle 
    4  ....  3  Files sent   Sent files 3,5,7,14 to contacts 2,4,8 
    5  ....  8  Group added  Added new group: Family 
    6  ....  8  Password changed 
    7  ....  8  First Name changed Changed First Name from Michael to Misha  

什麼類型將是最好的action_type?由於未來可能會增加新的action_type,我認爲ENUM不會是一個好選擇。所以我想讓它變成VARCHAR(..),就像description一樣。

這是否合理?

我很樂意聽到任何意見/建議。

+2

忌諱:打電話給你的主鍵'id',而不是'log_id'。避免醜陋的重複:'logs.log_id' – meagar 2010-10-19 04:58:34

+4

@meagar - 使用log_id沒有任何問題,並且它是推薦的命名方案。它確保列名在進行連接時不會發生衝突,而無需輸入長長的別名列表。 – mellowsoon 2010-10-19 05:09:52

+2

@mellowsoon這就是爲什麼我說「pet peeve」而不是「你做錯了」。 – meagar 2010-10-19 13:30:04

回答

12

如果你擔心增加額外的動作類型,做一個單獨的表來存儲你的動作類型和,並將其與外鍵連接到您的日誌表:

logs表:

log_id time user_id action_type_id  description 
------ ---- ------- ---------------- ----------------------------------- 
    1  ....  4   1   Added new user: alex 
    2  ....  1   2   Added contact Paul to group Family 
... 

action_types表:

id name 
--- --------------- 
1  User added 
2  Contact added 
.....