надеюсь, что вы все были счастливы в новом году.
Итак, мой вопрос, как лучше сделать журнал действий. Позвольте мне объяснить это на примере, предположим, что у нас есть эти сущности:
User
Friend
(Пользователь является другом другого Пользователя, отношение многие ко многим)
Message
(пользователь может отправить сообщение другому пользователю)
Group
(Пользователь может состоять в разных группах)
Game
(В игру можно играть с разными игроками, есть некоторая информация, например, дата игры. Это приводит к двум историям, games и games_users, последняя хранит отношения между пользователем и игрой)
Теперь я хотел сделать журнал, например:
Пользователь А (ссылка на пользователя) завел нового друга, Пользователь Б (ссылка на пользователя)
Пользователь A (ссылка на пользователя), B (ссылка на пользователя) и C (ссылка на пользователя) играли в игру (ссылка на игру)
Пользователь C (ссылка на пользователя) присоединился к группе D (ссылка на группу)
Итак, я хотел сделать гибкий журнал, который мог бы хранить столько ссылок, сколько я хотел, и ссылок на разные объекты (например, пользователя и игру).
Я знаю два способа сделать это, но все они имеют одну или несколько проблем:
При регистрации действия я напрямую сохраняю чистый текст, который мне нужен (т.е. только 1 поле char, в котором будет храниться «Пользователь C присоединился к группе»). Но есть проблема, этот текст нужно перевести на другие языки, и я не могу иметь поле для каждого языка.
Имея основную таблицу
log
, каждая строка которой представляет действие журнала и код, поэтому я знаю, какое это действие, то есть: пользователь присоединился к группе, x пользователей сыграли в игру. Затем у меня есть другая таблица для каждого из необходимых типов внешнего ключа, поэтому у меня будутlog_user
,log_group
иlog_game
. Например,log_user
с полем, ссылающимся наlog
, и другим, ссылающимся наuser
. Таким образом, у меня может быть несколько пользователей для одного и того же действия журнала. Проблемы: довольно сложные и могут привести к значительным накладным расходам, поскольку в зависимости от действия журнала мне придется запрашивать несколько таблиц. Это правильно, будет ли это слишком интенсивно использовать процессор?
Так что я открыт для новых идей и мозгового штурма. Каков наилучший подход для такого рода проблем? Заранее спасибо, надеюсь доступно объяснил. Если есть какие-либо вопросы, пожалуйста, спросите.
Редактировать: я решил начать щедрость, так как я не очень доволен полученными ответами. При необходимости внесу любые уточнения. Спасибо
Я хочу что-то очень похожее на "обновления друзей" facebook/orkut/социальных сетей. Это будет отображаться для пользователей.