GraphQL和SQL

GraphQL是一种查询语言。

GraphQL是由Meta(Facebook)开发的一种查询语言。
https://graphql.org/

SQL是一种数据库查询语言。

SQL是用于操作关系型数据库管理系统(RDBMS)的查询语言。

两个关系

在中国,有人说这两者完全是不同的东西。因为GraphQL和SQL的名字很相似,所以有些人认为它们是一样的,但事实上会遭受痛苦的后果。

图解

假设要创建一个简易的Twitter,让我们来思考获取推文的查询。

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!
}

如果将此直接转化为表格,会发生什么呢?

这是个不好的例子

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

改良

在设计数据库的时候,将”Tweet”和”User”的表分开,让”Tweet”只存储”UserID”是一个常规做法。

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

GraphQL和SQL的转换

如果试图处理之前提到的Tweet的查询,会发生什么情况呢?

query tweet{
    Tweet(argument:"12345"){
        Text
        User{
            Name
            UserId    
        }
    }
}

处理上述的查询时,在SQL中应该进行哪些操作?

    SELECT * FROM tweet inner join user on tweet.Userid = user.userid WHERE tweet.Tweetid = "12345" 
mermaid-diagram-2022-10-12-161348.png

最终

数据库的设计因使用场景而异。我们介绍的方法只是其中一个例子。希望能对正确理解GraphQL和SQL有所帮助。

请参阅

我用美人鱼符号法编写了上述的表格图。

 

广告
将在 10 秒后关闭
bannerAds