2012-05-15 6 views
0

У меня есть 2 стола пользователей и комментарии.Присоединиться или добавить столбец?

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

Соединяется медленно, если в таблице много комментариев?

Какой я должен делать? Присоединитесь или добавьте имя пользователя колонки в комментарии.

спасибо.

ответ

3

Присоединение, вероятно, является лучшим, поэтому вы не храните данные в двух местах. Что делать, если имя пользователя изменено? Он не изменит имя пользователя для комментариев. Кроме того, объединение двух таблиц не требует много времени.

+0

просто убедитесь, что используете правильные индексы. – Sebas

+0

Изменение имени пользователя не важно для веб-сайта. Если есть хорошая разница в производительности, я могу без проблем жить без нее. – Azzoth

+0

Честно говоря, я не думаю, что вы увидите значительные отличия в производительности. Может быть, немного больше, так или иначе, но я думаю миллисекунды. – teynon

1

Это зависит от количества пользователей и комментариев. Имея denormalized db, это то, что вы просите, может быть быстрее, но тогда вам нужно позаботиться о том, чтобы обновить имя пользователя в обеих таблицах. Не забудьте добавить индекс для userid в таблицу комментариев, если вы идете по пути объединения. Итак, правильный ответ, на мой взгляд, согласен с объединением и, при необходимости, денормализовать.

+0

+1 за разговоры о денормализации – hafichuk

0

Если вы используете InnoDB, вы можете добавить столбец и добавить ограничения внешнего ключа. Это позволит повысить эффективность и меньше беспокоиться об обновлении индексов.

0

Единственная причина, по которой вы должны сохранить имя пользователя в таблице комментариев, - это то, что вы хотели узнать имя пользователя при создании комментария. Если имя пользователя впоследствии будет изменено, вы все равно будете иметь имя во время комментария.

В общем, вы хотите использовать соединение. Вы хотите, чтобы первичный ключ определялся в таблице, вероятно, как целочисленное значение с автоматическим приращением (идентификатором).

Если вы заинтересованы в производительности для получения всех комментариев для одного пользователя, вам следует создать индекс в таблице комментариев в поле идентификатора пользователя.

0

Лично я бы предпочел пользователю два простых отдельных запроса. Мне не нравится, что так много объединяется. Соединения просто продуцируют дублированные данные по определению. Возможно, вы захотите проверить http://www.notorm.com/, что представляет собой простой уровень доступа к php-db, идущий без единого доступа.

+0

Я бы проголосовал за это, но я набрал свою репутацию на низком уровне. Для двух отдельных запросов требуется больше запросов между сервером и базой данных. Как правило, MySQL может обрабатывать себя быстрее, чем пытаться обрабатывать вещи программно. – teynon

+0

Я только что указал, что лучше всего подходит для меня.Переданных избыточных данных нет, поэтому легче работать с такими данными результата в самом приложении. Я еще никогда не испытывал проблем с производительностью. – Andy

Смежные вопросы