Database design 在数据库中存储位置信息的最佳方法是什么?

Database design 在数据库中存储位置信息的最佳方法是什么?,database-design,Database Design,位置数据基本上是树结构。因此,当你询问某人的地址时,你想知道他们居住的地区/郊区、城市/城镇、州/省和国家 该数据有望只设置一次,并且只需要很少的修改。大多数电子商务网站和其他很多网站都需要存储这类信息,但我很难找到更多信息。也许是因为我没有寻找正确的术语,但我认为这将是一个已经解决的常见问题 这引出了另一个问题。我在哪里可以得到这类信息,比如哪些地区属于哪个城市,哪些城市属于哪个州,哪些州属于哪个国家 编辑:为了使事情变得更复杂,我希望能够提供一种通用的解决方案,因为例如,一些国家不使用邮政编

位置数据基本上是树结构。因此,当你询问某人的地址时,你想知道他们居住的地区/郊区、城市/城镇、州/省和国家

该数据有望只设置一次,并且只需要很少的修改。大多数电子商务网站和其他很多网站都需要存储这类信息,但我很难找到更多信息。也许是因为我没有寻找正确的术语,但我认为这将是一个已经解决的常见问题

这引出了另一个问题。我在哪里可以得到这类信息,比如哪些地区属于哪个城市,哪些城市属于哪个州,哪些州属于哪个国家

编辑:为了使事情变得更复杂,我希望能够提供一种通用的解决方案,因为例如,一些国家不使用邮政编码,他们使用邮政编码,这有点类似,但不完全相同。我最大的愿望是拥有地区/郊区->城市/城镇->地区/省/州->国家。我可能在尝试不可能的事情

编辑2:
对不起,我可能不够清楚,但我不需要邮政编码。只有郊区/地区名称->城市……。

这比最初出现的情况更复杂。一些城镇有多个邮政编码。一些邮政编码有多个城镇。许多地址可以使用主要城镇或最近城市的名称。验证地址不是一件小事


如果您想尝试存储邮政编码数据,您可以购买以下产品。但是,您可能会发现使用USPS进行验证更容易。

如果您对邮政编码不感兴趣,也许可以从中获取所需信息。

首先,这里有两个不同的信息:地理信息和政治/组织信息。 可以有共享的邮政编码,但从地理上讲,任何对象都完全位于另一个对象内

当我们必须解决这个问题时,我们只需要创建一个通用的树结构,其中每个地理节点都引用了每个父节点。顶级节点(本例中的国家)没有父引用。更重要的是,对于不同的国家,我们有不同的结构。唯一的要求是它必须是分层的

之后,我们能够通过预先计算树遍历信息来加速地理查询。我们遍历树,计算遍历顺序并将其存储在geo节点中。在查询中进行简单的int比较之后,就足以检查一个geo是否在另一个geo中,以此类推


同时,存储诸如邮政编码信息之类的内容在这里看起来像是并行数据结构,存储在不同的表中,并引用地理结构中的地理节点。

如果您想获取我们的邮政编码信息,请查看。这是来自美国人口普查的信息,将为您提供所有数据。然而,需要注意的是,信息不容易抽象,因此需要一些时间