Mysql Вопрос по проектированию БД

stmegabit

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

Gremboloid

инженера Гр...
Вы, как проектировщик, сами должны принять решение.
Выпишите все плюсы и минусы того или иного решения, которые вы видите. Мы обсудим их.
 

stmegabit

Новичок
Вы, как проектировщик, сами должны принять решение.
Выпишите все плюсы и минусы того или иного решения, которые вы видите. Мы обсудим их.
1. Вариант все комментарии в одной таблице с полем, определяющим тип комментария:
Плюсы:
- простая реализация и обработка (например список непрочитанных комментариев)
Минусы:
- нет возможности использовать, например, каскадное удаление по внешнему ключу
- все данные в одной таблице, не проблема ли для производительности, когда комментариев станет реально много?
2. Вариант для каждого типа комментариев - своя таблица
Плюсы:
- любая работа с внешними ключами
- меньшие затраты по времени на выборку и поиск данных
Минусы:
- много таблиц
- неудобства обработки всех комментариев (тот же пример с непрочитанными комментариями)
 

Gremboloid

инженера Гр...
с полем, определяющим тип комментария
А как предполагаете разделять комментарии к (например) новости "А", к статье "Б", к новости "Б"?
список непрочитанных комментариев
комментарии читает один пользователь или у каждого свой список что он уже прочел?
каскадное удаление по внешнему ключу
не надо считать минусом, достаточно повесить триггер на удаление
комментариев станет реально много
даже если таблица разрастется можно разбить таблицу
 

stmegabit

Новичок
1. По поводу разделения комментариев. Есть несколько "объектов" которые можно комментировать: фотографии, новости, профиль пользователя и так далее. Каждому даётся свой идентификатор. Например, комментарии к фотографиям - 0, к новостям - 1 и т.д. И если все комментарии будут в одной таблице, то у неё в структуре будут два поля тип комментария (0,1 и др) и идентификатор внутри типа - тут уже идентификатор статьи или новости, к которой относится этот комментарий и дальше уже параметры самого комментария.
2. Список непрочитанных комментариев у каждого свой.
3. На счет триггера как-то не подумал) Спасибо за идею.
4. С разделением таблиц никогда не сталкивался, почитаю...
 
Сверху