我不是一个数据库设计师,所以我在用GIS信息设计数据库时遇到了困难。目标是建立一个由大陆、国家、地区(包括州、分区域、省)、城市和城市中的地方组成的体系。这些元素中的每一个都将包含一些文本信息和相关内容。作为数据库,我们将将PostgreSQL与PostGIS结合使用。
我的问题是,如何为这个系统设计数据库?我在想两个表-- polygons和points,但我不确定这是否是一种好的思维方式。
实际上,我们需要的是国家、城市、地区等之间关系的层次化基础。应用程序的主要目标是从不同的城市、地区、国家等多个来源收集旅游数据,并将其存储在数据库中。假设我们有一个罗马城,我们从几个来源收集有关这个城市的一些信息到数据库中。我们需要知道罗马在罗马省,拉齐奥分区在拉齐奥地区,意大利。因此,这个体系应该是灵活的,允许我们从现实世界中创造出这样的关系。
所以我会选两张桌子:
polygons --可存储国家、地区、次区域、省等.points -可以存储城市和POI发布于 2012-06-10 12:01:18
我建议两种选择
选项1:如果您想要一个RBDM,我认为两个表就足够了
Table 1 (Lookup)
-LocationID
-Continent
-country
-region
-City
-Landmark (granularity)在这个表中,因为它是一个查找,所以我建议保持它的非规范化,它将在加入表、搜索和报告时节省大量的代码。维护更容易,然后是5个单独的表。
另一个表是用来收集数据的表。
Table 2 (Master)
-Tourist
-LocationID
-ExtraFields
-...所以在这张表格里你要做的就是存储关于游客的信息,这是你的粒度,这样的话,就有地标,城市,地区,国家,大陆,因为地标明确地在一个城市,城市在一个国家,这个国家在一个地区。(不需要5个表将它们分开,如果维护不当,很有可能出现无效的输入或数据)
备选案文2:
我建议图形数据库,检查这个张贴在所以,关于使用Neo4J进行地理信息系统和基于Neo4J的GIS的一个实现。
发布于 2012-06-07 06:31:03
每个子表有一个外键,五个表怎么样:
大陆,国家,地区,城市,地标。
或一个具有类型列的自引用表。
发布于 2013-11-01 20:25:01
迟了回答,但是..。
假设您可以找到您提到的地理主题的数据,那么为什么不将每个地理位置存储在各自的数据库表中呢?
城市:点数
地标:点
区域:多边形
国家:多边形
大陆:多边形
然后,您可以简单地使用PostGIS (ST_Intersect)中的空间相交来根据它们相交的多边形给出正确的属性。
您可以创建一个点的视图,其中包含“region”的计算列(或任何您希望附加到该点的多边形数据),该视图调用连接到区域(或国家或大陆)数据的ST_Intersect函数.
也许是这样:
create view PointsWithGeography as (
select cityPoints.name
,countryPolys.name
from cityPoints join countryPolys
on st_intersects(citiesPoints.geom, countryPolys.geom)
)那么,对于您的报告等,只需使用视图!
因此,您的点包含属性信息,该属性信息是根据join / st_intersects...you的空间信息动态生成的,它甚至可以嵌套“空间联接”,并从相交多边形层调用尽可能多的列,就像like...all动态的那样!五个表中的每一个都可以单独编辑/维护.
https://dba.stackexchange.com/questions/16277
复制相似问题