专栏首页Web行业观察如何向奶奶解释SQL与NoSQL的区别

如何向奶奶解释SQL与NoSQL的区别

本文介绍SQL和关系代数的起源,没有干货,请谨慎阅读。

如何向你奶奶解释SQL和NoSQL

最近Medium上出现了一个面试题:如何向你奶奶解释SQL和NoSQL的区别。我看作者是用自己的结构化的家族谱来比喻sql和nosql的区别的,写的挺好就是有点啰嗦,面试官可没时间听你在那滔滔不绝。我个人觉得,sql和nosql的区别海了去了,一两句话可概括不完,更何况是讲给你奶奶听,所以如果真被问到这个问题,可以挑选其中一个最主要的区别来类比就好,比如sql是通用的,nosql是专用的。所以我的答案是这样的:

尊敬的祖母,数据库就是用来存储数据的仓库,就像我们生活中存放物品的容器一样,但是容器也有通用和专用之分,比如塑料袋就是通用容器,因为塑料袋可以装各种东西:即可以装糖果,也可以装铅笔。但我们也可以选择一种更合适的存储方式:用糖果盒来装糖果,用笔筒来装铅笔。糖果盒和笔筒就是专用容器。数据和物品一样,也可以采用通用或者专用的存储方式,各有利弊,SQL就是通用数据库,NoSQL就是专用数据库,这就是他俩的区别。

集合论与关系代数

可是为什么SQL可以做到通用呢?世界上的数据结构千千万,为啥SQL可以满足各种需求而且半个世纪都不过时?

虽然说唯一不变的就是变化,计算机行业一直在发生裂变,但是有些基本的东西是永远不变的,或者说变化很慢:

  • 当今世上最流行的编程语言JavaScript仍然遵守着60年前Lisp语言的标准。
  • 现代操作系统Windows,OSX,Linux都来自于共同祖先Unix。
  • 本世纪AI技术的基本原则其实早在计算机诞生之初就提出来了。
  • 。。。

数据库的发展也是一样,无论形式怎样变化,其本质都是围绕集合论与关系代数来设计的。基本理论决定一切,在软件行业只要掌握了基础数学理论,就掌握了一切变化的规律,这就是SQL永不过时的秘密。

一切都是线性表

软件学家认识到,整个计算机行业都是建立在对数据的一维利用上:无论是内存,外存还是网络,存储和传输的都是一维数据。一维数据也就是线性表,所有复杂的数据结构都建立在线性表之上,任何二维,三维的数据结构也是由线性表组成的。线性表俗称列表,从“人类本质是复读机”理论上看,世间万物都是由列表(集合)组成的。

在宇宙间,一个技术文明等级的重要标志,是它能够控制和使用的微观维度。对于基本粒子的一维使用,从我们那些长毛裸·体的祖先在山洞中生起篝火时就开始了,对化学反应的控制,就是在一维层次上操控微观粒子。当然,这种控制也是从低级到高级,从篝火到后来的蒸汽机,再到后来的发电机;现在,人类对微观粒子一维控制的水平已达到了顶峰,有了计算机和纳米材料。但这一切,都局限于对微观维度的一维控制,在宇宙间一个更高级的文明看来,篝火和计算机、纳米材料等等是没有本质区别的,同属于一个层次。 致敬《三体I:地球往事》刘慈欣

基于这个理论(或者说世界观),集合论被拿来研究数据库了,比如我们数学课本上的集合要求集合的元素具有互异性和无序性:因为要互异,我们有了数据库的唯一性主键;因为要无序,数据库的排序就交给索引来做了。

集合论是数学本身的一个分支,数据库科学出现后,为了研究集合与集合之间的关系,衍生出了一门新的分支:关系代数。

关系代数研究的是二维线性表之间可以发生的各种操作,也就是表格语言,最基本的操作包括矩阵学中的水平分割和垂直分割:分别对应选择和投影。SQL(结构化查询语言)就是关系代数的一个实现,所以SQL数据库也叫关系数据库,关系代数和sql的对应关系如下图:

尽管SQL的语法一直饱受吐槽:凌乱而易引歧义,还不是很优雅。但由于SQL的数学基础很稳固,SQL才能够一直流行到现在。但并不是说NoSQL的基础不稳固,相反NoSQL是对具体结构做具体分析,NoSQL的数学基础往往更简单,更牢固。

表格与图表的统一

无论是表格还是各种统计图在数据上都是统一的,都是二维列表(也可以叫列表的列表),一个表格可以无损地转化成一个柱状图,折线图,雷达图,饼图。。。所以表格可以看成是一种特殊的图表。著名的前端框架ag-grid就是在这个理论上诞生的:

关系代数,SQL,NoSQL,线性表,统计图,表格,ag-grid这些研究的都是集合,都是列表,都是最本质,永恒不变的东西,所以才有那么多学者投入到这个永不过时的领域。

虽然这篇文章全是大而空的概念,一点干货都没有,但仍然不妨碍它成为你学习关系代数和SQL的入门篇章,万一哪一天我想起来了再给你们写一部不水的《关系代数导论》。(估计是等不到了)

什么?你还不知道ag-gird?择日再介绍一下这个神一样的框架。mua~

本文分享自微信公众号 - WebHub(myWebHub),作者:金恒昱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10个爽翻天的console调试技巧

    为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

    Jean
  • 【科普】Dart语言

    Dart是一门新的编程语言,如同JAVA、PHP一样,是为了解决编写应用程序中的一些实际问题而被造轮子发明出来的,而这个造轮子的人就是 Google。可能大家都...

    Jean
  • 降维打击(序列化)的流行手段

    上次介绍了message pack,一种非常有潜力的数据格式,市面上还有其他的格式比如json,xml,bson,甚至一些标记语言(html,markdown...

    Jean
  • 一个写SQL语句的便利工具

    前言 我们平时会经常写SQL语句,这个过程我有一个痛点 我一直使用的数据库工具是 Sequel Pro,在写SQL时有点不方便,主要是对表明和字段名的自动提示支...

    dys
  • 杨廷琨Oracle Code大会分享:如何编写高效SQL(含PPT)

    2018 Oracle Code 于5月17日在新加坡拉开帷幕。作为全球开发者交流分享的年度盛会,为吸引所有领域的开发者,Oracle今年将自1996年开始的J...

    数据和云
  • 【DB笔试面试603】在Oracle中,固定SQL执行计划的方法有哪些?

    在实际项目中,通常在开发环境下,一些SQL执行没有任何功能问题,而当到了生产环境或生产环境的数据量发生较大的变量时,其SQL的执行效率非常低。此时如果更改SQL...

    小麦苗DBA宝典
  • 数据库监控断点业务中断的一种案例及分析

    问题已经分析出来了,就是某个SQL阻塞了其他请求,那么如何找到这条SQL呢?有两种方式

    于航
  • WEB攻击手段及防御第2篇-SQL注入

    概念 SQL注入即通过WEB表单域插入非法SQL命令,当服务器端构造SQL时采用拼接形式,非法SQL与正常SQL一并构造并在数据库中执行。 简单的SQL注入的...

    Java技术栈
  • MySQL慢日志优化平台初步设计

    这是一个初步的概览面板,能够通过这个面板实现大部分的慢日志提取需求,目的是能够通过可视化的方式更全面的展示慢日志的信息,如下:

    jeanron100
  • 【DB笔试面试464】动态SQL是什么?

    在PL/SQL开发过程中,使用SQL或PL/SQL可以实现大部分的需求,但是,在某些特殊的情况下,在PL/SQL中使用标准的SQL语句或DML语句不能实现自己的...

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券