MySQL тип данных путаница - PullRequest
       18

MySQL тип данных путаница

0 голосов
/ 27 марта 2010

Так что это скорее обобщенный вопрос о типах данных MySQLs. Я хотел бы правильно хранить 5-значный почтовый индекс США ( zip_code ) в этом примере.

В округе 10 разных городов и 5 разных почтовых индексов.

city   | zip code
-------+----------
city 0 | 33333
city 1 | 11111
city 2 | 22222
city 3 | 33333
city 4 | 44444
city 5 | 55555
city 6 | 33333
city 7 | 33333
city 8 | 44444
city 9 | 22222

Я бы обычно структурировал такую ​​таблицу как varchar (50), int (5) и не думал бы об этом дважды.

(1) Если мы хотим, чтобы в этой таблице был только один из 5 различных почтовых индексов, мы должны использовать тип данных enum , верно?

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

(2) Должен ли я хранить 418 почтовых индексов как enum тип данных ИЛИ как int и создать другую таблицу для ссылки?

Ответы [ 2 ]

1 голос
/ 27 марта 2010

Почтовые индексы должны быть целыми числами ... MEDIUMINT - это то, что вы ищете. Несколько тысяч различных значений не очень хорошая идея для ENUM - кроме того, IIRC ENUM ограничен 64 различными значениями.

Вы можете создать другую таблицу с именем city для хранения городов. Структура была бы очень простой: достаточно стандартного ID + столбца для названия города - VARCHAR(50). Конечно, вам нужно добавить city_id в таблицу почтовых индексов (с внешним ключом).

0 голосов
/ 27 марта 2010

если smallint unsigned (от 0 до 65535) слишком мало, измените на mediumint.

create table city(
 city_id smallint unsigned not null auto_increment primary key,
 name varchar(255) not null
)engine=innodb;

create table city_zip(
 city_id smallint unsigned not null,
 zip_code smallint unsigned not null,
 primary key (city_id, zip_code)
)engine=innodb;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...