国家/地区列表的最佳实践(SQL、XML等)



在开发网站或web应用程序时,我想知道当您需要世界国家/地区列表时,最佳做法是什么?最好使用SQL中的国家/地区表,将所有值存储到XML或其他文件中?

例如,假设我需要为每个用户存储国家/地区(在SQL中),并且我需要在我的网站上的一个(或多个)下拉列表中使用国家/地区列表。

如果您想为每个用户存储国家/地区(可能将CountryId保存在用户表中最适合),则应该为国家/地区提供单独的表,并从用户表到国家/地区表提供FOREIGN KEY引用。您还可以在国家名称更改时使用管理面板添加/更改国家名称。

但有趣的是,您需要在每次加载页面时查询数据库,以获得所有"几乎不变"的国家名称!!。

解决这种情况的方法是先获取所有国家/地区的名称,然后相应地缓存它们。当您第二次填充国家组合时,从缓存中获取国家列表。

  • 如果缓存为空,则从国家/地区表中获取所有国家/地区并缓存它们
  • 如果存在缓存项,则使用缓存的国家/地区(无数据库查询)
  • 当您从管理部分更改国家/地区名称时,还要重新生成国家/地区缓存

如果您不喜欢每次页面加载200多条记录时都查询数据库,而这些记录几乎是常量且很少更新,则这种方法最适合。这种方法还减少了数据库开销。

假设您希望您的用户在该列表中只拥有国家,则DBMS将需要从用户向该列表强制执行FOREIGN KEY,并且只有当该列表在数据库表中时,这才是可能的。

如果您需要的话,您还可以更轻松地对数据库表进行筛选或JOININg1

哦,顺便说一句,国家确实在变化,所以你不能让这个列表完全不变,这是将它存储在数据库表中的一个额外参数。


1例如,用户表可能只存储国家代码,在这种情况下,您必须将其与国家表连接才能获得完整的国家名称

我认为,有很多好方法可以做到这一点。为了满足您的要求,您应该描述您到底需要什么(翻译?)

如果您将国家/地区存储在SQL数据库中,geonames.org上有一个现成的导入解决方案,可以在此处下载转储:http://download.geonames.org/export/dump/

在我看来,这是一个很好的起点。

最新更新