所以这更多的是关于 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 个邮政编码存储为 enum 数据类型还是 int 数据类型并创建另一个表来引用?
最佳答案
邮政编码应该是整数... MEDIUMINT这就是您正在寻找的。对于 ENUM
来说,几千个不同的值并不是一个好主意 - 此外 IIRC ENUM
仅限于 64 个不同的值。
您可以创建另一个名为city
的表来存储城市。结构非常简单:只需标准 ID + 城市名称列 - VARCHAR(50)
就足够了。
当然,您必须将 city_id
添加到邮政编码表(附加外键)。
关于mysql数据类型困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530270/