Структура БД для форума

malina95

Дракула кода:)
Здравствуйте!!! Поздравляю всех с прошедшим новым годом, желаю счастья, здоровья и удачи во всех делах... Подскажите пожалуйста хорошую структуру БД для форума... Я решил попробовать написать свой форум чтобы попрактиковаться, но не знаю как составить правильную структуру базы данных. Я вас очень прошу ответить детально на этот вопрос, и надеюсь что вы отзовётесь
 

Vladson

Сильнобухер
Предлагаю вам самому её составить. (Если вы хотите создать что-то уникальное и своё, а не копировать чужой труд)

Сделать это не сложно, отвлекитесь от деталей и посмотрите образно "что есть форум".

- Логично что там будет таблица пользователей с ником и паролем (чтоб скрипт регистрации юзеров заносил туда "данные" а скрипт логина их от туда доставал) вероятно и с другими данными (мыло, подпись, сайт, итд)
- Логично предположить что если это форум, то стало быть таблица с форумами тоже будет (если планируются вложенные форумы то логично что таблица будет хранить дерево из названий разделов)
- Смешно было бы предполагать что в форуме не было бы таблицы с постами (причём на ваше усмотрение можно даже не создавать отдельно таблицу с топиками а просто выбирать их из таблицы постов, хотя многие люди предпочитают и отдельные таблицы)
- Таблица приватных сообщений также вероятна (тут всё просто, явно она будет содержать отправителя, получателя, тему и текст)

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

Проблем в таких вещах мало. Главное ни за кем не повторяйте, а посмотрите на ситуацию со стороны. Не вдавайтесь в технику, просто составьте примерную схему (можно даже на бумаге) и дерзайте. Если же вы хотите чтоб за вас кто-то её составил, то лучше просто возьмите готовый форум, и используйте готовое. Там люди годами пытались составить, в этом топике никто столько труда не вложит.
 

Vladson

Сильнобухер
Ну типа как тут, заходишь в офтоп, а там внутри ещё форумы (корзина, решения)
 

malina95

Дракула кода:)
Ясно, ну с бд я походу дела потихоньку разбираюсь... Уже есть вывод топиков
 

malina95

Дракула кода:)
Посмотрите пожалуйста как получилось, очень прошу высказывать все мнения и комментарии на счёт форума http://phpforum.p.ht/
 

Redjik

Джедай-мастер
Та че там форум, код на github закинь, тогда уж обосрем ;)
 

WMix

герр M:)ller
Партнер клуба
муза парня пробила видать,...вижу чрез облако интернета как от самоудовлетворения живот поглаживает....
показывай базу... хоть даж create table...
 

malina95

Дракула кода:)
PHP:
CREATE TABLE IF NOT EXISTS `forum_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `meta_d` varchar(255) NOT NULL,
  `meta_k` varchar(255) NOT NULL,
  `description` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;


CREATE TABLE IF NOT EXISTS `forum_message` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `post_id` int(11) unsigned NOT NULL,
  `author` varchar(255) NOT NULL,
  `message` text NOT NULL,
  `date` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ;



CREATE TABLE IF NOT EXISTS `forum_posted` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `cat_id` int(11) unsigned NOT NULL,
  `title` varchar(255) NOT NULL,
  `author` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `date` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;


CREATE TABLE IF NOT EXISTS `forum_users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `login` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `date` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
 

malina95

Дракула кода:)
И обсерать ничего не надо, это практика, я его скорее всего выкладывать никуда не буду
 

malina95

Дракула кода:)
Всмысле? Что там с паролем? Если что то это просто таблица без защиты, я пока даже пароли не шифрую
 

WMix

герр M:)ller
Партнер клуба
а зачем в таблице `forum_users` поле `id` int(11) unsigned NOT NULL AUTO_INCREMENT, если ты его не используешь?
и наоборот, почему в таблице `forum_posted` поле `author` varchar(255) NOT NULL, не является ключом?
 

malina95

Дракула кода:)
Может уникальным? Если ним то в автор пока пишется имя пользователя
 

WMix

герр M:)ller
Партнер клуба
`post_id` int(11) unsigned NOT NULL, `cat_id` int(11) unsigned NOT NULL, и это тоже ключики... или правильней индексы...
 

WMix

герр M:)ller
Партнер клуба
CREATE TABLE IF NOT EXISTS `forum_message` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`post_id` int(11) unsigned NOT NULL,
/* `author` varchar(255) NOT NULL, */
`author_id` int(11) unsigned NOT NULL,
`message` text NOT NULL,
`date` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `author_id` (`author_id`),
KEY `post_id` (`post_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ;
 

WMix

герр M:)ller
Партнер клуба
ну как-то так яб написал..., зачем? ну это чтоб 2 таблички связывать и это не напряжно процесору было
 
Сверху