可以这样回答:emmm 怎么说呢。

数据库就是用来存储数据的仓库,就像我们生活中存放物品的容器一样,但是容器也有通用和专用之分,比如塑料袋就是通用容器,因为塑料袋可以装各种东西:即可以装糖果,也可以装铅笔。但我们也可以选择一种更合适的存储方式:用糖果盒来装糖果,用笔筒来装铅笔。糖果盒和笔筒就是专用容器。数据和物品一样,也可以采用通用或者专用的存储方式,各有利弊,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这些研究的都是集合,都是列表,都是最本质,永恒不变的东西,所以才有那么多学者投入到这个永不过时的领域。

就这样啦~ mua!

(完)

Linux 文本格式显示折线图,linux 折线图相关推荐

  1. 查看文本是linux格式还是windows格式;以及实现linux文本格式和linux文本格式转换

    本人的解决思路是:直接下载安装Notepad++ 文本编辑器 1,安装后,打开文本,在Notepad++ 文本编辑器的编辑界面右下角会显示文本格式 windows 格式则显示:Windows CR L ...

  2. linux日期格式怎样比较大小,Linux下Shell日期的格式,你知道几种?

    不管是哪种语言,日期/时间都是一个非常重要的值.比如我们保存日志的时候,往往是某个前缀再加上当前时间,这样日志文件名称就可以做到唯一. 在Shell环境里,我们获取时间的命令是date,但date出来 ...

  3. linux图片格式转换工具,在Linux系统上安装和使用Converseen批量图像转换器的方法...

    本文介绍在Linux操作系统上安装和使用Converseen的方法,这是一个图形批量图像转换器,可用在Arch Linux.Debian.Ubuntu.Linux Mint.Fedora.openSU ...

  4. linux ping只显示一条,Linux ping命令,检测网络是否连通

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好地帮助我们 ...

  5. linux命令格式,常用10个LINUX命令说明

    LS命令 -作用:显示目录内容,类似DOS下的DIR -格式:LS[options][filename] -常用参数: >-a:all,不隐藏任何以"."字符开始的文件 &g ...

  6. linux按大小显示当前文件,linux下按文件大小排序

    日常维护中经常遇到磁盘空间告警的问题需要查看具体是那一个或多个文件占用的空间过大,再根据具体情况决定是否需要转移或删除.当然该问题可以通过find指令找出所有超出某大小的所有文件.除了find ,我们 ...

  7. linux vi编译显示行号,Linux编辑器vi、vim、gedit显示行号

    在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的. 我们有二种办法可以解决: 第一种是,手动显示: ...

  8. Linux控制台打开显示字符画,Linux 命令行字符画工具

    代码地址:https://github.com/pedroqin/Ascii_Signature 公众号: write_simple_demo,专注linux 介绍 此项目移植于网页版字符画生成器,最 ...

  9. linux文本编辑器vi实验心得,linux中vi编辑器的练习心得

    1. 用vi编写一个文档test.txt,将其存放在用户在用户主目录下,内容如下: Plagiarism is breach of Integrity.It is a form of cheating ...

最新文章

  1. SAP MM 为MB51报表增加查询字段
  2. 求1-100之间的所有素数
  3. Asp.Net MVC 使用FileResult导出Excel数据文件
  4. vue router 原生html,Vue router 使用 History 模式导致页面请求 404
  5. java中找不到javax包_logstash 找不到 java 环境
  6. TypeError: tensor is not a torch image.
  7. Flutter进阶第1篇: http get请求数据、post提交数据、以及渲染动态数据
  8. Jquery—对$()的总结
  9. 如何正确地使用arXiv平台
  10. 【C++】内存4区---代码区、全局区、栈区、堆区
  11. Spring read-only=true 只读事务的一些概念
  12. NCBI引物设计-查找目的基因前后序列方法、序列比对
  13. Hive On Spark搭建报错:Failed to create Spark client for Spark session xx: ..TimeoutException
  14. 中兴新支点操作系统_中兴新支点系统预装测试
  15. php智能文章相关性匹配,PHP中的Pearson相关性
  16. TypeError: list indices must be integers or slices, not tuple
  17. 深入AXI4总线-[三]传输事务结构
  18. 高盛报告:人工智能、机器学习和数据将推动未来生产力的发展
  19. exchange2016邮件服务器配置,Exchange Server 2016客户端访问配置
  20. [附源码]计算机毕业设计JAVA社区生鲜电商平台

热门文章

  1. C和指针之字符串简单实现strchr、strcmp函数
  2. java之socket的OOBInline和UrgentData和发送心跳包研究
  3. Android之解决远程拍照不打开activity用其它方式获取surfaceView
  4. Android之文件读写
  5. python 数据分析找到老外最喜欢的中国美食【完整代码】
  6. sql drop 简单操作(Mysql)
  7. java内存四大区,jvm基础-内存区域
  8. 软件项目管理课后题下载【共5个章(1、3、4、5、6)】
  9. 霍金竟然亲口承认自己是个赌徒!明明失败了不止一次,“菜鸡”却成了神话!...
  10. 好好珍惜今生,不要期待来世……