2016-07-17 6 views
-1

Скажем, у меня есть база данных с 3 таблицы: Stream, Tag и PostРазличные виды для разных пользователей

  • поток имеет один тег. Несколько потоков могут иметь один и тот же тег.
  • Поток принадлежит одному пользователю.
  • В теге есть много сообщений.
  • Различные теги могут иметь один и тот же пост.
  • Каждый пользователь, который открывает свой поток, получает сообщения (через тег) и может удалять (или скрывать) сообщения, которые он не хочет видеть (но только для него, а не для других).

Что было бы подходящим способом достижения этого? Очевидно, мне понадобится какой-то soft-delete флаг на сообщениях. Я в настоящее время есть 2 идеи в виду:

  1. Создайте другую таблицу, которая будет действовать как вид потока с колоннами stream_id, post_id и is_deleted
  2. Добавить deleted столбец Stream, который содержит массив JSON удаленных сообщений идентификаторы. Проблема с этим подходом заключается в запросе, основанном на состоянии is_deleted.

Есть ли лучшие способы?

Примечание: В настоящее время мне нужно Tag, чтобы остаться в своем собственном столе, а не хранить его как текст в колонке в Stream

+0

Второе «решение» приносит больше проблем, чем решает. Забудь об этом. – axiac

+0

проверьте мои [Таблицы соединения] (http://stackoverflow.com/a/32620163). Они подключают tableA к tableB. У вас есть свои индивидуальные столбцы. – Drew

+0

Почему вы хотите удалить сообщение? Вы говорите * «может удалять (или запрещать) сообщения, которые он не хочет видеть (но только для него, а не для других)». * Пользователь не удаляет сообщение, они только удаляют сообщение из своего потока. В потоке есть много сообщений, и сообщение может появляться в нескольких потоках. Это отношение «многие ко многим», которое должно быть реализовано с использованием таблицы ссылок. Когда пользователь удаляет сообщение, вам нужно удалить строку из этой таблицы. Вы также можете добавить столбец «is_deleted» в эту таблицу и установить «is_deleted = 1» для мягкого удаления, если вы хотите разрешить пользователю отменять удаление ... – axiac

ответ

0

Вы должны иметь новую таблицу со столбцами POST_ID, is_deleted & user_id. Таким образом, вы можете легко справиться с этим, иначе это будет напряженная работа в соответствии с вашими вариантами. Имя таблицы будет как таблица перекрестных ссылок ex: user_deleted_posts_xref

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