因此,这是一个关于MySQL数据类型的更广泛的问题。在本例中,我想正确地存储一个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数据类型,对吗?
现在想一想更大规模的类似情况。在一个州,有500个城市,有418个不同的邮政编码.
(2)是否应该将418个邮政编码存储为枚举数据类型或int,并创建另一个要引用的表?
发布于 2010-03-27 17:58:08
邮政编码应该是整数..。米杜明是你要找的东西。对于ENUM来说,几千个不同的值不是个好主意--此外,IIRC ENUM仅限于64个不同的值。
您可以创建另一个名为city的表来存储城市。结构非常简单:只需标准ID +城市名称列- VARCHAR(50)就可以了。当然,您必须将city_id添加到zipcode表中(附加外键)。
发布于 2010-03-27 19:50:36
如果smallint未签名(0到65535)太小,则更改为中介。
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;https://stackoverflow.com/questions/2530270
复制相似问题