【问题标题】:Is a country name better stored as an integer/number in a database rather than a string containing it's name?国家名称是否更好地存储为数据库中的整数/数字而不是包含其名称的字符串?
【发布时间】:2012-01-29 13:33:15
【问题描述】:

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

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

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

亲切的问候。

【问题讨论】:

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


    【解决方案1】:

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

    通过字符串查找行甚至可能是一个性能问题。查询另一个表以查找国家/地区 ID 应该不会造成太大压力。

    【讨论】:

    • 如果搜索一个只有 200 多行(即国家数量)的表时性能是一个问题,那么添加一个 id 不会解决问题。不过,最好有一个标准化的模型
    • 所以我会创建一个国家表并用国家填充它,并使用分配给它的每个 ID 来表示它。例如。第一个访问数据库的国家会自动获得 id (1) 等等?
    • @GregoryHouse 是的。您可以设置您的 ID 列 auto_increment 以自动增加 ID。
    • Sphinx 索引意味着当用户搜索并使用国家/地区过滤器返回来自特定国家/地区的用户时,我的数据库将永远不会被命中。
    【解决方案2】:

    当然国名总是字符串,只是直接用国名作为主键,还是用另一列整数作为主键

    我的立场是使用整数作为主键,这样以后更新国家名称会更容易(尽管不太可能但可能发生)。至于按国名搜索的问题,直接在上面建个索引就好了。

    【讨论】:

      【解决方案3】:

      用一个国家的整数映射存储一个主查找表会更好。 然后可以在其他表中将国家/地区引用为国家/地区 id(整数)。

      其中一个原因是当我们尝试访问与某个国家/地区相关的任何数据然后比较 查询国家字符串与存储在 DB 中的实际字符串的比较成本更高,因为 与仅比较两个数字相比。

      【讨论】:

      • 取决于您的访问模式。如果我们(就像在这种情况下)搜索一个国家/地区,您可能会通过进行 id 比较来获得更好的性能,但如果您的大部分访问是获取另一行数据(以任何方式),那么只有一个文本字段可能会更好与其他信息在同一张表上(以避免额外的加入),并将所有可用的国家/地区保存在内存中。 200多一点,还算可以接受。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我个人的看法是,将国家名称作为字符串存储在数据库中时,它会更合适,因为国家名称(通常)不会改变,并且它们没有“更新”。

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

        【讨论】:

        • 根据我的经验,国家一直在变化,例如,南苏丹才刚刚成立一年多。它是否会影响您正在开发的系统是另一回事。
        • 没有理由不将国家/地区保存在单独的表格中。
        • 是的,我并没有说如果你将它存储在一个单独的表中是错误的 - 但它也可能是一个合法的可能性。它还取决于项目规模(如果是私人或大型商业项目......)
        猜你喜欢
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        相关资源
        最近更新 更多