Sql 如何在数据库中存储日志?
我的应用程序允许用户互相发送文件。普通用户可以编辑他们的联系人、更改密码等。此外,管理员用户还可以添加/删除用户,并查看所发生事件的日志。我的问题是如何在MySQL数据库中存储此日志 我想这样存储日志:Sql 如何在数据库中存储日志?,sql,mysql,database,database-design,Sql,Mysql,Database,Database Design,我的应用程序允许用户互相发送文件。普通用户可以编辑他们的联系人、更改密码等。此外,管理员用户还可以添加/删除用户,并查看所发生事件的日志。我的问题是如何在MySQL数据库中存储此日志 我想这样存储日志: log_id time user_id action_type description ------ ---- ------- ---------------- --------------------------------
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\u类型
s,我认为ENUM
将不是一个好的选择。所以我想把它做成VARCHAR(..)
,比如description
这似乎合理吗
我很乐意听取任何意见/建议。如果您关心添加其他操作类型,请创建一个单独的表来存储您的操作类型,并使用外键将其连接到日志表:
日志
表格:
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
...
id name
--- ---------------
1 User added
2 Contact added
.....
动作类型
表格:
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
...
id name
--- ---------------
1 User added
2 Contact added
.....
恼怒:调用主键
id
,而不是log\u id
。您可以避免难看的重复:logs.log\u id
@meagar-使用log\u id没有错,这是一种推荐的命名方案。它可以确保列名在进行连接时不会发生冲突,而不会键入一长串别名。@mellowsoon这就是为什么我说“pet peeve”,而不是“you't doing It right”。