如何设计大洲、国家、地区、城市和 POI 的数据库?

Mic*_*nka 5 postgresql database-design spatial

我不是数据库设计师,所以我在设计带有 GIS 信息的数据库时遇到了麻烦。目标是创建一个包含大陆、国家、地区(包括州、子地区、省)、城市和城市中的地方的系统。这些元素中的每一个都将包含一些文本信息和相关内容。作为数据库,我们将使用 PostgreSQL 和 PostGIS。

我的问题是,我如何为这个系统设计数据库?我在考虑 2 个表polygonspoints,但我不确定这是否是好的思考方式。

实际上我们需要的是一些国家、城市、地区等之间关系的分层基础。该应用程序的主要目标是从许多来源收集关于特定城市、地区、国家等的旅游数据,并将其存储在数据库中。假设我们有一个城市罗马;我们从几个来源收集了一些关于这个城市的信息到数据库中。我们需要知道罗马位于罗马省,拉齐奥地区拉齐奥的次地区拉齐奥,国家意大利。所以系统应该是灵活的,允许我们从现实世界中创建这样的关系。

这就是为什么我会选择两个表:

  1. polygons - 可以存储国家、地区、子地区、省份等。
  2. points - 可以存储城市和兴趣点

Amm*_*arR 2

我建议2个选择

选项 1:如果您想要 RBDM,我认为 2 个表就足够了

Table 1 (Lookup)
-LocationID
-Continent
-country
-region
-City
-Landmark (granularity)
Run Code Online (Sandbox Code Playgroud)

在此表中,因为它是一个查找,所以我建议将其保持非规范化,这将为您节省大量编码,特别是在连接表以及搜索和报告时。而且维护更容易,那么5个独立的桌子

另一个表是收集数据的表

Table 2 (Master)
-Tourist
-LocationID
-ExtraFields
-...
Run Code Online (Sandbox Code Playgroud)

因此,在这个表中,您收集有关游客的信息,您所要做的就是存储 locationid,这是您的粒度,这样 Locationid 具有地标、城市、地区、国家、大陆,因为地标肯定位于城市中,并且城市在一个国家,而国家在一个地区..(不需要5张表来将它们分开,如果维护不当,很有可能会出现无效的输入或数据)


选项2:

我建议使用图形数据库,请查看SO 上的这篇文章,了解使用Neo4J进行 GIS 以及Neo4J 的 GIS实现