Нормализованная структура базы данных для форума - PullRequest
2 голосов
/ 10 ноября 2011

Общая нормализованная структура базы данных для форума - хранить все сообщения в таблице, где столбец определяет номер темы. Чтобы отобразить поток, нам нужно выполнить SELECT с предложением WHERE для номера потока (отсортировано по дате). В этом случае мы имеем дело с очень длинной таблицей для каждого запроса.

Это действительно лучший способ хранить сообщения и темы для форума?

Это сложнее для вопросов и ответов, таких как биржевые проекты, так как в дополнение к ответам (т. Е. Идентичным сообщениям на форуме) каждый ответ может иметь комментарии.

Какая структура базы данных наиболее эффективна для большого сайта, такого как stackoverflow?

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

Более быстрый способ запроса - это соединение между три и вложенным множеством, то есть celko-tree. Например, вы можете использовать идентификатор потока для построения троичного дерева с дополнительным левым и правым идентификаторами для запроса вложенного множества. Сложная вещь - вставить или удалить из этого дерева. Или вы можете взять карт-три с хэш-ключом для поиска влево и вправо. Но я думаю, что одного вложенного набора уже может быть достаточно, потому что тогда идентификатор является неупорядоченным.

2 голосов
/ 10 ноября 2011

Это далеко не так много, как SO, но в моем приложении я выбрал модель, в которой каждый пост имел

  • FK для родительского сообщения (в этом столбце корневые сообщения имеют значение null)
  • FK для корневого сообщения (корневые сообщения имеют свой собственный идентификатор в этом столбце, что немного неудобно для добавления новых корневых сообщений, но помогает при запросах)
  • ФК на их форуме

Это позволяет легко получить

  • корневые сообщения форума (поиск сообщений с нулевым родителем)
  • все сообщения в ветке одновременно (поиск во всех сообщениях с данным корнем)
  • представление потока в плоском режиме (на дату) или в древовидном режиме (поскольку каждый пост знает своего родителя)
  • последние сообщения на данном форуме (поиск последнего сообщения, сгруппированного по форуму)
1 голос
/ 10 ноября 2011

, если вы принимаете форумы, это другая форма древовидной структуры - я бы предложил вложенный набор или закрывающую таблицу для создания связей между постами. вложенный набор таблица закрытия - не удалось найти хорошую ссылку для закрытия - извините!

Простое хранение потока и родительских идентификаторов может немного усложнить задачу ...

...