国名是否更好地存储为数据库中的整数/数字而不是包含它的名称的字符串?

时间:2012-01-29 13:33:16

标签: php mysql ruby-on-rails database sphinx

我想知道,因为我正在使用搜索表单并使用思维sphinx和过滤属性,似乎只接受整数,但我的国家/地区作为包含其名称的字符串存储在数据库中。

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

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

亲切的问候。

5 个答案:

答案 0 :(得分:5)

我建议将这些国家/地区放在一个单独的表格中,并为每个国家/地区分配一个唯一的ID。它没有任何害处,但确实使数据库结构更加灵活。这样,您可以根据需要添加与国家/地区相关的更多信息,并在需要时将其他表格关联起来。

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

答案 1 :(得分:2)

当然国名永远是字符串,只是直接使用国家名称作为主键,或者使用另一列整数作为主键

我的立场是使用整数作为主键,以便稍后更新国家名称会更容易(即使不太可能但可能发生)。至于基于国名的搜索问题,只需在其上创建一个索引。

答案 2 :(得分:0)

使用国家/地区的整数映射存储主查找表会更好。 然后,该国家/地区可以在其他表中作为国家/地区ID(整数)引用。

一个原因是当我们尝试访问与某个国家相关的任何数据然后进行比较时 查询国家字符串对比存储在DB中的实际字符串比较昂贵 与只比较两个数字相比。

答案 3 :(得分:0)

我认为您应该将国家/地区存储在一个单独的表中,例如id,name,short-name,然后您可以使用其ID进行搜索..

答案 4 :(得分:-2)

我个人认为,当将国家/地区名称作为字符串存储在数据库中时,它会更合适,因为国家/地区名称不会更改(通常)并且没有“更新”。

所以我认为将它们存储为字符串是合法的。