Совет по дизайну таблиц SQL

Я создаю сайт сообщества, где вход в систему будет осуществляться по электронной почте, и участники смогут изменить свое имя / псевдоним.

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

Я за второй вариант, потому что я думаю, что было бы быстрее вытащить имя участника из него.

Это правильный/лучший способ?

Обновление: причина для другой таблицы в том, что мне нужно вытащить имя пользователя для разных разделов. Например форумы. Не было бы быстрее запросить небольшую таблицу для каждого имени пользователя для каждого сообщения в теме от?


person nLL    schedule 08.09.2011    source источник


Ответы (4)


Почему вы думаете, что второй вариант будет быстрее?

Если псевдоним является обязательным отношением «один к одному» к идентификатору участника, подходящее место для их хранения — в той же таблице. Это по-прежнему индексированный поиск по одной записи, поэтому он должен быть более или менее быстрым, чем ваш другой вариант.

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

Обновить, чтобы ответить на вопрос об обновлении:

Вторая таблица не меньше по количеству строк. Основными факторами при поиске SQL являются 1) количество записей в таблице и 2) количество возможных совпадений из проиндексированной части поиска.

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

Количество столбцов в таблице, которую вы ищете, обычно не имеет отношения к времени, затраченному на возврат данных (количество столбцов, которое вы на самом деле указываете в операторе SELECT, может иметь значение, но это не зависит от того, какую таблицу вы ищете). идет поиск).

Базы данных SQL очень и очень хорошо находят данные. Правильно структурируйте свои данные и позвольте базе данных заботиться о том, чтобы вернуть их обратно. Преждевременная оптимизация — это, как говорится, корень всех зол.

person Larry Lustig    schedule 08.09.2011

Я бы оставил одну таблицу и установил уникальное ограничение для электронной почты в этой таблице.

Я не вижу ни одного преимущества в добавлении еще одной таблицы.

person Anton Vidishchev    schedule 08.09.2011

Выберите первый вариант: сохраните имя/никнейм в таблице участников. В этом случае нет необходимости вводить дополнительную таблицу и связанные с ней накладные расходы.

person Joe Stefanelli    schedule 08.09.2011

Да, связывание идентификатора участника с другими свойствами — правильный путь.

Вы можете просто создать индекс по имени, чтобы ускорить ваши запросы.

person Icarus    schedule 08.09.2011