Что такое хорошая схема БД и метод для запроса функции «Стена Facebook»

0

Я пишу простую функцию типа "Facebook Wall", где пользователь может публиковать на стене другого человека, и люди могут просто ответить на этот пост на стене или опубликовать новый пост стены. Пользователи не могут ответить на ответ, вы можете отвечать только на оригинальную стену (как и на facebook).

Моя первоначальная схема mySQL db, о которой я думал, выглядит следующим образом:

post_id (pk)
post_text (char)
date_posted (datetime)
is_parent (bool)
parent_id (id of parent)

Как это работает:
Если кто-то отправляет новый пост стены, is_parent будет установлен в 1, а parent_id будет установлен в значение null.

Если кто-то отправляет ответ на этот пост, is_parent будет 0, а parent_id будет установлен на идентификатор родительского сообщения.

Мои вопросы

  • Это хорошая схема для этой функции? Если нет, какую схему вы бы использовали?
  • Если это хорошо, как я могу сделать один запрос, который вернет все настенные сообщения в порядке последнего опубликования, а также группирует дочерние элементы с родителем, чтобы при повторении итерации результата запроса родитель и дети все вместе.
  • Или лучше сделать 2 запроса? Один запрос для всех родителей, 1 запрос для детей.
Теги:
schema
parent-child

2 ответа

1
Лучший ответ

Прежде всего. Я не думаю, что вам нужно два поля для этой же цели. parent_id достаточно в этом случае. Когда у вас установлен post_id auto-increament. Первое назначенное значение будет равно 1, поэтому parent_id = 0 никогда не произойдет. Вы можете предположить, что parent_id = 0 это сообщение первого уровня.

Было бы лучше использовать один запрос для всех ответов.

  • 0
    Спасибо Darkerstar. Это имело смысл в отношении parent_id = 0. А также значительно упростило запрос всех ответов в виде отдельного запроса.
0
  • Не знаю/возможно. Потерять столбец is_parent.
  • Недавно я сделал это, запросив все сообщения, отсортированные по возрастающему порядку post_id. Затем кэшировал его в 2D-массиве с некоторым PHP (массив ['parrent'] → array ['post']... []).
  • Нужно сделать это в методе, описанном в № 2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню