Database design GraphQL,如何处理与数百个表的连接

Database design GraphQL,如何处理与数百个表的连接,database-design,graphql,Database Design,Graphql,我们正在实现GraphQL,需要从数百个数据库表中提取数据 我们希望以这样一种方式管理我们的API,即它易于遍历,并且数据被分解为逻辑组 有没有一种方法可以实现这样的功能: Group1> Queries Mutations Subscriptions Group2> Queries Mutations Subscriptions ... 或者我们需要为每个GraphQL数据分组创建单独的端点吗 如果这只是一个美学问题

我们正在实现GraphQL,需要从数百个数据库表中提取数据

我们希望以这样一种方式管理我们的API,即它易于遍历,并且数据被分解为逻辑组

有没有一种方法可以实现这样的功能:

Group1> Queries
        Mutations
        Subscriptions
Group2> Queries
        Mutations
        Subscriptions
...

或者我们需要为每个GraphQL数据分组创建单独的端点吗

如果这只是一个美学问题,我不会真的担心
查询
变异
类型上的字段数量。无论您的客户团队使用和组合他们的查询(他们真的应该使用这些工具中的一种),它们都具有自动完成功能,使得从数百个列表中选择特定字段变得简单

您可能正在与特定的客户群体合作,这些客户群体在他们可见的数据方面有特定的需求,或者在他们可以对基础数据执行的突变类型方面有特定的需求。在这些情况下,使用具有单独模式的单独端点可能是有意义的,每个端点仅限于特定客户机组可以看到和执行的内容。如果您使用的是Apollo,您甚至可以从一个基本模式开始,然后利用它。但是,如果某个特定的客户端只是对每个端点进行查询,那么您可能不应该创建单独的端点——这会给客户端带来不必要的负担

当然,您可以简单地将每个根类型的字段嵌套在其他类型中。例如:

type Query {
  group1: Group1
  group2: Group2
}

type Group1 {
  foo: Foo
  allFoos: [Foo!]!
  # other fields
}

type Group2 {
  bar: Bar
  allBars: [Bar!]!
  # other fields
}

这对于您的查询类型是非常好的,尽管我会这样做。当然,如果您理解其中的含义,它可能是您团队的正确解决方案。

如果这只是一个美学问题,我不会真正担心您的
查询
变异
类型上的字段数。无论您的客户团队使用和组合他们的查询(他们真的应该使用这些工具中的一种),它们都具有自动完成功能,使得从数百个列表中选择特定字段变得简单

您可能正在与特定的客户群体合作,这些客户群体在他们可见的数据方面有特定的需求,或者在他们可以对基础数据执行的突变类型方面有特定的需求。在这些情况下,使用具有单独模式的单独端点可能是有意义的,每个端点仅限于特定客户机组可以看到和执行的内容。如果您使用的是Apollo,您甚至可以从一个基本模式开始,然后利用它。但是,如果某个特定的客户端只是对每个端点进行查询,那么您可能不应该创建单独的端点——这会给客户端带来不必要的负担

当然,您可以简单地将每个根类型的字段嵌套在其他类型中。例如:

type Query {
  group1: Group1
  group2: Group2
}

type Group1 {
  foo: Foo
  allFoos: [Foo!]!
  # other fields
}

type Group2 {
  bar: Bar
  allBars: [Bar!]!
  # other fields
}

这对于您的查询类型是非常好的,尽管我会这样做。当然,如果您理解其中的含义,它可能是您团队的正确解决方案。

简单的回答是否定的,GraphQL没有提供执行类似操作的机制。只有3个根类型,它们不能像联合或接口那样是抽象类型。通过创建这样的操作组,您试图实现的目标是什么?您是否为不同类型的客户提供服务,每个客户都需要不同的操作?谢谢您的回答@DanielRearden。我们有三个主要用户组和数百个表。所以我们不希望有2倍的查询和3倍的突变,所有这些都同时显示出来。我们希望能够对数据进行分组。所以我们可能只需要创建三个不同的路由。简单的回答是不,GraphQL没有提供这样做的机制。只有3个根类型,它们不能像联合或接口那样是抽象类型。通过创建这样的操作组,您试图实现的目标是什么?您是否为不同类型的客户提供服务,每个客户都需要不同的操作?谢谢您的回答@DanielRearden。我们有三个主要用户组和数百个表。所以我们不希望有2倍的查询和3倍的突变,所有这些都同时显示出来。我们希望能够对数据进行分组。所以我们可能只需要创建三条不同的路线。嘿,谢谢你的回答。问题是我可能会有数百种类型,类型上的字段不是问题,而是类型的数量,然后它们的命名将开始变得模糊,需要一个词汇表来知道每种类型是什么。基本上我有三类数据,所以我可以把它分成三条路径。这就是我可能要做的。我希望我可以在GraphQL中分解它,这样开发人员就可以深入到这三个领域。这段来自Trulia开发人员在GraphQL峰会上的视频表明,他们通过在类型前面加上“名称空间”来处理自己的领域-嘿,谢谢你的回答。问题是我可能会有数百种类型,类型上的字段不是问题,而是类型的数量,然后它们的命名将开始变得模糊,需要一个词汇表来知道每种类型是什么。基本上我有三类数据,所以我可以把它分成三条路径。这就是我可能要做的。我希望我可以在GraphQL中分解它,这样开发人员就可以深入到这三个领域。这段来自Trulia开发人员在GraphQL峰会上的视频表明,他们通过在类型前面加上“名称空间”来处理自己的领域-