лучший тип для нескольких значений в Postgres DB? - PullRequest
1 голос
/ 25 марта 2011

Привет, ребята У меня есть postgres db с тысячами городов. Я хочу назначить неопределенное количество буквенно-цифровых кодов для каждого (до 1000 на город). Что было бы наиболее эффективным способом сделать это? Спасибо

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Если каждый код соответствует одному городу, есть две возможности:

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

Если код может отображаться на несколько городов, стандартным методом будет иметь таблицу названий городов и буквенно-цифровыекодовая таблица, каждая с первичными ключами serial, а затем третья таблица, отображающая первичный ключ из одной таблицы в первичный ключ в другой (конечно, с внешними ключами в обе).Если буквенно-цифровые коды достаточно короткие, чтобы их можно было кодировать в int или bigint (т. Е. От 4 до 8 байтов), вы можете использовать это кодирование для их хранения вместо отдельной таблицы сопоставления.

1 голос
/ 25 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...