Как хранить Вход в базу данных? - PullRequest
4 голосов
/ 19 октября 2010

Мое приложение позволяет пользователям отправлять файлы друг другу. Обычные пользователи могут редактировать свои контакты, менять пароль и т. Д. Кроме того, пользователи-администраторы могут добавлять / удалять пользователей и просматривать журнал событий. У меня вопрос, как хранить этот журнал в базе данных 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.

Это кажется разумным?

Буду рад услышать любые комментарии / предложения.

1 Ответ

12 голосов
/ 19 октября 2010

Если вас интересует добавление дополнительных типов действий, создайте отдельную таблицу для хранения типов действий и присоедините ее к таблице журналов с помощью внешнего ключа:

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
.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...