【问题标题】:Generate dynamic GraphQL Schema生成动态 GraphQL Schema
【发布时间】:2020-12-08 23:02:13
【问题描述】:

我正在创建一个系统,其中没有。表中的列数不固定。我会用一个例子来解释。

考虑一个包含 3 列的人员表。

people
----------
id | name | email

该表将公开给 GraphQL API,我可以查询该表。在我的系统中,用户将能够将自定义列添加到人员表中。假设他们添加了一个国籍列。当他们这样做时,国籍在 API 中将不可用,因为它没有在 Schema 中定义。

那么如何使我的架构动态化,以允许用户使用他们添加的每个额外列来查询 people 表?

【问题讨论】:

    标签: api graphql api-design graphql-js


    【解决方案1】:

    我可以查询 information_schema 表或 fields 表并获取 people 表的额外字段,然后使用 GraphQLObjectType 来构建我的模式,而不是使用 SDL。

    【讨论】:

      【解决方案2】:

      这不是您问题的答案,而是建议,因为在 SQL 中创建动态列对我来说不是一个好主意。我认为您应该重新考虑您的数据库结构,而不是思考如何创建动态架构。

      与其在Person 表中添加新列,不如为自定义列创建不同的表,例如创建person_columns

      person_columns
      ----------
      id | people_id | column_name | column_value
      

      因此,对于每个人,您都可以拥有多个列及其对应的值,并且您不必担心动态创建您的 graphQL 模式。 (根据您的要求,您可以向person_columns 表添加更多列以进行更多控制)

      【讨论】:

      • 我已经考虑过这个解决方案。最初我开发了类似的东西,但是我的列将是另一个表中的外键,因此我不必重复 column_name。但这带来了一些问题。我必须执行 CROSSTAB 或 PIVOT 查询才能以有效的方式获取我想要的信息,这非常昂贵。此外,我仍然需要查询 person_columns 表来构建 graphQL 架构。
      猜你喜欢
      • 2013-01-07
      • 2018-07-17
      • 2019-04-05
      • 2021-07-21
      • 2013-10-12
      • 2017-06-24
      • 2010-09-11
      • 1970-01-01
      相关资源
      最近更新 更多