2

在开发网站或 Web 应用程序时,我想知道当您需要世界国家/地区列表时最佳实践是什么——在 SQL 中使用国家表,将所有值存储到 XML 或其他东西更好吗?

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

4

3 回答 3

5

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

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

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

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

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

于 2012-09-24T10:39:01.713 回答
2

假设您希望您的用户具有该列表中的国家/地区,DBMS 将需要强制从用户到列表的FOREIGN KEY,并且只有当列表位于数据库表中时才有可能。

如果您需要的话,您还可以更轻松地过滤或 JOINING 1与数据库表。

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


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

于 2012-09-24T10:08:11.590 回答
0

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

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

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

于 2012-09-24T07:53:27.130 回答