Как я могу создать систему комментирования, подобную этой, в Stack Overflow? - PullRequest
2 голосов
/ 06 июня 2009

Я большой поклонник дизайна и функциональности Stack Overflow. Итак, я хотел бы создать свой собственный дизайн для системы комментирования на основе того, который использовался для этого сайта!

Вопросы:

  • Какую структуру таблицы я должен использовать для хранения комментариев?
  • Какие SQL-запросы я мог бы затем использовать для извлечения сохраненных комментариев?

Ответы [ 2 ]

2 голосов
/ 07 июня 2009

@ ответ cletus полезен, но использует «extends», что вряд ли является стандартным термином для отношений, поэтому позвольте мне предложить свои 2 цента.

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

Таким образом, элементом будет таблица с PK ItemId, всеми полями, общими для всех элементов (временная метка, на которой он был создан, идентификатор пользователя в виде FK в таблице пользователей и т. Д.) И, возможно, «ItemType» msgstr "поле, используемое для выбора какой другой таблицы (Вопросы, Ответы, возможно, еще больше), чтобы получить конкретные детали для определенного элемента, если таковые имеются. Я бы, вероятно, проиндексировал каждый из них, так как я могу легко представить поиск элементов в определенный промежуток времени, опубликованных определенным пользователем, & c.

Комментарий будет иметь свой собственный PK CommentId, FK ItemId, временную метку, UserId автора и, возможно, еще пару столбцов, если вы разрешаете повышать / понижать голоса по комментариям (или даже просто повышать их голоса в виде SO) , пометка, & c.

Чтобы получить, скажем, "все комментарии пользователя IDC к элементам пользователя IDI", я бы запросил:

SELECT * FROM Comments
  JOIN Items USING (ItemId)
  WHERE Comments.UserId = @IDC
    AND Items.UserId = @IDI

Я надеюсь, что все другие интересующие запросы столь же очевидны, как и этот (если все интересные запросы тривиально просты, это хорошо говорит о схеме БД, которая делает их такими; -).

2 голосов
/ 06 июня 2009

Это довольно очевидная структура. Сущности:

Post: ID, Post Type (Question or Answer), Text, User ID
Question extends Post: Title
Answer extends Post:
Comment: ID, Post ID (attached to which Post), User ID, Text

И вы можете легко расширить это, чтобы добавлять теги, редактировать / редактировать, голосовать, отмечать и закрывать / открывать голоса.

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