一文講透數據庫,以后別說你不懂數據庫
“數據分析需要懂數據庫的知識嗎?”
李老頭最近經常聽到這樣的問題,很多新人都覺得如果自己只做業務,不走技術線,是不是就可以不用學習數據庫了?是不是面試的時候就不需要準備了?
畢竟很多新人剛進公司,一看到數據庫里各種表的復雜鏈接方式,就開始犯起頭疼了,更有甚者連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就是用來存儲數據的數據庫,還有的以為sql是數據庫的一種。
為了方便大家理解,我給大家打個比方:
如果數據就是一張張的表格,我們就可以按照不同的表格關系放在不同的文件夾里,這個文件夾就相當于數據庫的基礎構成要素——數據表。
而當我們的文件夾也非常繁多復雜的時候,我們就可以將文件夾按照不同的構成分類儲存在文件柜中,每個文件柜中可能有非常多的分類用來存放不同的文件夾,這個文件柜就相當于數據庫。
而當我們想要從文件柜中找到某份文件的時候,我們需要按照一定的規則去尋找,比如說“合同文件放在第三層第四排的架子上”,這種查找規則的實施就需要數據庫管理系統(DBMS)來實現,相當于一名文件管理員,幫助我們管理數據庫中的數據。
最常見的數據庫管理系統包括SqlServer、MySql、Oracle等。
而我們如果想要對文件管理員下達指令,就需要一種溝通語言,這種溝通語言就是SQL,所以SQL就是一種結構化的查詢語言,用來操作數據庫管理系統。
他們之間的關系可以這樣表示:

這樣大家應該不會再把SQL當做數據庫了吧?