Этот вопрос поднялся во многих случаях для меня, но его трудно объяснить, не указав конкретного примера. Итак, здесь идет речь:Сериализация или сохранение отдельной таблицы?
Давайте немного подумаем, что мы создаем базу данных отслеживания проблем в PHP/MySQL. Существует таблица «задач». Теперь вам нужно отслеживать людей, которые связаны с конкретной задачей (прокомментировали или нет). Эти люди получат электронное письмо при изменении задачи.
Существует два способа решить эту ситуацию. Одним из них является создание отдельной таблице tasks_participants:
CREATE TABLE IF NOT EXISTS `task_participants` (
`task_id` int(10) unsigned NOT NULL,
`person_id` int(10) unsigned NOT NULL,
UNIQUE KEY `task_id_person_id` (`task_id`,`person_id`)
);
И запросить эту таблицу с SELECT person_id WHERE task_id='XXX'
.
Если есть 5000 задач, и каждая задача состоит из 4 участников в среднем (репортер, субъект, для которого задача принесла пользу, решатель и один комментатор), тогда таблица task_participants будет 5000 * 4 = 20 000 строк.
Существует также другой способ: создать поле в таблице задач и хранить сериализованный массив (JSON или PHP serialize()) person_id. Тогда не понадобится эта таблица из 20 000 строк.
Ваши комментарии, в какую сторону вы бы хотели пойти?
Это именно тот ответ, который я бы дал :) @OP: http://en.wikipedia.org/wiki/Database_normalization заслуживает внимания и для дальнейших подробностей. –
Также посмотрите, как должна быть смоделирована роль человека. Я предполагаю, что участник «назначенный» должен быть непосредственно привязан в таблице задач. У меня также была бы таблица комментариев, содержащая ссылку на автора. –