2013-02-12 2 views
0

В настоящее время у меня есть одна таблица действий, которая ссылается на другие таблицы в зависимости от типа активности.Как структурировать таблицу действий пользователя в MySQL?

id | type | user_id | source_id | misc_id | date 

Столбец типа говорит мне, какой вид деятельности пользователь выполнил (следовать, любил, подружитесь, статус и т.д.) и источник идентификатор содержит идентификатор таблицы относительно типа действия.

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

E.g. пользователь создает статус, а затем удаляет его, или пользователь дружит с кем-то, который впоследствии удаляется из базы данных.

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

+0

какие проблемы это вызывает? – Bulat

+0

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

+0

Ну, добавьте поле «Обратное» типа даты и фильтруйте его. Если вы покажете свой SQL, будет проще найти решение. – Bulat

ответ

1

Вот мои мысли.

Если пользователи могут что-то удалить, вы можете записать это также в свою таблицу действий.

Я хочу скрыть эту активность, вы можете добавить поле ReversedOn и обновить его соответствующей датой. Тогда вам просто нужно отфильтровать действия, которых не существует.

Если это не вызывает каких-либо проблем с пользовательским интерфейсом, то вы можете просто позволить этому быть.

1

Вам нужно будет принять любой из этих подходов.

  1. Когда пользователь удаляет, только мягкое удаление на внутреннем интерфейсе, пометив их как удаленные вместо жесткого удаления из таблицы. В этом подходе вам нужно будет ввести новый столбец «delete_flag».

  2. Архивировать таблицы и перемещать записи в другую таблицу при удалении. Но это будет сложным кодированием, так как производительность может быть не такой, как ожидалось.

+0

Спасибо за ответ пару вопросов. Какая разница, добавьте флаг удаления в строку вместо того, чтобы просто удалять строку, поскольку строка больше не требуется. Также о каких вещах, которые пользователь не имеет контроля? У меня есть активность, когда пользователи добавляют новости и страницы профиля на сайт, но я часто удаляю новости прямо из phpmyadmin, а не через раздел admin. –

+0

Вы можете использовать ограничения внешнего ключа, когда используете флаг удаления. Его следует решать по бизнес-логике. всякий раз, когда вы извлекаете действия для администратора, вам необходимо применить ограничение, которое должно быть false.Это можно применить, если вы все еще хотите сохранить данные, чтобы они были где-то использованы. Когда вы считаете, что эта запись и другие записи, ссылающиеся на нее, больше не требуются, вы можете удалить все эти записи. – Slowcoder

Смежные вопросы