解释SQL和NoSQL
如何向你奶奶解释SQL和NoSQL
最近Medium上出现了一个面试题:如何向你奶奶解释SQL和NoSQL的区别。我看作者是用自己的结构化的家族谱来比喻sql和nosql的区别的,写的挺好就是有点啰嗦,面试官可没时间听你在那滔滔不绝。我个人觉得,sql和nosql的区别海了去了,一两句话可概括不完,更何况是讲给你奶奶听,所以如果真被问到这个问题,可以挑选其中一个最主要的区别来类比就好,比如sql是通用的,nosql是专用的。所以我的答案是这样的:
尊敬的祖母,数据库就是用来存储数据的仓库,就像我们生活中存放物品的容器一样,但是容器也有通用和专用之分,比如塑料袋就是通用容器,因为塑料袋可以装各种东西:即可以装糖果,也可以装铅笔。但我们也可以选择一种更合适的存储方式:用糖果盒来装糖果,用笔筒来装铅笔。糖果盒和笔筒就是专用容器。数据和物品一样,也可以采用通用或者专用的存储方式,各有利弊,SQL就是通用数据库,NoSQL就是专用数据库,这就是他俩的区别。
集合论与关系代数
可是为什么SQL可以做到通用呢?世界上的数据结构千千万,为啥SQL可以满足各种需求而且半个世纪都不过时?
虽然说唯一不变的就是变化,计算机行业一直在发生裂变,但是有些基本的东西是永远不变的,或者说变化很慢:当今世上最流行的编程语言JavaScript仍然遵守着60年前Lisp语言的标准,现代操作系统Windows,OSX,Linux都来自于共同祖先Unix。
数据库的发展也是一样,无论形式怎样变化,其本质都是围绕集合论与关系代数来设计的。基本理论决定一切,在软件行业只要掌握了基础数学理论,就掌握了一切变化的规律,这就是SQL永不过时的秘密。
一切都是线性表
软件学家认识到,整个计算机行业都是建立在对数据的一维利用上:无论是内存,外存还是网络,存储和传输的都是一维数据。一维数据也就是线性表,所有复杂的数据结构都建立在线性表之上,任何二维,三维的数据结构也是由线性表组成的。线性表俗称列表,从“人类本质是复读机”理论上看,世间万物都是由列表(集合)组成的。
在宇宙间,一个技术文明等级的重要标志,是它能够控制和使用的微观维度。对于基本粒子的一维使用,从我们那些长毛裸·体的祖先在山洞中生起篝火时就开始了,对化学反应的控制,就是在一维层次上操控微观粒子。当然,这种控制也是从低级到高级,从篝火到后来的蒸汽机,再到后来的发电机;现在,人类对微观粒子一维控制的水平已达到了顶峰,有了计算机和纳米材料。但这一切,都局限于对微观维度的一维控制,在宇宙间一个更高级的文明看来,篝火和计算机、纳米材料等等是没有本质区别的,同属于一个层次。
------《三体I:地球往事》
科幻小说《三体》刘慈欣
基于这个理论(或者说世界观),集合论被拿来研究数据库了,比如我们数学课本上的集合要求集合的元素具有互异性和无序性:因为要互异,我们有了数据库的唯一性主键;因为要无序,数据库的排序就交给索引来做了。
集合论是数学本身的一个分支,数据库科学出现后,为了研究集合与集合之间的关系,衍生出了一门新的分支:关系代数。
关系代数研究的是二维线性表之间可以发生的各种操作,也就是表格语言,最基本的操作包括矩阵学中的水平分割和垂直分割:分别对应选择和投影。SQL(结构化查询语言)就是关系代数的一个实现,所以SQL数据库也叫关系数据库,关系代数和sql的对应关系如下图:
尽管SQL的语法一直饱受吐槽:凌乱而易引歧义,还不是很优雅。但由于SQL的数学基础很稳固,SQL才能够一直流行到现在。但并不是说NoSQL的基础不稳固,相反NoSQL是对具体结构做具体分析,NoSQL的数学基础往往更简单,更牢固。
表格与图表的统一
无论是表格还是各种统计图在数据上都是统一的,都是二维列表(也可以叫列表的列表),一个表格可以无损地转化成一个柱状图,折线图,雷达图,饼图。。。所以表格可以看成是一种特殊的图表。著名的前端框架ag-grid就是在这个理论上诞生的:
关系代数,SQL,NoSQL,线性表,统计图,表格,ag-grid这些研究的都是集合,都是列表,都是最本质,永恒不变的东西,所以才有那么多学者投入到这个永不过时的领域。
原文链接:https://blog.csdn.net/github_38885296/article/details/103249146
解释SQL和NoSQL相关推荐
- 如何向奶奶解释SQL与NoSQL的区别
本文介绍SQL和关系代数的起源,没有干货,请谨慎阅读. 如何向你奶奶解释SQL和NoSQL 最近Medium上出现了一个面试题:如何向你奶奶解释SQL和NoSQL的区别.我看作者是用自己的结构化的家族 ...
- 程序员该如何向奶奶解释 SQL 和 NoSQL?
@程序员,如果你的奶奶问你什么是 SQL 和 NoSQL,你会如何浅显易懂地向她解释清楚呢? 作者 | SebastianScholl 译者 | 刘静,责编 | 郭芮 出品 | CSDN(ID:CSD ...
- EF Core:一统SQL和NoSQL数据库
推出EF Core的初衷之一,就是开发出一种可在很少甚至不更改代码的情况下使用SQL和NoSQL数据库的模型.Microsoft正向此目标迈出第一步,发布了用于Azure Cosmos DB的实验性E ...
- 关于SQL 与 NoSQL的区别
转载自:http://blog.csdn.net/xlgen157387/article/details/47908797 云计算背后的秘密:NoSQL诞生的原因和优缺点 我本来一直觉得NoSQL其实 ...
- Redis(1): SQL or NoSql
开始Redis之旅~~~ 一.前言 你是否在为系统的数据库来一波大流量就几乎打满CPU,日常CPU居高不下烦恼?你是否在各种NoSql间纠结不定,到底该选用那种最好? 作为互联网从业人员,我们要知道关 ...
- SQL vs NoSQL: The Debate on the Best Database Management System
作者:禅与计算机程序设计艺术 SQL vs NoSQL: The Debate on the Best Database Management System 引言 1.1. 背景介绍 随着互联网技术的 ...
- SQL与NoSQL的区别 以MySQL与MongoDB为例
异同对比 1.语言和结构层面 SQL数据库,是基于表的,并且用结构化语言也就是SQL来定义和操纵数据.一方面,这是非常强大的:SQL是最通用和最广泛使用的选项之一,使其成为一个安全的选择,尤其适用于复 ...
- SQL的连接(join)有哪些常见形式?解释一下?解释 SQL 的 left join 和 right join?
SQL的连接(join)有哪些常见形式?解释一下?解释 SQL 的 left join 和 right join? SQL的连接(join)有哪些常见形式? sql连接查询:把多张表的列组合在一起,产 ...
- 一张图解释SQL Server集群、镜像、复制、日志传送
一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.
最新文章
- QB:基于深度学习的病毒序列识别
- 翻译:创建 Windows8 应用 Part I: Hello, world!
- 成年人的样子是什么样子_不只是看样子
- 使用Spectre.Console创建漂亮的控制台应用程序
- 06-对图像进行腐蚀操作
- 在Javascript中得到站点的根路径
- 线程调度及进程调度详解
- ADOBE AIR 技术
- 【转载】FPGA配置方式
- python语音合成并播放_用Python写一个语音播放软件
- 蓝桥杯题目---蓝桥骑士(寻找逐渐递增的子序列 最多个数)
- js分享到第三方平台
- 魅蓝metal刷android 6,魅蓝metal刷机包 Flyme 6.1.0.0Y稳定版 对系统稳定性和功耗表现进行了特定优化...
- 多线程编译与运行linux,Linux系统下多线程程序编译makefile文件
- 传统的人事管理与人力资源管理有什么区别,后者有了什么新突破?
- 蛮力法(python)
- vue实现数据无缝循环滚动
- java上机实验学习笔记————实验七 图形用户界面设计
- 使用Office Tool Plus下载Office和Visio
- 分省创新能力面板数据 - 含专利数、成交额等多指标数据(2008-2019年)