Как лучше организовать структуру таблицы тем форума?

  • Автор темы GaRRiLL
  • Дата начала

GaRRiLL

Guest
Как лучше организовать структуру таблицы тем форума?

1. Есть у меня вывод топиков форума, нужно формировать ещё инфу об авторе, дате последнего сообщения и т.д. Сейчас в таблице topics есть просто поля first_post_id, last_post_id, с помощью которых можно с помощью связанной выборки вытащить всё, что надо.
Вот такая вот выборка:
PHP:
SELECT t.topic_id, t.topic_subject, u.username AS author_name, u.user_id AS author_id, u2.username as last_poster_name, u2.user_id as last_poster_id, p.post_time AS first_post_time, p2.post_time AS last_post_time 
	FROM forums_topics t, users u, forums_posts p, forums_posts p2, users u2 
	WHERE t.forum_id = 6 
		AND p.poster_id = u.user_id 
		AND p.post_id = t.first_post_id 
		AND p2.post_id = t.last_post_id 
		AND u2.user_id = p2.poster_id
Структура данных здесь нормальная. Но вот выборка эта из пять таблиц, не будет ли это медленным при реальной нагрузке?

2. Добавить в topics поля first_post_time, last_poster_id, last_poster_name, last_post_time
и тянуть это так:
PHP:
SELECT t.*
	FROM forums_topics t, users u, forums_posts p, forums_posts p2, users u2 
	WHERE t.forum_id = 6
Что же лучше: правильно организовать структуру или так сказать извратиться со структурой для того, чтобы облегчить SELECT и тем самым засорять одну таблицу тем, что есть в другой?
 

alpes

Весь мир на ладони
Если индексы раставлены то тормозить вроде как не должно.
А на счет u.user_id хотел спросить, а почему бы не сделать u.username (т.е. логин) ключевым полем?! И заменив везде ссылку id пользователя на _login, получим:
PHP:
SELECT t.topic_id, t.topic_subject, p.poster_login AS author_name, p2.poster_login as last_poster_name, p.post_time AS first_post_time, p2.post_time AS last_post_time
FROM forums_topics t, forums_posts p, forums_posts p2
WHERE t.forum_id = 6 
        AND p.post_id = t.first_post_id 
        AND p2.post_id = t.last_post_id
 

Perf2k2

Guest
alpes, а если пользователь свой ник сменит? Или логин и ник это разные вещи?
 

alpes

Весь мир на ладони
Разрешение на смену - это уже зависит от организации данных, например здесь на форуме здается нельзя сменить свое имя участника, поэтому можно смело его сделать ключем и во всех связях будет использоваться именно оно а не id записи. К томуже это удобно везде видеть имя а не id, когда просматриваешь таблицу.
 

GaRRiLL

Guest
Нет. Ник ключом не будет. Это неправильно. Индексы конечно же стоят. По идшникам.
Сам же склоняюсь к первому варианту, потому что это грамотно.
 
Сверху