Лучше ли название страны хранить в базе данных как целое число / число, а не как строку, содержащую ее название? - PullRequest
3 голосов
/ 29 января 2012

Я хотел бы знать, потому что я работаю над формой поиска и использую мышление sphinx, а для отфильтрованных атрибутов кажется, что принимаются только целые числа, но мои страны хранятся в БД в виде строк, содержащих их имена.

Поэтому я буду создавать свой собственный список стран со строками для отображения в меню выбора и значениями в виде целых чисел для хранения в БД. Просто интересно, почему разработчик гема (ruby on rails), который я использую, решил создать массив, содержащий только строки.

Этот вопрос не зависит от языка программирования. База данных - это база данных.

С уважением.

Ответы [ 5 ]

5 голосов
/ 29 января 2012

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

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

2 голосов
/ 29 января 2012

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

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

0 голосов
/ 29 января 2012

Было бы лучше хранить главную справочную таблицу с целочисленным отображением страны. Тогда на страну можно ссылаться в других таблицах как идентификатор страны (целое число).

Одной из причин является то, что мы пытаемся получить доступ к любым данным, относящимся к стране, затем сравнивая Строка страны запроса с фактической строкой, хранящейся в БД, является более дорогим сравнением, чем по сравнению со сравнением только двух чисел.

0 голосов
/ 29 января 2012

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

0 голосов
/ 29 января 2012

Мое личное мнение таково, что это больше подходит для хранения названий стран в виде строки в базе данных, потому что названия стран не меняются (обычно) и нет никаких "обновлений" для них.

Так что я думаю, что было бы законно хранить их как строки.

...