Php 在数据库中,国家名称最好存储为整数/数字,而不是包含其名称的字符串?

Php 在数据库中,国家名称最好存储为整数/数字,而不是包含其名称的字符串?,php,mysql,ruby-on-rails,database,sphinx,Php,Mysql,Ruby On Rails,Database,Sphinx,我想知道,因为我正在处理一个搜索表单,并使用thinking sphinx,对于过滤属性,似乎只接受整数,但我的国家作为包含其名称的字符串存储在数据库中 因此,我将创建自己的国家/地区列表,其中的字符串将显示在选择菜单中,值将作为整数存储在数据库中。我只是想知道为什么我正在使用的gemrubyonrails的开发人员决定创建一个只包含字符串的数组 这个问题不是特定于编程语言的。数据库就是数据库 亲切问候。我个人的意见是,将国家名称作为字符串存储在数据库中更合适,因为国家名称通常不会更改,也不会更

我想知道,因为我正在处理一个搜索表单,并使用thinking sphinx,对于过滤属性,似乎只接受整数,但我的国家作为包含其名称的字符串存储在数据库中

因此,我将创建自己的国家/地区列表,其中的字符串将显示在选择菜单中,值将作为整数存储在数据库中。我只是想知道为什么我正在使用的gemrubyonrails的开发人员决定创建一个只包含字符串的数组

这个问题不是特定于编程语言的。数据库就是数据库


亲切问候。

我个人的意见是,将国家名称作为字符串存储在数据库中更合适,因为国家名称通常不会更改,也不会更新


因此,我认为将它们存储为字符串是合法的。

存储带有国家整数映射的主查找表会更好。 然后,该国家/地区可以在其他表格中作为国家/地区标识符引用

一个原因是,当我们试图访问任何与一个国家有关的数据时,然后进行比较 与数据库中存储的实际字符串相比,查询国家/地区字符串的开销更大
与仅比较两个数字相比。

我认为您应该将国家/地区存储在一个单独的表中,比如id、名称、短名称,然后您可以使用其id进行搜索。

我建议将国家/地区存储在一个单独的表中,并为每个国家/地区分配一个唯一的id。它没有什么坏处,但确实使数据库结构更加灵活。通过这种方式,您可以在需要时添加与国家相关的更多信息,并在需要时将其他表格与国家相关


按字符串查找行甚至可能是一个性能问题。查询另一个表以查找国家ID不应产生太大的压力。

当然,国家名称将始终是字符串,只是直接使用国家名称作为主键,还是使用另一列整数作为主键


我的立场是使用整数作为主键,这样以后更新国家名称会更容易,尽管不太可能,但可能会发生。至于根据国家名称进行搜索的问题,只需在其上创建一个索引。

根据我的经验,国家一直在变化,例如,南苏丹刚刚成立一年多。它是否会影响您正在开发的系统是另一回事。没有理由不将这些国家保存在单独的表中。是的,我没有说如果将其存储在单独的表中是错误的,但这也可能是合法的。如果是私人项目或大型商业项目,它还取决于项目的大小……某种程度上取决于您的访问模式。如果我们像在本例中那样搜索一个国家,那么通过进行id比较,您可能会获得更好的性能,但是如果您的大多数访问都是以任何方式获取另一行数据,那么最好只在同一个表中设置一个与其他信息相同的文本字段,以避免额外的连接,并将所有可用的国家保留在内存中。它有点超过200行,所以这是可以接受的。如果性能是一个问题,搜索一个有200行多一点的表,即国家的数量,那么添加一个id并不能解决问题。尽管如此,最好还是有一个标准化的模型,所以我会创建一个国家表,用国家填充它,并使用分配给它的每个ID来表示它。例如,第一个进入数据库的国家将自动获得id 1,依此类推?@GregoryHouse Yep。您可以设置ID列以自动增加ID。Sphinx索引意味着当用户搜索并使用国家/地区筛选器返回特定国家/地区的用户时,我的数据库将永远不会被命中。