Дизайн таблицы MySQL для постов в стиле Facebook, который подходит для одного ко многим или для многих - PullRequest
0 голосов
/ 27 февраля 2012

Я пытаюсь создать / спроектировать таблицу, которая будет служить цели для системы публикаций / комментариев, аналогичной google +, которая может поддерживать двунаправленные отношения «один ко многим / многие ко многим». Что у меня сейчас есть

member_id, 
post_id, 
post_body, 
post_date, 
post_flagged, 
post_shared, 
post_likes
  • member_id = идентификаторы моих членов
  • post_id = мой столбец автоинкремента, чтобы дать каждому сообщению уникальный идентификатор
  • post_body = фактическое сообщение
  • post_flagged = часть системы модерирования, которую я собираюсь построить позже
  • post_shared = некоторая форма группировки идентификаторов (не знаю, как это будет работать, но подумайте гугл + круги)
  • post_likes = group_id для тех, кому нравится эта публикация.

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

То, что я в конечном счете ищу здесь в настоящее время, я предполагаю проверку здравомыслия. Вышеприведенная конструкция / схема выглядит так, как будто она может работать? Вы бы добавили / удалили / изменили его каким-либо образом? Если нет / или если так. Может кто-нибудь также предложить, что может быть хорошим способом сделать столбец post_shared? Существует ли какой-либо тип объекта или средства для хранения данных в этом столбце, которые могли бы служить целям логики кругов Google+?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Из того, что я понимаю, ваш столбец post_shared является тем, о чем здесь действительно идет речь.Допустим, у вас есть пост, который направлен на 5 «кругов» (мы украдем этот термин у Google).Как бы вы указали это в текущей настройке?

Единственный способ сделать это в одном поле - это что-то вроде {1, 2, 3, 4, 5}, где эти числа являются идентификаторами круга.Это не очень хорошая практика.

Лучший способ добиться этого - иметь такую ​​схему:

  • Сообщений: post_id, post_body, post_flagged, post_likes
  • Круги: circle_id, ...
  • PostCircles: post_id, circle_id

Таблица PostCircles покажет, какие сообщения видны для каких кругов.В приведенном выше примере у вас есть 5 строк в таблице PostCircles.Допустим, идентификатор записи: 1:

post_id    |    circle_id
1               1
1               2
1               3
1               4
1               5

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

1 голос
/ 27 февраля 2012

post_shared не должно быть в основной таблице сообщений.

для нормализованного решения вам понадобится таблица circles, таблица users, таблица posts и несколько ассоциативных таблиц, чтобы указать, какие из них связаны - что-то вроде

user_circles
post_circles
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...