还在用维恩图可视化SQL的Join连接吗?你该看看这个
维恩图是去年的事了
图片由作者提供,灵感来自 R for Data Science
几周前,我在Reddit上发表了一篇关于 SQL Anti-Joins在Reddit上。在我分享后不久,我得到了这样的回应。
图片由作者提供
这引起了我的兴趣,因为到目前为止,我还没有读过或听说过有人认为维恩图是可视化SQL连接的坏方法,而我已经不断地用SQL编码了3年多。我个人认为,维恩图对于快速记忆和可视化两个表之间的连接类型很有帮助。所以这是我的回答。
图片由作者提供
在这篇评论之后,我得到了一些热情的回应,并意识到这个问题已经被广泛地讨论过了,而且背后有一些历史。当我在阅读更多相关内容时,我发现了一个流行的Reddit帖子,标题是, “Say NO to Venn Diagrams When Explaining Joins”.阅读别人对它的看法很有意思。我还发现了两年前发表在Towards Data Science上的一个相关的热门帖子,标题是, “ Can we stop with the SQL JOINs venn diagrams insanity?”.
这场辩论让我想起了关于如何发音SQL的争论,或者当我第一次听到关于 tabs vs. spaces debate.我决定写这篇文章,因为我思考了双方的争论,然后发现了我认为被低估的SQL连接的可视化,我称之为格子旗图。
快速的题外话:关于SQL的发音,SQL最初被拼成'SEQUEL',后来才改成'SQL'。due to a trademark issue.
尽管我对这个话题有自己的看法,但我认为值得说明的是,我相信争论双方的人都有一些有效的观点,这些可视化的方法都是表示SQL连接的有效方法。这场辩论之所以存在,是因为双方都从不同的学习方法中看到了好处,这也是可以的。当然,对于大多数人来说,可能有一个最佳的学习路径,但学习是一种量身定做的体验,所以我不想贬低其他人通过使用不同的可视化方式所获得的好处。但请记住,真正理解SQL连接的最好方法是进入代码并进行实践!"。SQL Practice.com这是一个我发现的练习SQL的好资源。
但请记住,真正理解SQL连接的最好方法是进入代码并进行实践。
既然如此,我希望解决 "SQL维恩图大辩论 "中双方的关键点,并提出一个可能,只是可能,安抚双方人员的解决方案。
◆ 争论双方的关键点
为了更好地理解双方的观点,我在Reddit上阅读了不少意见,以及一些文章。以下是我发现人们不同意使用维恩图来可视化SQL连接的原因。
维恩图起源于集合理论,因此不 应该被用于可视化两个关系表之间的连接。
有些人声称,在用维恩图介绍概念时,学生们很难理解连接。
维恩图在技术上并不能正确表示一个连接的实际作用
维恩图有各种限制:即不能很好地显示其他连接类型(如交叉连接),不能显示重复出现时的情况,等等。
这些是我发现的那些反对使用维恩图的人的主要批评意见。赞成使用SQL文氏图的人主要回应了两点。
虽然维恩图在技术上可能并不正确,但它有助于人们记住连接的类型,而且更简单易懂。
根据所选列的不同,连接和集合操作的结果可能完全相同。
不管你更同意哪一方,你现在对我决定写这篇文章的原因有了一些背景。
◆ 维恩图的一个替代解决方案
有一篇 popular article in 2016也反对使用维恩图,作者提出了另一种图,叫做 "连接图"。下面是一个内联接的例子,它被可视化为一个联接图。
图片由作者提供,灵感来自 Jooq Blog
这种图是有益的,因为它比维恩图更准确地表示了SQL连接中使用的表格结构。这个图的问题是,它以颜色显示主键,但在这些颜色中也有数字或字母。矩形内的字母和数字应该代表除了主键列(用颜色表示)之外的其他列,但这是这种可视化开始崩溃的地方。用一个矩形来表示多列,会让人感到困惑和不直观(至少对我来说是这样)。不管怎么说,这个可视化似乎对一些难以理解使用SQL连接的人有帮助。每个可视化都有其局限性。
◆ 方格旗图
当我在回顾将SQL连接可视化的不同方法时,我发现了我个人的最爱。我希望这张图可以弥补双方之间的差距,或者至少提供另一种选择,帮助人们理解SQL连接。
这张图最初是由Hadley Wickham和Garrett Grolemund在他们的书中创建的 “R for Data Science”.的章节中可以找到该图。‘Relational data’.
我在下面展示的作弊表中重新制作了这些图表,但我也创建了一个Github资源库,以便你可以下载图片 here.
图片由作者提供,灵感来自 R for Data Science
图片由作者提供,灵感来自 R for Data Science
◆ 为什么我喜欢方格旗图?
以下是我喜欢这个图的所有原因。
比连接图更准确地表示一个连接,因为它的主键具有相同的颜色和数字。
为每个表显示1个额外的数值列,以帮助可视化除主键列之外的列中的数据所发生的情况。
连接线有助于简化视觉,使其容易看到连接行。
与连接图类似,连接产生的输出表显示在右边
在适用的情况下会显示空值,这正是在SQL中执行连接时的情况
可以显示交叉连接,与维恩图相比,这是一个优势。
显示了SQL语法供参考,类似于维恩图的小抄。here
我仍然相信维恩图对于可视化SQL连接是很有用的,但它们所能代表的范围和准确性是有限的。希望这些格子旗图能够成为你学习SQL时的一个重要参考。
来源:
https://www.toutiao.com/article/7084420955828765192/?log_from=52a1ecb617681_1649639265337
“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:[email protected]
IT大咖说 | 关于版权
感谢您对IT大咖说的热心支持!
相关推荐
推荐文章