sql - 如何在数据库中存储登录?

标签 sql mysql database database-design

我的应用程序允许用户相互发送文件。普通用户可以编辑他们的联系人、更改密码等。此外,管理员用户可以添加/删除用户并查看发生的日志。我的问题是如何将此日志存储在 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

这看起来合理吗?

我很乐意听到任何意见/建议。

最佳答案

如果您担心添加额外的操作类型,请创建一个单独的表来存储您的操作类型,并使用外键将其连接到您的日志表:

日志表:

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
.....

关于sql - 如何在数据库中存储登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3965387/

相关文章:

sql - PostgreSQL 使用内连接删除

java - 获取 java.sql.SQLException : Operation not allowed after ResultSet closed

python - 我可以让 Django 在创建时返回记录的 ID 吗?

mysql - 在 MySQL 中索引电子邮件地址的最有效方法是什么?

php - 用另一个数据库的结果填充数据库?

mysql - RDB 中的常规索引和复合索引是如何实现的?

java - 如何查询具有复合主键的表

sql - 如何仅在表存在时删除 Amazon Redshift 中的表

mysql切字符串,第一个字符?

c# .net 读取 .mdb 文件