SQL必知必懂的八大核心概念
写在前面:如果你是一名程序员又恰好是一名SQLBOY的话,那么请移步,因为下面讲的实在太不专业了;如果你是一名想学会写好SQL的运营,那么你一定要认真读完。
本文用通俗的语言介绍SQL和数据库相关的八大核心概念,每一个都是你理解数据表 写好SQL的关键,了解这些的同时你也对数据BOY从事的工作有了更深的一份了解。话不多说,上关键词:
1、数据库(data base)
我们首先看下数据库的百度百科:
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
简单总结一下,数据库就是用来存放数据的地方。我们平常经常听到的mysql,oracle,sql-server等,都可以称为数据库。
有好事者可能会问为什么要用数据库来存在数据呢?这里给你一个指引,你可以查看数据管理的三个阶段:人工管理阶段,文件系统阶段,数据库管理系统。
我们举个例子来说明什么是数据库,数据库就像现在大型电商的一个仓库,里面放满了各种各样的商品。你可能从照片上看到过这些仓库的照片,不知道细心的你是否发现了,这些仓库通常都是井井有条,物品摆放的甚至比你家还要整齐,为什么要这么做呢?我们先卖个关子,下面会讲到。
经常写SQL的同于会遇到关于数据库的另外一个问题,为什么不能跨库查询?这里我给大家用这个例子来解释一下。并不是不能,而是需要一把钥匙,但是即使有了这把钥匙你依然不想跨库查询。首先,按照一般的惯例,京东的仓管肯定是不能到苏宁的仓库里面取东西的,但是如果有一天他获取了苏宁仓库的钥匙,那就可以到苏宁仓库随意“拿”东西了。这把所谓的钥匙就是数据库的连接串信息,主要包括用户名、账号、密码、地址等信息。
刚才也说了,即使有了钥匙一般也不会跨库查询,两个方面的原因:1、安全问题,万一别人家de东西丢了怎么办?找你,你赔吗?2、一家仓库的钥匙还好,那如果及时家,上百家的话,你不晕吗?关于数据库了解这么多就差不多了。
2、数据仓库(data warehouse)
这是数据库的弟弟,为什么这么说呢?因为它的出生确实晚于数据库,而且在相当长的一段时间内,数据库其实是承担了数据仓库的很大一部分职责。后来,数据库是在是承受不住了整个大家族的压力,就诞生了数据仓库。
数据仓库也有个百科定义,我们一起看下:
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。
这里面几个核心的点我们解释一下:
面向主题:数据仓库中的数据是按照一定的主题域进行组织,比如用户主题,公司主题等。不过个人觉得这不是一个必须的条件,因为数据仓库里面好多是面向业务过程的,比如下单、支付等。
集成的:所谓的集成就是把不同系统(数据源),不同数据结构,不同单位度量的数据拉取到一起,进行加工处理,输出为统一的格式化的集成数据。
相对稳定的:这是说数据仓库只是数据的搬运工,不会对原生的数据做任何修改,所以下次你找数据仓库的人员想把你的账户增加一千万的时候,小哥哥说他做不了的时候不是骗你,是真做不了。
反映历史变化:数据仓库的一大作用就是把数据库的变化数据存储起来,记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。这也是数据仓库的价值体现。
解释完这些概念,我们还是举个例子来说明数据库和数据仓库的不同,前面说了数据库是一个大仓库,那么数据仓库就是一个多层的城市综合体。第一层放的是原生的小麦、稻谷、玉米等未经加工处理的原材料,你想要吃馒头、面包啊就只能自己做了。第二层放的是面粉、大米这些初步加工过的原料,显然你想吃馒头的还是要自己做,第三层则是已经做好的馒头、米线啊等等,你直接动口就行了,不用动手了,可以节省很多的时间。上面可能还有更多的层,但一般不会超过6层,那样就要加电梯了,我们就不具体介绍了,效果都是类似的。
这也体现了数仓两个核心(OLAP和分层)中的分层的价值所在,用空间来换取时间。
3、表(table)
表其实就很类似于我们常用的excel,用前面的例子,数据库是一个很大的仓库,但是具体放东西还是需要地盘,这些所谓的地盘就是表。
每一个表都占据一块区域,通常是日化放一块,生鲜放一块…… 这就是上面说的你看到整个仓库都很整洁的原因。一来为了区分不同的品类,二来也是为了取用方便,不至于东一榔头西一棒槌的。表与表之间是对等的关系,属于同一个库的表之间是可以互相访问的。
数据仓库里面大宽表的意思就是把不同区域的物品(数据)取过来整合到一起,你下单的时候直接配送,不用再从各个订单取了。
4、视图 (view)
视图是表的一个影子,因为没有表就没有视图。这不是语句玩笑话,事实就是如此。
不像上面的库、表都是物理存在的东西,视图是一个逻辑上存在的东西,那种虚无缥缈的东西。有点类似于唯物主义与唯心主义。
逻辑上的东西我们很难找到一个合适例子来解释,下面我们试着接着用上面的例子来解释视图的概念。上面说了,仓库的中每一块区域、地盘是表,那么视图就是对这些区域的一次照片,而且通常情况下还不是全景照片,很有可能是通过PS处理后把多个区域的不同产品拼接之后的照片。至于你能在照片中看到多少,那取决于拍照人的心情。而这也正是视图的价值所在,防止数据泄露,让不该看到的人看不到不该看到的东西。哈哈,有点绕,说白了就是保护隐私。
回到正题,这照片上的东西确实是实实在在存在的东西,但是你能触摸得到吗?恐怕不行吧,如果要取照片里面的东西还是
要到实际区域中取,这就是逻辑存在的含义。有一种实际存在的物理视图,真实存在但不在我们介绍的范围之内,就不做详细介绍了。
5、属性
属性,又称“列”,“数据列”,几乎可以等价的excel里面的列
在大多数场合下这三者都可以通用,非要分得清楚的话,属性一般是指列名,也就是表头;列指的是单元格里面的具体内容。属性的概念很简单我们就不举例介绍了。
6、元组
这是与属性相对的一个概念属相是列,元组是行。通常又被称作“记录”,“行”,“每一条记录”,这三者是完全的等价,只不过元组是更为学术的称法。概念很好理解,但元组是很重要的内容,因为我们通常对表的操作都是基于每一行的数据做处理的。鉴于概念很简单,我们这里也不举例介绍了。
7、主键 (Primary key)
主键是用来唯一标识表中的一条记录的,主键属于属性的范畴,意思就是,主键是属性中的一列或者多列。
什么时候一列什么时候多列呢?如果单独一列就可以唯一确定表中的一条记录,那么属性就是一列,也就是说令这一列等于某个值的时候查出来只有一条记录,这就是唯一主键;反之如果需要多个列联合起来才能唯一确定表中的一条记录,这就是联合主键。
举个例子:学生表中有一列身份证号,我们知道每个人的身份证号都是不一样的,那么我们就可以把身份证号这一列作为唯一主键。但是如果没有身份证号这一列呢?假如有学号、姓名等其他列,我们可以把学号和姓名联合起来作为主键,理论上来说不会存在学号和姓名相同但实际上是两个人的情况。
主键有两大特性:非空和唯一性。很好理解,我们就不解释了。这里我们顺带体现另外的两个概念:外键和唯一键。外键可以理解为其他表的主键,唯一键是唯一标识一条记录,但是允许为空,这也是它与主键的差异。
主键有什么用呢?第一,判断数据在某个列上是否有重复。第二,多表关联的时候预判是一对多,多对一还是多对多的关联。
关于主键我们就介绍这么多。
8、ETL
这是一个简称,全称是:Extraction-Transformation-Loading,抽取、转换和加载。这么讲可能还是有些抽象,我们继续拿上面的例子来说明什么是ETL。
其实很简单,纵向来看就是把小麦,稻谷,玉米加工成面粉、大米、玉米粒的过程,当然再加工成面条,米粉的过程同样也属于ETL;横向来看,是把面粉、坚果、香精等混合后加工成饼干的过程。同样对应于数据仓库里面就是分层和做宽表的过程。
ETL这块其实是说起来容易,但是做好很难的一个东西。如何保证数据不重不漏这是最基本的,还要保证面包好吃这是更高层的。希望下次数仓人员说他在开发ETL的时候你不在问ETL具体是干嘛了。
本期的核心概念就把介绍到这里,欢迎关注下期的写好SQL的六脉神剑。