GraphQLとは
GraphQLとはMeta(Facebook)が開発する問い合わせ言語です。
https://graphql.org/
SQLとは
SQLはRDBMSの操作を行う問い合わせ言語です。
二つの関係
はっきりいってこの二つは全くの別物です。GraphQLとSQL名前が似ているから一緒のような物だろうと思って使うと痛い目にあうと言われています。
図解
簡易的なTwitterを作るとして、Tweetを取得するQueryを考えましょう
scalar Date
type tweet {
Tweetid: ID!
Text: String!
Imageurl:String!
User: User!
CreatedAt: Date!
UpdatedAt: Date!
}
type User{
Userid: ID!
Name: String!
}
type Query {
Tweet(argument: TweetId!): Tweet!
}
ではこれをそのままtableにするとどうなるでしょうか。
悪い例
Tweetのtypeをそのままtableにすると下記のようになると思います。このtableは冗長であまり良くないです。
改善
TweetとUserのtableは分けてtweetはUseridだけを持たせることがセオリーでしょう。
GraphQLとSQLの変換
先ほど提示したTweetのQueryを処理しようとするとどうなるでしょうか
query tweet{
Tweet(argument:"12345"){
Text
User{
Name
UserId
}
}
}
上記のqueryを処理するとき、SQLでどのような処理をすべきでしょうか?
SELECT * FROM tweet inner join user on tweet.Userid = user.userid WHERE tweet.Tweetid = "12345"
このような呼出をすれば、
DB上でこのようなtableを擬似的に作ることができます。(これをviewとして定義しておくのも◯)
最後に
DBの設計は使用用途によってさまざまです。今回紹介したやり方も一例です。GraphQLとSQLを正しく理解する一助になればなと思います
参考
上記のtableの図はマーメイド記法で書きました。