надеюсь, что у всех вас был счастливый новый год.Базы данных: Создание журнала действий, как обрабатывать различные ссылки?
Итак, мой вопрос в том, что лучший способ сделать журнал действий. Позвольте мне объяснить это с примера предположим, что у нас есть эти объекты:
User
Friend
(Пользователь является другом другого пользователя, многие ко многим)
Message
(Пользователь может получить сообщение другому пользователю)
Group
(Внутренний абонент может находиться в различных группах)
Game
(игра может быть воспроизведен с различными игроками, имеет Некоторая информация напоминает дату игры. это приводит к двум сказках, играх и games_users, последний хранит связи между пользователем и игрой)
Теперь я хотел бы сделать журнал, например:
Пользователь A (ссылка на пользователя) сделал новый друг, пользователь B (ссылка на пользователь)
пользователя A (ссылку на пользователь), в (ссылку на пользователь) и C (ссылка на пользователь) играла в игре (ссылку на игру)
Пользователь C (ссылка для пользователя) присоединился к группе D (ссылка для группы)
Итак, я хотел создать гибкий журнал, который мог бы хранить как можно больше ссылок и ссылок на разные объекты (например, пользователь и игра).
Я знаю два способа сделать это, но все они имеют одну или несколько проблем:
При входе в действие я непосредственно хранить чистый текст Я хочу (т.е. только 1 символ поля, которые магазин «Пользователь С присоединился к группе»). Но проблема такая, этот текст нужно перевести на другие языки, и у меня не может быть поля для каждого языка.
Имея основную таблицу
log
, в которой каждая строка представляет собой действие журнала и код, поэтому я знаю, какое действие это, то есть пользователь присоединился к группе, x пользователи играли в игру. Затем у меня есть другая таблица для каждого из типов внешнего ключа, поэтому я бы получилlog_user
,log_group
иlog_game
Например,log_user
с полем, ссылающимся наlog
и другим ссылкойuser
. Таким образом, у меня может быть несколько пользователей для одного и того же действия с журналом. Проблемы: довольно сложные и могут привести к существенным накладным расходам в зависимости от действия журнала, которое я должен был бы запросить для нескольких таблиц. Правильно ли это, будет ли он слишком интенсивным?
Итак, я открыт для новых идей и мозгового штурма. Каков наилучший подход для такого рода проблем? Заранее спасибо, я надеюсь, что объяснил это ясным образом. Если у вас возникли вопросы, пожалуйста, спросите.
Редактировать: Я решил начать щедрость, поскольку я не очень доволен ответами, которые я получил.При необходимости сделайте какие-либо разъяснения. Спасибо
Я хочу что-то очень похожее на facebook/orkut/social networks "friend updates". Это будет отображаться для пользователей.
Clash: см. Править выше. Я думаю, что это касалось большинства ваших вопросов. – Hogan
Ничего себе! Я понятия не имел, что могу сделать «AND LogActorType =« Пользователь »' в предложении JOIN. Удивительно! Большое спасибо за помощь. Попробуем позже. – Clash
Да, предложение JOIN велико. Не знаю, как использовать его, является причиной большинства ошибок, которые я вижу на SO (часто используя подзапрос вместо соединения). – Hogan