【发布时间】:2011-07-22 15:04:56
【问题描述】:
大家好 我有一个包含数千个城市的 postgres 数据库。我想为每个分配一个未指定数量的字母数字代码(每个城市多达 1000 个)。执行此操作的最有效方式是什么?谢谢
【问题讨论】:
标签: database postgresql schema
大家好 我有一个包含数千个城市的 postgres 数据库。我想为每个分配一个未指定数量的字母数字代码(每个城市多达 1000 个)。执行此操作的最有效方式是什么?谢谢
【问题讨论】:
标签: database postgresql schema
如果每个代码对应一个城市,有两种可能:
serial 主键的城市名称表,然后是一个将字母数字代码与序列号相关联的表(当然,具有适当的外键约束)。
如果一个代码可以映射到多个城市,标准方法是有一个城市名称表和一个字母数字代码表,每个表都有一个 serial 主键,然后第三个表将主键从一个表映射到另一个中的主键(当然,两者都有外键)。如果字母数字代码足够短,您可以将它们编码为 int 或 bigint(即 4 到 8 个字节),您可以使用该编码来存储它们,而不是使用单独的映射表。
【讨论】:
根据您的问题,您可以创建一个城市表,您已经拥有它的声音,并创建一个代码表并创建一个 city_code 表。在 city_code 表上创建一个返回 city 的外键,以及从 city_code 到 code 表的一个外键。确保在外键上有一个索引以提高性能。
至于数据类型,您可以在代码表列上创建适合您的内容。如果您不知道可以使用 TEXT 的长度,并且在某些时候需要将其限制为固定大小,您可以在 TEXT 列上放置一个检查约束。对于您的要求,您要做的重要事情是规范化。这是通过创建 city_code 和代码表来完成的。不要无故去规范化。在大多数情况下,通常很难找到正当的理由。
【讨论】: