3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GraphQLとSQL

Last updated at Posted at 2022-10-12

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は冗長であまり良くないです。
mermaid-diagram-2022-10-12-161348.png

改善

TweetとUserのtableは分けてtweetはUseridだけを持たせることがセオリーでしょう。

mermaid-diagram-2022-10-12-161647.png

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" 

このような呼出をすれば、
mermaid-diagram-2022-10-12-161348.png
DB上でこのようなtableを擬似的に作ることができます。(これをviewとして定義しておくのも◯)

最後に

DBの設計は使用用途によってさまざまです。今回紹介したやり方も一例です。GraphQLとSQLを正しく理解する一助になればなと思います

参考

上記のtableの図はマーメイド記法で書きました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?