| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Форум и комментарии в одной таблице |
| Автор: ksnk 6.12.2010, 11:41 | ||
| Хочется получить схему хранения данных для списка задач -- минифорум -- блог -- комментарии к статьям на сайте -- сервис "FAQ", "Вопрос-ответ" -- гостевая книга. Зачем? Для сайта часто хочется вставить одно, другое или третье, а плодить лишние таблицы и код, их поддерживающий не хочется. предварительный список задач, которые должна поддерживать схема хранения данных -- работать с авторизацией и без. От минифорума потребуется -- создавать разделы, достаточно ветвистые по темам -- выводить постранично все ответы в разделе -- поиск по тексту сообщения, по индексу "цитируемого поста", по пользователю -- "новые сообщения с последнего посещения" От блога -- Создавать разделы -- размещать комментарий в разделе -- комментировать другие комментарии -- поиск по тексту комментария, пользователю гостевая - частный случай форума FAQ - частный случай гостевой придумалась такая схема таблицы (mysql)
Вероятно, здесь не хватает fulltext индекса для поля text, но я пока в раздумьях о выборе поискового движка. при ближайшем рассмотрении - это обычное Adjacency List дерево примерная дисциплина универсальной работы Если пользователь авторизован - заполняется поле user, если юзер не авторизован или желает выглядеть по новому - заполняем поле username Все поля, по которым возникает потребность искать - вынесены в отдельные поля. Все поля сообщения, которые достаточно только выводить - сериализуются в поле info. потеря скорости на этой операции не будет сильно сказываться, так как поля используются только для вывода информации и вывод на страницу идет постранично. примерный алгоритм работы с "комментариями" -- в комментарии присутствует> кроме юзера, текста и даты еще "цитируемый участок текста" и "цитируемый комментарий", соответственно, поля "quote" (сериализуется в info) и quote_id. Для каждого "места подключения комментария" на странице заводится пустая строка в таблице forum_tree. Ее индекс и будет parent'ом для всех комментариев этой точки. Для форума, гостевой книги, и т.д., также заводится "root"-овая строчка, от которой уже будем получать весь список тем форума. Индекс рутовой строки должен быть сохранен в конфигурации сайта. Таким образом в одной таблице имеется возможность хранить довольно много форумов, блогов и прочих фенечек. |
| Автор: ksnk 6.12.2010, 16:50 |
| А! вопрос то я не задал У кого какие потребности к форумам, гостевым и прочим комментариям были? Ну там модерирование сообщений, еще что ? |
| Автор: Muerto 6.12.2010, 20:07 |
| Имхо извращение Вещь вроде faq вопрос ответ как правильо маленькая и легенькая таблица... То что ты пытаешься сотворить , это большой не поворотливый монстр Какие преимущества держать все в одной таблице? Есть какая то средняя грань... явное дело что для каждого сообщения отдельная таблица не нужна... но и все в одну пихать не правильно! |
| Автор: bars80080 6.12.2010, 23:34 |
| имхо таково, что по сути - это одинаковые вещи. а раз так, то путь это и будет одним и тем же. лучше представить изначально, что всё - форум. далее, мы выделяем некоторый раздел и называем его faqом, ставим ему скрытый статус и рисуем отдельную страницу с соответствующим методом заполнения. тоже самое - гостевая книга, только здесь выделяем отдельную тему в скрытом разделе. блог - это всего лишь возможность пользователю создавать разделы. по сути это форум групп здесь на винграде. то есть эти вещи отличаются только заточенным интерфейсом. а скрипты выдачи данных и модули вставки/редактирования/перемещения данных - одни и те же. точнее - всего один класс на задачу |