如何在规范化的nosql数据库中向上/向下引用多个级别?

我正在尝试对可以使用graphql的灵活性但希望使其标准化的数据库进行建模。

想象一下这种关系结构:

is.character(mydata$Date)
[1] FALSE
is.numeric(mydata$Date)
[1] FALSE

但是我想创建四个不同的集合以使其标准化。

为了最好地描述,其模式如下所示:

planet
  continent
    country
      city

太好了,我可以查询每个单独的元素,并获取所有元素。

但是,如果我想获得一个大陆的所有城市怎么办?

我需要完善以下内容:

type Planet {
  planetName: String
}
type Continent {
  continentName: String
}
type Country {
  countryName: String
}
type City {
  cityName: String
}

type Query {
  planets: [Planet]
  continents: [Continent]
  countries: [Country]
  cities: [City]
}

现在,如果我们进行查询,我们将得到type Continent { continentName: String cities: [City] } type City { cityName: String } type Query { planets: [Planet] continents: [Continent] countries: [Country] cities: [City] } (ID),并且可以得到属于它的所有城市。但是我们需要在城市和大陆之间建立某种联系。我的想法就像在数据库结构中一样:

continentName

这样,我可以编写一个解析器来从查询的父对象中获取continent: { continentName,//the id countries,//array of ids of countries cities //array of ids of cities } ,并从指定ID的城市集合中进行查询。

但是,如果我想做这样的事情怎么办:

cities

反过来,得到属于该大陆的所有城市。我可以去查询特定的大陆,获取所有属于该大陆的城市,并获取指定的城市,但这需要很长时间。

如果我要像这样构造数据怎么办?

type Query {
  cities(continentName: String): [City]
}

使用上述结构,无论从哪个级别向下,向哪个方向向下,我都可以连接并以嵌套格式查询数据。这似乎是一个完美的解决方案,但是当我阅读了对noSQL数据库进行建模时,我并没有发现它。

解决方案是否可能存在瓶颈或问题?

fjxxq147 回答:如何在规范化的nosql数据库中向上/向下引用多个级别?

您要解决的问题很困难。

我认为最好的方法是将问题分解为多个较小的问题:

  • 创建一个描述世界各个地区的集合,这些地区将与WGS84坐标(或特定于行星的坐标系)的几何形状相关联

  • 创建像PointOfInterest这样的城市的集合,它们将只是WGS84坐标(有点像经度和纬度)。

然后,您需要一种查询几何形状的相交,包含和并集的方法。

您还需要能够分辨出某个点是否处于形状中以及哪些点处于给定形状中。

将涉及一些动态编程,因为据我所知,没有可在整个宇宙中工作的坐标系。

研究PostGIS,GDAL和https://github.com/sshuair/awesome-gis

祝你好运:)

本文链接:https://www.f2er.com/3157325.html

大家都在问