我正在学习graphql,我想我已经发现了一个缺陷。 假设我们有模式这样只使用Graphql加载数据库所需的数据
type Hero {
name: String
friends: [Person]
}
type Person {
name: String
}
和两个查询
{
hero {
name
friends {
name
}
}
}
这
{
hero {
name
}
}
和关系数据库有两个对应表Heros
和Persons
。
如果我的理解是正确的,我不能解决这个查询,例如,对于第一个查询生成的SQL查询将
select Heros.name, Persons.name
from Heros, Persons
where Hero.name = 'Some' and Persons.heroid = Heros.id
而对于第二
select Heros.name, Persons.name from Heros
所以只有查询真正需要的字段将从数据库加载。
我说得对吗? 此外,如果graphql有能力只返回查询所需的数据,而不是对完整模式有效的数据,我认为这是可能的,对吧?
@ p0k8_为什么不呢? – user1685095
@ p0k8_'因为用户可能不会查询嵌套类型,所以对数据库自定义批处理请求并不好。如果用户没有查询嵌套类型,那么在sql中不应该有任何连接,就像我在第二个查询中显示的那样。要么你不明白我在问什么,要么我不明白你在说什么。 – user1685095
这正是我在写[Join Monster](https://github.com/stems/join-monster)时打算解决的问题。它仅在实际请求嵌套类型时才生成SQL并动态添加联接。它可以任意深入,并与postgres(很快mariadb)分页。 –