“数据分析需要懂数据库的知识吗?”
李老头最近经常听到这样的问题,很多新人都觉得如果自己只做业务,不走技术线,是不是就可以不用学习数据库了?是不是面试的时候就不需要准备了?
毕竟很多新人刚进公司,一看到数据库里各种表的复杂链接方式,就开始犯起头疼了,更有甚者连SQL与数据库的区别都不知道,数据仓库这些概念就更不用提了。
然而,让很多人失望的是,数据库知识是我在面试新人时最常问的问题,没有之一。
对数据库的了解程度,要看你定位在数据分析的哪一种层次,我见过一些数据分析人员不懂数据库,都是基于 Excel 的文件源做数据分析,他们更擅长业务。
但是,他们通常情况下必须依赖于 IT 部门的支持,需要 IT 部门提供一些基本的分析数据。凭借对业务的理解,对业务数据的理解也一样可以做好数据分析工作。
也有一类数据分析人员,本身就是从数据库、商业智能BI的角色转向纯粹的数据分析人员,通过对业务的理解加上数据处理的技能和知识在分析领域也可以做的很好。
他们的一大优点就是在很大程度上不需要过度依赖IT部门,给他们一定的权限就可以自己动手直接面对统一的数据源做数据分析,有时一条SQL就是数据分析的一个环节。
所以,作为数据分析人员,个人觉得技多不压身,多一种获取不同数据渠道的本领,自然是有好处的。
首先在了解数据库之前,我们要先了解一下数据是怎么储存的?
我们都知道,当我们的祖先还在荒野中茹毛饮血的时候,就学会了利用结绳记事来进行数据储存,这些被打上结的绳子就是“数据”,虽然这种数据很难保存、很难提取。
后来祖先利用甲骨、竹简、纸张来储存文字数据,近代发明了录音机、摄像机储存音频数据,虽然数据载体一直在变化,但是数据存储的方式并没有发生很大的变化,都属于传统存储方式。
直到信息时代的到来,数据存储的方式才发生了重大变革并朝着两分方向发展:文件与数据库。
1、文件相当于把数据存放在Excel当中,形成读写文件后进行存储,然后通过python等工具对文件数据进行筛选、处理、提取;
2、数据库则是把数据按照其结构将其储存在计算机中,形成一个具有大数据量的数据集合,相当于存放文件的文件柜。
利用数据库存储数据是目前最为流行的方式,因为数据库拥有持久化存储、读写速度也很高,更关键的是数据库可以极大程度保证数据的有效性,而不像是Excel等文件极易容易产生修改错误。
按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网状数据库和关系型数据库。而在当今的互联网企业中,最常用的数据库模式主要有两种,即关系型数据库和非关系型数据库。
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管理。
关系型通俗的理解是,数据作为二维数组存在,你可以理解为图书馆的图书排列。
书架、楼层你可以理解为关系型的数据结构,书作为数据存在,而所有图书馆管理员就是数据库的进程,用于不同的工作。有人救火(数据修复、备份),有人整理书架、书籍(数据整理、归档),而用户进程就是指的来到图书馆的顾客,他们看书、移动书籍,而管理员就会对着维护。
关系型数据库诞生距今已有40多年了,从理论产生到发展到实现产品,例如:常见的MySQL和Oracle,oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而MySQL也是不容忽视的数据库,以至于被Oracle重金收购了。
非关系型数据库也被称为NoSQL数据库,本意是“Not Only SQL”,作为传统数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥难以想象的高效率和高性能。
因为随着web2.0网站的兴起,海量数据对关系型数据库存储的容量要求高,单机无法满足需求,很多时候需要用集群来解决问题,关系型数据库就显得力不从心了。
非关系型数据库因而诞生,实际上非关系型数据库就是针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品,比如Google的BigTable与Amazon的Dynamo。
这个时候很多人就会把sql与数据库的概念搞混了,很多新人就以为Sql就是用来存储数据的数据库,还有的以为sql是数据库的一种。
为了方便大家理解,我给大家打个比方:
如果数据就是一张张的表格,我们就可以按照不同的表格关系放在不同的文件夹里,这个文件夹就相当于数据库的基础构成要素——数据表。
而当我们的文件夹也非常繁多复杂的时候,我们就可以将文件夹按照不同的构成分类储存在文件柜中,每个文件柜中可能有非常多的分类用来存放不同的文件夹,这个文件柜就相当于数据库。
而当我们想要从文件柜中找到某份文件的时候,我们需要按照一定的规则去寻找,比如说“合同文件放在第三层第四排的架子上”,这种查找规则的实施就需要数据库管理系统(DBMS)来实现,相当于一名文件管理员,帮助我们管理数据库中的数据。
最常见的数据库管理系统包括SqlServer、MySql、Oracle等。
而我们如果想要对文件管理员下达指令,就需要一种沟通语言,这种沟通语言就是SQL,所以SQL就是一种结构化的查询语言,用来操作数据库管理系统。
他们之间的关系可以这样表示:
这样大家应该不会再把SQL当做数据库了吧?