【问题标题】:best type for multiple values in a postgres db?postgres 数据库中多个值的最佳类型?
【发布时间】:2011-07-22 15:04:56
【问题描述】:

大家好 我有一个包含数千个城市的 postgres 数据库。我想为每个分配一个未指定数量的字母数字代码(每个城市多达 1000 个)。执行此操作的最有效方式是什么?谢谢

【问题讨论】:

    标签: database postgresql schema


    【解决方案1】:

    如果每个代码对应一个城市,有两种可能:

    • 执行此操作的标准方法是创建一个带有serial 主键的城市名称表,然后是一个将字母数字代码与序列号相关联的表(当然,具有适当的外键约束)。
    • 如果没有其他内容涉及城市名称并且不存在用户输入错误的风险,您还可以创建一个包含字母数字代码列和相应城市的表。

    如果一个代码可以映射到多个城市,标准方法是有一个城市名称表和一个字母数字代码表,每个表都有一个 serial 主键,然后第三个表将主键从一个表映射到另一个中的主键(当然,两者都有外键)。如果字母数字代码足够短,您可以将它们编码为 int 或 bigint(即 4 到 8 个字节),您可以使用该编码来存储它们,而不是使用单独的映射表。

    【讨论】:

      【解决方案2】:

      根据您的问题,您可以创建一个城市表,您已经拥有它的声音,并创建一个代码表并创建一个 city_code 表。在 city_code 表上创建一个返回 city 的外键,以及从 city_code 到 code 表的一个外键。确保在外键上有一个索引以提高性能。

      至于数据类型,您可以在代码表列上创建适合您的内容。如果您不知道可以使用 TEXT 的长度,并且在某些时候需要将其限制为固定大小,您可以在 TEXT 列上放置一个检查约束。对于您的要求,您要做的重要事情是规范化。这是通过创建 city_code 和代码表来完成的。不要无故去规范化。在大多数情况下,通常很难找到正当的理由。

      【讨论】:

      • @antisanity: 2 或 3 个表取决于是否每个代码一个城市。
      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 2010-09-18
      • 2013-10-09
      • 2013-09-23
      • 2013-08-27
      • 2015-10-17
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多