如何管理数据库中的国家/地区

时间:2013-10-21 10:08:58

标签: php mysql database-design database-performance countries

我知道我的问题看起来有点模糊,但我觉得管理国家/地址实际上是非常常见的,所以我想对我的实际设置提出一些建议。

我有一个带有“country”列的数据库,之前它是一个中型int类型,充当另一个表的外键,其中包含有关这些国家的实际信息(主要是id,name和ISO3166-1 alpha2代码)。 / p>

经过一些测试和基准测试后,我最终将所有国家/地区的信息都放在了php文件阵列中,包括/在需要时需要它,它比查询数据库快一两个数量级。 (他们是278个国家)。

所以显然这是一种更好的方法,但我觉得有些不对劲,因为人们通常倾向于从桌子而不是从文件中读取这类东西,但我无法弄清楚它会是什么,是否更容易维持或类似的东西?

另外,我考虑将2个字母的ISO代码作为键而不是数字ID,它将更具人性化,无论如何它们都是独一无二的。我看到400.000行表中没有明显的性能损失,如果我的数据库增长,这最终会出错吗?

1 个答案:

答案 0 :(得分:2)

一般而言,您希望将一起变化的事物保持在一起。因此,如果您的主数据存在于SQL数据库中,那么将国家/地区数据保存在数据库中有助于避免疯狂,就像有人更改PHP查找数组而没有意识到SQL数据库中存在大量数据一样。

它还有助于避免重复 - 如果您为系统构建第二个应用程序(例如管理系统),则最终不会有2个国家/地区查找PHP文件的副本。同样,复制会为错误创造机会,开发人员可以更改数据库和其中一个查找文件,但不能更改另一个。

所有这些都是相当防御性的 - 但应用程序往往以意想不到的方式发展,避免错误通常是一个好主意。

根据我的经验,使用两个表之间的连接几乎没有对您所提到的数字进行良好调整的系统产生可测量的性能影响 - 在将查找移动到PHP之前是否优化了SQL?