MySQL字段保存到国家/地区列表

时间:2014-03-22 13:20:19

标签: mysql sql

我正在寻找在mysql表字段中保存两个字母country id的列表的最佳实践。我有一个产品表,我希望每个产品都有一个列或列表可以运送到的国家。

我想到的想法是为这样的船舶国家制作另一张表:

item_id         int,
ship_country    char(2)

但是对于每个项目都可能是此表中的条目,因此如果物品运送到200个countires将在此表中为200行。我的想法是我需要这个字段可以搜索到能够搜索发送到特定countires的项目,所以我不能使用文本字段来存储所有国家/地区列表。

我的第二个想法是在bigint领域为每个国家使用一位,但我认为搜索会很难。

如何做到这一点。

2 个答案:

答案 0 :(得分:0)

在我看来,您的产品表与您的国家/地区表之间的many-to-many relationship相似。

所以你应该有一个产品表,一个国家表和一个新表来建立链接。

国家/地区表可以像那样

country_id         int,
country_code       char(2),
country_name       varchar(100)

中间的表格,我们的通话ID product_country可以这样定义:

product_id         int,
country_id         int

答案 1 :(得分:0)

我建议使用三个表:country,item,item2country。

country: id, countryName, countryShort
item: id, itemName
item2country: id, itemId, countryId

这允许搜索" item2country"按ID分类的表,并返回目标countryId。使用此countryID查找完整的国家/地区名称。 这也很容易为项目插入新国家/地区。从包含ItemId的Item formular中,您只需插入" item2country"。 此外,当您从表项中删除项目时,还会删除item2country中itemId的所有ID。

最坏情况警告:不要将多个国家/地区ID或短名称存储到单个数据库字段中,例如" en,us,au"。那将是搜索的一个灾难,因为你会反复获取和分裂。这是非常糟糕的做法和sloooooowww。