我正在學習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)分頁。 –