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!
}
如果将此直接转化为表格,会发生什么呢?
这是个不好的例子
改良
在设计数据库的时候,将”Tweet”和”User”的表分开,让”Tweet”只存储”UserID”是一个常规做法。
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"
最终
数据库的设计因使用场景而异。我们介绍的方法只是其中一个例子。希望能对正确理解GraphQL和SQL有所帮助。
请参阅
我用美人鱼符号法编写了上述的表格图。