php - 如何在数据库中管理国家

标签 php mysql database-design database-performance countries

我知道我的问题看起来有点含糊,但我觉得管理国家/地址实际上是很常见的事情,所以我想就我的实际设置获得一些建议。

我有一个带有“国家/地区”列的数据库,以前它是一个中型 int 类型,充当另一个表的外键,其中包含有关国家/地区的实际信息(主要是 ID、名称和 ISO3166-1 alpha2 代码)。

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

显然这是一种更好的方法,但我觉得有些不对劲,因为人们通常倾向于从表格而不是文件中读取这种东西,但我不知道它会是什么,它更容易吗维护或类似的东西?

此外,我正在考虑使用 2 个字母的 ISO 代码而不是数字 ID 作为键,这样更易​​于阅读,而且它们无论如何都是唯一的。我在 400.000 行表中没有看到明显的性能损失,如果我的数据库增长,这最终会成为错误吗?

最佳答案

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

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

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

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

关于php - 如何在数据库中管理国家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19491624/

相关文章:

php - Symfony2 mongodb 安装

php - 获取具有唯一值的排序mysql记录

database-design - 订阅计费的数据库设计

mysql - 是拥有一张大 table 更好还是应该使用几张 table ?

mysql - 存储修订时避免循环依赖?

php - 为什么静态方法不可测试?

仅匹配常规有效 URL 的 PHP 正则表达式

PHP MYSQL 结果不完整

php - 有没有一种聪明的方法可以在用分号分隔的 mysql 中运行多个查询?

mysql - 计算包含给定值的开始和结束字段的记录