Рекомендации по проектированию таблиц SQL - PullRequest
2 голосов
/ 08 сентября 2011

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

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

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

Это правильно / лучше?

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

Ответы [ 4 ]

4 голосов
/ 08 сентября 2011

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

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

3 голосов
/ 08 сентября 2011

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

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

На самом деле, это решение, вероятно, будет быстрее, поскольку вы можете получить псевдоним в то же ВЫБРАТЬ, когда вы получаете другую информацию.

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

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

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

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

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

3 голосов
/ 08 сентября 2011

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

0 голосов
/ 08 сентября 2011

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

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

...