[E0-02]數(shù)據(jù)庫(kù)思維

[E0-02]數(shù)據(jù)庫(kù)思維

天依然藍(lán)著,沒(méi)心沒(méi)肺。
知了依然叫著,撕心裂肺。
馬路依然擁擠,繁華和你的孤單和諧相處。
打開(kāi)微博縱覽天下大事,打開(kāi)知乎和各路精英談笑風(fēng)聲,刷完微信的所有小紅點(diǎn)你收獲滿(mǎn)滿(mǎn)。合上手機(jī)你依然為今晚吃麻辣燙還是酸辣粉焦慮。
生活不好不壞,教程不早不晚不緊不慢持續(xù)更新著。
放下家國(guó)情懷人工智能貨幣政策房?jī)r(jià)漲跌,一起做點(diǎn)小事兒吧。比如收回狂亂思緒繼續(xù)學(xué)習(xí)EXCEL:)
好消息是,我們逐步開(kāi)始脫虛向?qū)?,硬的咯牙的fuck goods(干貨)說(shuō)來(lái)就來(lái)。吶,這篇就是。

1.定義問(wèn)題

We already walked too far, down to we had forgotten why embarked.
不要因?yàn)樽叩锰h(yuǎn),而忘記為什么出發(fā)。

任何思維方法論都是有場(chǎng)景的,牛頓的三大力學(xué)定律再牛,放到瘋狂的股市投機(jī)市場(chǎng)照樣會(huì)感嘆“我能看懂星球的運(yùn)轉(zhuǎn),卻看不懂人性的瘋狂”(大意)。之后托腮沉思皈依我佛,30歲之后就沒(méi)提出啥牛逼的科研成績(jī)了??梢?jiàn)思維場(chǎng)景有多重要。
同樣,數(shù)據(jù)庫(kù)思維的應(yīng)用場(chǎng)景先要從EXCEL的不同數(shù)據(jù)表類(lèi)型說(shuō)起。
如果你拿EXCEL是用來(lái)當(dāng)記事本寫(xiě)寫(xiě)字用的,好走不送,拜拜了您。
如果你準(zhǔn)備用EXCEL存儲(chǔ)數(shù)據(jù),那么,你要知道EXCEL數(shù)據(jù)表實(shí)際分兩種:

  • 報(bào)表型數(shù)據(jù)表。這種表格的典型特點(diǎn)是數(shù)據(jù)表本身已經(jīng)是最終輸出結(jié)果,數(shù)據(jù)是用來(lái)給人閱讀的,所以這種表格是可以完全沒(méi)有定式?jīng)]有定法的,各種配色,合并單元格,斜線標(biāo)題,看你心情隨便上,沒(méi)有任何問(wèn)題。針對(duì)報(bào)表型數(shù)據(jù)表的任何改動(dòng)唯一需要考慮的除了數(shù)據(jù)準(zhǔn)確性以外,就是閱讀者的體驗(yàn)。典型的報(bào)表型數(shù)據(jù)表如學(xué)生課程表(打印出來(lái)放在寫(xiě)字臺(tái)上用),公司財(cái)報(bào)(面向投資者提供信息),工資條(供員工核對(duì)工資信息)。
  • 數(shù)據(jù)源型數(shù)據(jù)表。這種表格的典型特點(diǎn)是數(shù)據(jù)本身不是最終結(jié)果,是用來(lái)供后續(xù)計(jì)算分析加工的,比如套用公式、生成數(shù)據(jù)透視表、排序篩選、圖形化繪制等等。因?yàn)橐?strong>高效準(zhǔn)確完成后續(xù)加工過(guò)程,所以我們就要對(duì)數(shù)據(jù)源提一些規(guī)范化要求。

這篇文章要聊的問(wèn)題核心是:針對(duì)數(shù)據(jù)源型數(shù)據(jù)表,我們都要那些規(guī)范化要求,以及這些要求背后的原因是什么?

2.何謂數(shù)據(jù)庫(kù)

先來(lái)看看官方定義(來(lái)自維基百科wikipedia.org):

數(shù)據(jù)庫(kù),簡(jiǎn)單來(lái)說(shuō)可視為電子化的文件柜——存儲(chǔ)電子文件的處所,用戶(hù)可以對(duì)文件中的數(shù)據(jù)運(yùn)行新增、截取、更新、刪除等操作。
數(shù)據(jù)庫(kù)指的是以一定方式儲(chǔ)存在一起、能為多個(gè)用戶(hù)共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。

學(xué)習(xí)數(shù)據(jù)庫(kù)需要掌握哪些知識(shí)點(diǎn)呢,看下圖(點(diǎn)擊圖片后可放大顯示):

好啦,快合上你張大的嘴巴,我是嚇你的。你只需要讀懂下面幾句話:

  • 典型的數(shù)據(jù)庫(kù)是關(guān)系型數(shù)據(jù)庫(kù),最簡(jiǎn)單的關(guān)系型數(shù)據(jù)庫(kù)可以理解為一張結(jié)構(gòu)化二維表格。
  • 什么是結(jié)構(gòu)化二維表格?有列(或者叫標(biāo)題,列標(biāo)題,是一個(gè)意思)有行(至少有一行數(shù)據(jù))就是二維表格。如果對(duì)每一列數(shù)據(jù)都進(jìn)行了完整定義,那就是結(jié)構(gòu)化二維表格。
    我知道你還是一臉懵逼,少啰嗦,看例子。
    先看一張貌似平淡的數(shù)據(jù)表:

這是一張常見(jiàn)的學(xué)生信息表,橫向有行,豎向有列,是二維表,沒(méi)有問(wèn)題。
問(wèn)題是如何結(jié)構(gòu)化?結(jié)構(gòu)化是如何體現(xiàn)的?
我們?cè)倏匆粡垐D:

看出點(diǎn)兒門(mén)道沒(méi)?這張字段定義表給剛才那張學(xué)生信息表加了限制,分別從列標(biāo)題(數(shù)據(jù)庫(kù)中通常稱(chēng)為字段,后文不做特別說(shuō)明的話,列標(biāo)題字段是一個(gè)意思)名稱(chēng)、類(lèi)型、長(zhǎng)度、是否為空做了詳細(xì)限定。比如:

  • 編號(hào)列,一串?dāng)?shù)字,最大的用處就是用來(lái)唯一確定一個(gè)學(xué)生的,一個(gè)學(xué)生只有一個(gè)編號(hào),一個(gè)編號(hào)只對(duì)應(yīng)一個(gè)學(xué)生。這種特定的字段在數(shù)據(jù)庫(kù)中通常命名為ID列,往往數(shù)字本身是沒(méi)有特別含義的,最大的用處就是一個(gè)值就能唯一確定一行數(shù)據(jù),這就是數(shù)據(jù)庫(kù)中主鍵(key)的含義,標(biāo)定特定的一行數(shù)據(jù)用。
  • 姓名、年齡、出生日期列。類(lèi)型基本都看得懂吧基本上和EXCEL單元格格式類(lèi)型一樣的,不過(guò)這里多了一個(gè)限制:不能為空,這樣就確保這些列的任意一行都是有數(shù)據(jù)的。想想看,EXCEL對(duì)數(shù)據(jù)的要求是很松散的,數(shù)據(jù)庫(kù)是很?chē)?yán)格的。
  • 顏值、是否畢業(yè)列。可以為空,從字面意思也可以大致理解含義。這種列往往對(duì)核心數(shù)據(jù)的影響一般,有了我就處理或顯示,沒(méi)有也行。

小結(jié)一下:針對(duì)二維數(shù)據(jù)表每一列都嚴(yán)格定義了約束條件的就是結(jié)構(gòu)化數(shù)據(jù)表,一個(gè)或多個(gè)結(jié)構(gòu)化數(shù)據(jù)表組成的文件就是數(shù)據(jù)庫(kù)。

3.數(shù)據(jù)庫(kù)實(shí)例

最簡(jiǎn)單的例子當(dāng)屬EXCEL的同門(mén)師兄ACCESS了,為了讓這部分的例子不太無(wú)聊,我們開(kāi)個(gè)腦洞,設(shè)想一個(gè)場(chǎng)景。克萊登大學(xué)著名學(xué)渣“慕容富貴”(不用懷疑,這么奇葩混搭的名字我是故意這樣取的)喜歡著名學(xué)霸“諸葛狗?!保ㄟ@名字也夠辛辣吧),慕容先生通過(guò)賄賂機(jī)房看門(mén)的王大爺搞到了學(xué)校管理的學(xué)生數(shù)據(jù)庫(kù)數(shù)據(jù),目前能夠看到的信息是兩張表,分別是學(xué)生信息表和選課信息表。數(shù)據(jù)庫(kù)和數(shù)據(jù)表的大致關(guān)系以及數(shù)據(jù)表字段定義如下圖所示(點(diǎn)擊圖片后可放大顯示):

我們看上圖,最右側(cè)的兩張截圖定義了字段約束和類(lèi)型信息,很容易看明白吧。注意一下學(xué)生信息表的學(xué)生編號(hào)旁邊有個(gè)小鑰匙圖表,這個(gè)意思就是這個(gè)字段是主鍵,能夠唯一標(biāo)識(shí)所在行數(shù)據(jù)的。下面的選課信息表為什么有兩個(gè)小鑰匙圖標(biāo)呢?因?yàn)橐粋€(gè)課程可以被多個(gè)學(xué)生選,一個(gè)學(xué)生也可以選多個(gè)課程,只有學(xué)生+課程組合在一起才能唯一標(biāo)識(shí)一行記錄。
我們?cè)賮?lái)看兩張表的實(shí)際內(nèi)容(點(diǎn)擊圖片后可放大顯示):

首先看學(xué)生信息表,狗剩姑娘(好奇怪)的顏值是美若天仙,富貴小伙子沒(méi)寫(xiě)顏值,沒(méi)寫(xiě)……我懂了,應(yīng)該不是最丑吧只能說(shuō)。
再看選課信息表,注意,選課信息表的學(xué)生信息部分沒(méi)有使用學(xué)生姓名而是編號(hào),想想為什么?第一,解決了重名信息錯(cuò)亂問(wèn)題。第二,在兩張表之間建立了準(zhǔn)確的相互引用關(guān)系。第一句話很好理解。第二句話,通過(guò)這種表格設(shè)計(jì),我們很容易拿到各種綜合查詢(xún)數(shù)據(jù)。比如,列出選了高數(shù)的美若天仙的學(xué)生清單,列出狗剩姑娘都選了哪些課程等,都是一句話(SQL語(yǔ)句)的事情。
等一下,我們?cè)倏纯吹诙埍?,第一行第二行,第三行第四行的學(xué)生編號(hào)分別都是重復(fù)的對(duì)不對(duì)?注意,盡管重復(fù),數(shù)據(jù)庫(kù)是沒(méi)有合并單元格概念的,重復(fù)就重復(fù),大量不合適的重復(fù)通過(guò)改善表結(jié)構(gòu)設(shè)計(jì)來(lái)規(guī)避,絕不允許合并單元格操作。
順便提一句,通過(guò)上表我們發(fā)現(xiàn),狗剩姑娘選了高數(shù)和建筑兩門(mén)課程,嗯,書(shū)香門(mén)第的清雅姑娘。富貴同學(xué)選了生理衛(wèi)生和養(yǎng)豬理論兩門(mén)課程,哎呀我去,一股屌絲氣息鋪面而來(lái),別追人家姑娘了,好好養(yǎng)你的豬去吧。

4.數(shù)據(jù)庫(kù)思維啟示錄

所謂數(shù)據(jù)庫(kù)思維,就是借鑒數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)表的設(shè)計(jì)要求,來(lái)改善和理解EXCEL中數(shù)據(jù)源型數(shù)據(jù)表的相關(guān)規(guī)范。
注意,數(shù)據(jù)庫(kù)思維是兩層意思。一層是理解,原來(lái)不太明白的結(jié)合數(shù)據(jù)庫(kù)很容易明白;一層是改善,結(jié)合數(shù)據(jù)庫(kù)要求更好的規(guī)范EXCEL數(shù)據(jù)表。
這部分我們先講整體層面的思考結(jié)論,下一節(jié)看實(shí)操。

表格上方不要出現(xiàn)表標(biāo)題

  • 第一,數(shù)據(jù)庫(kù)表設(shè)計(jì)從來(lái)沒(méi)有表標(biāo)題的概念,更加不可能在數(shù)據(jù)區(qū)域出現(xiàn)表標(biāo)題;
  • 第二,表標(biāo)題占用了列標(biāo)題行,會(huì)對(duì)后續(xù)分析造成很大的干擾;
  • 第三,表標(biāo)題信息可以體現(xiàn)在sheet名稱(chēng)中。

數(shù)據(jù)表設(shè)計(jì)要有唯一標(biāo)識(shí)列

或者叫缺少主鍵字段,或者叫缺少I(mǎi)D列,一個(gè)意思。
為什么會(huì)有這個(gè)建議,只是為了單純模仿數(shù)據(jù)庫(kù)?不是的,有實(shí)際意義。

  • 保證你對(duì)源數(shù)據(jù)可以隨時(shí)恢復(fù)的能力。不管你是排序篩選各種對(duì)行順序的折騰,最后只要按照ID列做一次排序就回來(lái)了。
  • 大幅度減少查詢(xún)難度。我們知道EXCEL對(duì)查詢(xún)的支持時(shí)比較弱的(和數(shù)據(jù)庫(kù)比查詢(xún)簡(jiǎn)直沒(méi)法比),通過(guò)添加ID列并且讓ID列放在最左邊應(yīng)用VLOOKUP取數(shù)據(jù)會(huì)簡(jiǎn)單很多。
  • 作為輔助列配合工具將復(fù)雜多列二維表轉(zhuǎn)化為簡(jiǎn)單列二維表,這種做法的細(xì)節(jié)后文會(huì)詳述。
  • 養(yǎng)成一個(gè)每行有唯一標(biāo)識(shí)字段的良好意識(shí)。相信我,很多困擾使用者的重名問(wèn)題,多條件查詢(xún)問(wèn)題,逆序查詢(xún)問(wèn)題,往往一個(gè)ID列就可以解決。

不要在原始數(shù)據(jù)表中增加任何匯總或合計(jì)行

  • 根據(jù)原因是,這樣做會(huì)破壞原來(lái)結(jié)構(gòu)化的數(shù)據(jù)分布,讓部分?jǐn)?shù)據(jù)不再是規(guī)整的了,想想看如果在學(xué)生信息表的最后一行加一個(gè)學(xué)生總數(shù)=110的匯總,那這個(gè)110到底是屬于哪個(gè)現(xiàn)有字段的?

不要合并單元格

同樣的,這會(huì)破壞表結(jié)構(gòu),正確的做法是,讓數(shù)據(jù)重復(fù)。保持?jǐn)?shù)據(jù)適當(dāng)重復(fù)時(shí)完全可以接受的,還記得前文提到的課程信息表嗎?一個(gè)學(xué)生可以選擇多個(gè)課程,所以學(xué)生編號(hào)重復(fù)是很正常的。
換個(gè)角度看,數(shù)據(jù)庫(kù)里根本就沒(méi)有合并單元格這個(gè)概念。
引申一下,斜線表頭是相同道理,都是被禁止的。

不要空行空列

很簡(jiǎn)單,空行空列也許在視覺(jué)上沒(méi)有問(wèn)題,但在計(jì)算上會(huì)有各種問(wèn)題。隨便舉個(gè)例子,空字段將直接導(dǎo)致數(shù)據(jù)透視表行標(biāo)簽出現(xiàn)空白標(biāo)簽。

工作表與工作簿規(guī)劃

一個(gè)工作表(SHEET頁(yè))用來(lái)描述一個(gè)對(duì)象,(比如學(xué)生信息,比如學(xué)生選課信息),一個(gè)工作簿(EXCEL文件)用來(lái)描述一類(lèi)數(shù)據(jù)(比如學(xué)生基礎(chǔ)信息)。適當(dāng)控制工作表之間的引用,絕對(duì)不要產(chǎn)生工作簿之間的引用。

字段內(nèi)容原子化

每個(gè)字段的內(nèi)容一定是不能再分了,比如數(shù)量如果內(nèi)容是“35個(gè)”這就不是原子化,一定還能分成兩列分別是數(shù)量和單位。
為什么有這個(gè)要求?一個(gè)原因是,數(shù)據(jù)庫(kù)包括EXCEL中,對(duì)分散數(shù)據(jù)的拼接比準(zhǔn)確拆分容易的多;另一個(gè)原因是,含有數(shù)量的非原子化內(nèi)容比如“35個(gè)”將使得數(shù)據(jù)失去可計(jì)算性;第三個(gè)原因,原子化意味著大家都是一個(gè)粒度的(反正都已經(jīng)拆到不能再拆了),而非原子化則可能有各種程度的粒度,這對(duì)數(shù)據(jù)之間的引用是非常不利的。

相同內(nèi)容統(tǒng)一表述

比如班級(jí)名稱(chēng),在所有地方同一個(gè)班級(jí)都應(yīng)該是相同的表述,“天物強(qiáng)化班”和“天體物理學(xué)班”不應(yīng)該同時(shí)出現(xiàn),軟件會(huì)認(rèn)為是兩個(gè)班級(jí)。EXCEL中應(yīng)該使用數(shù)據(jù)驗(yàn)證下拉框規(guī)范此類(lèi)問(wèn)題。

特殊格式字段格式要滿(mǎn)足格式要求

比如日期時(shí)間字段,不能既有中文又有英文,既有-又有\(zhòng),這都不規(guī)范。

每列數(shù)據(jù)類(lèi)型保持一致

想想看,數(shù)據(jù)表設(shè)計(jì)的時(shí)候,每列數(shù)據(jù)是不是天然一致的,比如出生日期列類(lèi)型是日期,那該列數(shù)據(jù)要么是一個(gè)具體日期要么空著,絕不允許出現(xiàn)“不記得啦”,“丑年寅時(shí)”這種內(nèi)容。

禁止空格換行等非可見(jiàn)字符破壞數(shù)據(jù)本身

很簡(jiǎn)單,不管是在EXCEL眼里,還是在任何一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)眼里,“西門(mén)”和“西 門(mén)”(中間加了空格)都是不同的數(shù)據(jù),這些不可見(jiàn)字符會(huì)是定時(shí)炸彈,表現(xiàn)出各種莫名其妙的問(wèn)題。比如你檢索“西門(mén)”就無(wú)法檢索帶空格的那條記錄。
有的同學(xué)喜歡ALT+ENTER強(qiáng)制換行或者使用空格將人名對(duì)齊,這都是不可取的。

不要批注

這一條估計(jì)不少人不太理解。我的看法是,批注內(nèi)容在數(shù)據(jù)內(nèi)容上是不可見(jiàn)的,輸入的信息有沒(méi)有關(guān)鍵信息也是不知道的,如果確實(shí)需要批準(zhǔn)寧可建一列數(shù)據(jù)列叫做批注或者備注。

5.數(shù)據(jù)庫(kù)思維實(shí)操

好,口說(shuō)無(wú)憑,上文提到的那些“要與不要”你真的掌握了嗎?我做了一個(gè)表作為反面典型,見(jiàn)下圖。先不看我后面的說(shuō)明,你自己來(lái)想一想這張表都有哪些不合規(guī)范的地方。

以下是思考時(shí)間






思考結(jié)束

我們先來(lái)梳理以下這張表整體存在的問(wèn)題(下文問(wèn)題列表需要和上圖數(shù)字部分是一致的):

  • 1.表格上方不要有表標(biāo)題
  • 2.字段對(duì)齊不要用空格
  • 3.年齡列沒(méi)有原子化
  • 4.日期列輸入數(shù)據(jù)不統(tǒng)一不規(guī)范
  • 5.字段內(nèi)容不符合列字段定義且使用了強(qiáng)制換行
  • 6.期末成績(jī)列字段內(nèi)容混亂不統(tǒng)一
  • 7.不要合并單元格
  • 8.不要出現(xiàn)空行
  • 9.不要斜線表頭
  • 10.不要批注信息
  • 11.“生物化學(xué)班”和第一行的“生化班”實(shí)質(zhì)內(nèi)容相同,表述不一致。
    你找全了猜對(duì)了嗎?

6.樸實(shí)的就是最好的

回到問(wèn)題本身,到底什么數(shù)據(jù)是EXCEL喜歡的?
我的答案是,結(jié)構(gòu)化的,類(lèi)別統(tǒng)一的,最接近數(shù)據(jù)庫(kù)表樣式的就是最好的。

  • 第一行是標(biāo)題行。風(fēng)雨無(wú)阻,第一行一定是標(biāo)題行。
  • 第一列是ID列。盡管不是強(qiáng)制要求,但我強(qiáng)烈建議你這么做。
  • 每列數(shù)據(jù)不可拆分,已經(jīng)原子化。每列數(shù)據(jù)類(lèi)型相同,格式規(guī)范。
  • 拒絕合并單元格,拒絕斜線表頭,拒絕空行空列。
  • 沒(méi)有空行空列。

看看下圖(標(biāo)題部分不是數(shù)據(jù)表區(qū)域,別誤會(huì)),簡(jiǎn)簡(jiǎn)單單的數(shù)據(jù)庫(kù)表,就是最好的EXCEL數(shù)據(jù)源表了。

今日兒童節(jié),愿你不失好奇,永遠(yuǎn)少年。
有任何反饋,隨時(shí)歡迎反饋。
感謝閱讀,如能轉(zhuǎn)發(fā),感謝加倍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容