[E0-02]數(shù)據(jù)庫思維
天依然藍(lán)著颈将,沒心沒肺梢夯。
知了依然叫著,撕心裂肺晴圾。
馬路依然擁擠颂砸,繁華和你的孤單和諧相處。
打開微博縱覽天下大事死姚,打開知乎和各路精英談笑風(fēng)聲人乓,刷完微信的所有小紅點(diǎn)你收獲滿滿。合上手機(jī)你依然為今晚吃麻辣燙還是酸辣粉焦慮都毒。
生活不好不壞色罚,教程不早不晚不緊不慢持續(xù)更新著。
放下家國情懷人工智能貨幣政策房價(jià)漲跌账劲,一起做點(diǎn)小事兒吧戳护。比如收回狂亂思緒繼續(xù)學(xué)習(xí)EXCEL:)
好消息是,我們逐步開始脫虛向?qū)嵠俳梗驳目┭赖膄uck goods(干貨)說來就來腌且。吶,這篇就是榛瓮。
1.定義問題
We already walked too far, down to we had forgotten why embarked.
不要因?yàn)樽叩锰h(yuǎn)铺董,而忘記為什么出發(fā)。
任何思維方法論都是有場景的禀晓,牛頓的三大力學(xué)定律再牛柄粹,放到瘋狂的股市投機(jī)市場照樣會(huì)感嘆“我能看懂星球的運(yùn)轉(zhuǎn),卻看不懂人性的瘋狂”(大意)匆绣。之后托腮沉思皈依我佛驻右,30歲之后就沒提出啥牛逼的科研成績了∑榇荆可見思維場景有多重要堪夭。
同樣,數(shù)據(jù)庫思維的應(yīng)用場景先要從EXCEL的不同數(shù)據(jù)表類型說起拣凹。
如果你拿EXCEL是用來當(dāng)記事本寫寫字用的森爽,好走不送,拜拜了您嚣镜。
如果你準(zhǔn)備用EXCEL存儲(chǔ)數(shù)據(jù)爬迟,那么,你要知道EXCEL數(shù)據(jù)表實(shí)際分兩種:
- 報(bào)表型數(shù)據(jù)表菊匿。這種表格的典型特點(diǎn)是數(shù)據(jù)表本身已經(jīng)是最終輸出結(jié)果付呕,數(shù)據(jù)是用來給人閱讀的计福,所以這種表格是可以完全沒有定式?jīng)]有定法的,各種配色徽职,合并單元格象颖,斜線標(biāo)題,看你心情隨便上姆钉,沒有任何問題说订。針對(duì)報(bào)表型數(shù)據(jù)表的任何改動(dòng)唯一需要考慮的除了數(shù)據(jù)準(zhǔn)確性以外,就是閱讀者的體驗(yàn)潮瓶。典型的報(bào)表型數(shù)據(jù)表如學(xué)生課程表(打印出來放在寫字臺(tái)上用)陶冷,公司財(cái)報(bào)(面向投資者提供信息),工資條(供員工核對(duì)工資信息)毯辅。
- 數(shù)據(jù)源型數(shù)據(jù)表埂伦。這種表格的典型特點(diǎn)是數(shù)據(jù)本身不是最終結(jié)果,是用來供后續(xù)計(jì)算分析加工的悉罕,比如套用公式赤屋、生成數(shù)據(jù)透視表立镶、排序篩選壁袄、圖形化繪制等等。因?yàn)橐?strong>高效準(zhǔn)確完成后續(xù)加工過程媚媒,所以我們就要對(duì)數(shù)據(jù)源提一些規(guī)范化要求嗜逻。
這篇文章要聊的問題核心是:針對(duì)數(shù)據(jù)源型數(shù)據(jù)表,我們都要那些規(guī)范化要求缭召,以及這些要求背后的原因是什么栈顷?
2.何謂數(shù)據(jù)庫
先來看看官方定義(來自維基百科wikipedia.org):
數(shù)據(jù)庫,簡單來說可視為電子化的文件柜——存儲(chǔ)電子文件的處所嵌巷,用戶可以對(duì)文件中的數(shù)據(jù)運(yùn)行新增萄凤、截取、更新搪哪、刪除等操作靡努。
數(shù)據(jù)庫指的是以一定方式儲(chǔ)存在一起、能為多個(gè)用戶共享晓折、具有盡可能小的冗余度惑朦、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。
學(xué)習(xí)數(shù)據(jù)庫需要掌握哪些知識(shí)點(diǎn)呢漓概,看下圖(點(diǎn)擊圖片后可放大顯示):
好啦漾月,快合上你張大的嘴巴,我是嚇你的胃珍。你只需要讀懂下面幾句話:
- 典型的數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫梁肿,最簡單的關(guān)系型數(shù)據(jù)庫可以理解為一張結(jié)構(gòu)化二維表格蜓陌。
- 什么是結(jié)構(gòu)化二維表格?有列(或者叫標(biāo)題栈雳,列標(biāo)題护奈,是一個(gè)意思)有行(至少有一行數(shù)據(jù))就是二維表格。如果對(duì)每一列數(shù)據(jù)都進(jìn)行了完整定義哥纫,那就是結(jié)構(gòu)化二維表格霉旗。
我知道你還是一臉懵逼,少啰嗦蛀骇,看例子厌秒。
先看一張貌似平淡的數(shù)據(jù)表:
這是一張常見的學(xué)生信息表,橫向有行擅憔,豎向有列鸵闪,是二維表,沒有問題暑诸。
問題是如何結(jié)構(gòu)化蚌讼?結(jié)構(gòu)化是如何體現(xiàn)的?
我們?cè)倏匆粡垐D:
看出點(diǎn)兒門道沒个榕?這張字段定義表給剛才那張學(xué)生信息表加了限制篡石,分別從列標(biāo)題(數(shù)據(jù)庫中通常稱為字段,后文不做特別說明的話西采,列標(biāo)題字段是一個(gè)意思)名稱凰萨、類型、長度械馆、是否為空做了詳細(xì)限定胖眷。比如:
- 編號(hào)列,一串?dāng)?shù)字霹崎,最大的用處就是用來唯一確定一個(gè)學(xué)生的珊搀,一個(gè)學(xué)生只有一個(gè)編號(hào),一個(gè)編號(hào)只對(duì)應(yīng)一個(gè)學(xué)生尾菇。這種特定的字段在數(shù)據(jù)庫中通常命名為ID列境析,往往數(shù)字本身是沒有特別含義的,最大的用處就是一個(gè)值就能唯一確定一行數(shù)據(jù)错沽,這就是數(shù)據(jù)庫中主鍵(key)的含義簿晓,標(biāo)定特定的一行數(shù)據(jù)用。
- 姓名千埃、年齡憔儿、出生日期列。類型基本都看得懂吧基本上和EXCEL單元格格式類型一樣的放可,不過這里多了一個(gè)限制:不能為空谒臼,這樣就確保這些列的任意一行都是有數(shù)據(jù)的朝刊。想想看,EXCEL對(duì)數(shù)據(jù)的要求是很松散的蜈缤,數(shù)據(jù)庫是很嚴(yán)格的拾氓。
- 顏值、是否畢業(yè)列底哥×埃可以為空,從字面意思也可以大致理解含義趾徽。這種列往往對(duì)核心數(shù)據(jù)的影響一般续滋,有了我就處理或顯示,沒有也行孵奶。
小結(jié)一下:針對(duì)二維數(shù)據(jù)表每一列都嚴(yán)格定義了約束條件的就是結(jié)構(gòu)化數(shù)據(jù)表疲酌,一個(gè)或多個(gè)結(jié)構(gòu)化數(shù)據(jù)表組成的文件就是數(shù)據(jù)庫。
3.數(shù)據(jù)庫實(shí)例
最簡單的例子當(dāng)屬EXCEL的同門師兄ACCESS了了袁,為了讓這部分的例子不太無聊朗恳,我們開個(gè)腦洞,設(shè)想一個(gè)場景载绿≈嘟耄克萊登大學(xué)著名學(xué)渣“慕容富貴”(不用懷疑,這么奇葩混搭的名字我是故意這樣取的)喜歡著名學(xué)霸“諸葛狗事校”(這名字也夠辛辣吧)臀脏,慕容先生通過賄賂機(jī)房看門的王大爺搞到了學(xué)校管理的學(xué)生數(shù)據(jù)庫數(shù)據(jù)劝堪,目前能夠看到的信息是兩張表冀自,分別是學(xué)生信息表和選課信息表。數(shù)據(jù)庫和數(shù)據(jù)表的大致關(guān)系以及數(shù)據(jù)表字段定義如下圖所示(點(diǎn)擊圖片后可放大顯示):
我們看上圖秒啦,最右側(cè)的兩張截圖定義了字段約束和類型信息熬粗,很容易看明白吧。注意一下學(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è)賮砜磧蓮埍淼膶?shí)際內(nèi)容(點(diǎn)擊圖片后可放大顯示):
首先看學(xué)生信息表佣盒,狗剩姑娘(好奇怪)的顏值是美若天仙,富貴小伙子沒寫顏值顽聂,沒寫……我懂了肥惭,應(yīng)該不是最丑吧只能說盯仪。
再看選課信息表,注意蜜葱,選課信息表的學(xué)生信息部分沒有使用學(xué)生姓名而是編號(hào)全景,想想為什么?第一牵囤,解決了重名信息錯(cuò)亂問題爸黄。第二,在兩張表之間建立了準(zhǔn)確的相互引用關(guān)系揭鳞。第一句話很好理解馆纳。第二句話,通過這種表格設(shè)計(jì)汹桦,我們很容易拿到各種綜合查詢數(shù)據(jù)鲁驶。比如,列出選了高數(shù)的美若天仙的學(xué)生清單舞骆,列出狗剩姑娘都選了哪些課程等钥弯,都是一句話(SQL語句)的事情。
等一下督禽,我們?cè)倏纯吹诙埍泶圉谝恍械诙校谌械谒男械膶W(xué)生編號(hào)分別都是重復(fù)的對(duì)不對(duì)狈惫?注意睛蛛,盡管重復(fù),數(shù)據(jù)庫是沒有合并單元格概念的胧谈,重復(fù)就重復(fù)忆肾,大量不合適的重復(fù)通過改善表結(jié)構(gòu)設(shè)計(jì)來規(guī)避,絕不允許合并單元格操作菱肖。
順便提一句客冈,通過上表我們發(fā)現(xiàn),狗剩姑娘選了高數(shù)和建筑兩門課程稳强,嗯场仲,書香門第的清雅姑娘。富貴同學(xué)選了生理衛(wèi)生和養(yǎng)豬理論兩門課程退疫,哎呀我去渠缕,一股屌絲氣息鋪面而來,別追人家姑娘了褒繁,好好養(yǎng)你的豬去吧亦鳞。
4.數(shù)據(jù)庫思維啟示錄
所謂數(shù)據(jù)庫思維,就是借鑒數(shù)據(jù)庫對(duì)數(shù)據(jù)表的設(shè)計(jì)要求,來改善和理解EXCEL中數(shù)據(jù)源型數(shù)據(jù)表的相關(guān)規(guī)范蚜迅。
注意舵匾,數(shù)據(jù)庫思維是兩層意思。一層是理解谁不,原來不太明白的結(jié)合數(shù)據(jù)庫很容易明白坐梯;一層是改善,結(jié)合數(shù)據(jù)庫要求更好的規(guī)范EXCEL數(shù)據(jù)表刹帕。
這部分我們先講整體層面的思考結(jié)論吵血,下一節(jié)看實(shí)操。
表格上方不要出現(xiàn)表標(biāo)題
- 第一偷溺,數(shù)據(jù)庫表設(shè)計(jì)從來沒有表標(biāo)題的概念蹋辅,更加不可能在數(shù)據(jù)區(qū)域出現(xiàn)表標(biāo)題;
- 第二挫掏,表標(biāo)題占用了列標(biāo)題行侦另,會(huì)對(duì)后續(xù)分析造成很大的干擾;
- 第三尉共,表標(biāo)題信息可以體現(xiàn)在sheet名稱中褒傅。
數(shù)據(jù)表設(shè)計(jì)要有唯一標(biāo)識(shí)列
或者叫缺少主鍵字段,或者叫缺少ID列袄友,一個(gè)意思殿托。
為什么會(huì)有這個(gè)建議,只是為了單純模仿數(shù)據(jù)庫剧蚣?不是的支竹,有實(shí)際意義。
- 保證你對(duì)源數(shù)據(jù)可以隨時(shí)恢復(fù)的能力鸠按。不管你是排序篩選各種對(duì)行順序的折騰礼搁,最后只要按照ID列做一次排序就回來了。
- 大幅度減少查詢難度待诅。我們知道EXCEL對(duì)查詢的支持時(shí)比較弱的(和數(shù)據(jù)庫比查詢簡直沒法比)叹坦,通過添加ID列并且讓ID列放在最左邊應(yīng)用VLOOKUP取數(shù)據(jù)會(huì)簡單很多熊镣。
- 作為輔助列配合工具將復(fù)雜多列二維表轉(zhuǎn)化為簡單列二維表卑雁,這種做法的細(xì)節(jié)后文會(huì)詳述。
- 養(yǎng)成一個(gè)每行有唯一標(biāo)識(shí)字段的良好意識(shí)绪囱。相信我测蹲,很多困擾使用者的重名問題,多條件查詢問題鬼吵,逆序查詢問題扣甲,往往一個(gè)ID列就可以解決。
不要在原始數(shù)據(jù)表中增加任何匯總或合計(jì)行
- 根據(jù)原因是,這樣做會(huì)破壞原來結(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ù)庫里根本就沒有合并單元格這個(gè)概念蘑志。
引申一下,斜線表頭是相同道理贬派,都是被禁止的卖漫。
不要空行空列
很簡單,空行空列也許在視覺上沒有問題赠群,但在計(jì)算上會(huì)有各種問題羊始。隨便舉個(gè)例子,空字段將直接導(dǎo)致數(shù)據(jù)透視表行標(biāo)簽出現(xiàn)空白標(biāo)簽查描。
工作表與工作簿規(guī)劃
一個(gè)工作表(SHEET頁)用來描述一個(gè)對(duì)象突委,(比如學(xué)生信息,比如學(xué)生選課信息)冬三,一個(gè)工作簿(EXCEL文件)用來描述一類數(shù)據(jù)(比如學(xué)生基礎(chǔ)信息)匀油。適當(dāng)控制工作表之間的引用,絕對(duì)不要產(chǎn)生工作簿之間的引用勾笆。
字段內(nèi)容原子化
每個(gè)字段的內(nèi)容一定是不能再分了敌蚜,比如數(shù)量如果內(nèi)容是“35個(gè)”這就不是原子化,一定還能分成兩列分別是數(shù)量和單位窝爪。
為什么有這個(gè)要求弛车?一個(gè)原因是,數(shù)據(jù)庫包括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í)名稱拷恨,在所有地方同一個(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ī)范此類問題。
特殊格式字段格式要滿足格式要求
比如日期時(shí)間字段勒叠,不能既有中文又有英文兜挨,既有-又有\(zhòng),這都不規(guī)范眯分。
每列數(shù)據(jù)類型保持一致
想想看拌汇,數(shù)據(jù)表設(shè)計(jì)的時(shí)候,每列數(shù)據(jù)是不是天然一致的弊决,比如出生日期列類型是日期噪舀,那該列數(shù)據(jù)要么是一個(gè)具體日期要么空著,絕不允許出現(xiàn)“不記得啦”飘诗,“丑年寅時(shí)”這種內(nèi)容与倡。
禁止空格換行等非可見字符破壞數(shù)據(jù)本身
很簡單,不管是在EXCEL眼里昆稿,還是在任何一個(gè)數(shù)據(jù)庫系統(tǒng)眼里纺座,“西門”和“西 門”(中間加了空格)都是不同的數(shù)據(jù),這些不可見字符會(huì)是定時(shí)炸彈溉潭,表現(xiàn)出各種莫名其妙的問題净响。比如你檢索“西門”就無法檢索帶空格的那條記錄。
有的同學(xué)喜歡ALT+ENTER強(qiáng)制換行或者使用空格將人名對(duì)齊喳瓣,這都是不可取的馋贤。
不要批注
這一條估計(jì)不少人不太理解。我的看法是畏陕,批注內(nèi)容在數(shù)據(jù)內(nèi)容上是不可見的配乓,輸入的信息有沒有關(guān)鍵信息也是不知道的,如果確實(shí)需要批準(zhǔn)寧可建一列數(shù)據(jù)列叫做批注或者備注惠毁。
5.數(shù)據(jù)庫思維實(shí)操
好犹芹,口說無憑,上文提到的那些“要與不要”你真的掌握了嗎仁讨?我做了一個(gè)表作為反面典型羽莺,見下圖。先不看我后面的說明洞豁,你自己來想一想這張表都有哪些不合規(guī)范的地方。
以下是思考時(shí)間
思考結(jié)束
我們先來梳理以下這張表整體存在的問題(下文問題列表需要和上圖數(shù)字部分是一致的):
- 1.表格上方不要有表標(biāo)題
- 2.字段對(duì)齊不要用空格
- 3.年齡列沒有原子化
- 4.日期列輸入數(shù)據(jù)不統(tǒng)一不規(guī)范
- 5.字段內(nèi)容不符合列字段定義且使用了強(qiáng)制換行
- 6.期末成績列字段內(nèi)容混亂不統(tǒng)一
- 7.不要合并單元格
- 8.不要出現(xiàn)空行
- 9.不要斜線表頭
- 10.不要批注信息
- 11.“生物化學(xué)班”和第一行的“生化班”實(shí)質(zhì)內(nèi)容相同,表述不一致丈挟。
你找全了猜對(duì)了嗎刁卜?
6.樸實(shí)的就是最好的
回到問題本身,到底什么數(shù)據(jù)是EXCEL喜歡的曙咽?
我的答案是蛔趴,結(jié)構(gòu)化的,類別統(tǒng)一的例朱,最接近數(shù)據(jù)庫表樣式的就是最好的孝情。
- 第一行是標(biāo)題行。風(fēng)雨無阻洒嗤,第一行一定是標(biāo)題行箫荡。
- 第一列是ID列。盡管不是強(qiáng)制要求渔隶,但我強(qiáng)烈建議你這么做羔挡。
- 每列數(shù)據(jù)不可拆分,已經(jīng)原子化间唉。每列數(shù)據(jù)類型相同绞灼,格式規(guī)范。
- 拒絕合并單元格呈野,拒絕斜線表頭低矮,拒絕空行空列。
- 沒有空行空列被冒。
看看下圖(標(biāo)題部分不是數(shù)據(jù)表區(qū)域商佛,別誤會(huì)),簡簡單單的數(shù)據(jù)庫表姆打,就是最好的EXCEL數(shù)據(jù)源表了良姆。
今日兒童節(jié),愿你不失好奇幔戏,永遠(yuǎn)少年玛追。
有任何反饋,隨時(shí)歡迎反饋闲延。
感謝閱讀痊剖,如能轉(zhuǎn)發(fā),感謝加倍垒玲。