99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀新人數(shù)據(jù)庫學習指南
新人數(shù)據(jù)庫學習指南
2017-02-15
收藏


我們進入第四周數(shù)據(jù)庫的內(nèi)容,在數(shù)據(jù)分析師的職業(yè)生涯中,數(shù)據(jù)庫與 SQL 會是他們性價比最高的技能之一。


數(shù)據(jù)庫是邏輯上的概念,它是一堆互相關(guān)聯(lián)的數(shù)據(jù),放在物理實體上,是一堆寫在磁盤上的文件,文件中有數(shù)據(jù)。這些最基礎(chǔ)的數(shù)據(jù)組成了表( table ),我們把它想象成一張 Excel 的 sheet 。

數(shù)據(jù)表的抽象概念如上圖。

ID 是數(shù)據(jù)庫中重要的概念,叫做唯一標識符/主鍵,用來表示數(shù)據(jù)的唯一性。我們把它理解成數(shù)據(jù)的身份證號。我知道身份證,也就知道數(shù)據(jù)在哪里了。

ID 不會有現(xiàn)實的業(yè)務(wù)意義,就是一串單純的數(shù)字,每張表只能有一個主鍵。

數(shù)據(jù)庫是表的集合,一個數(shù)據(jù)庫中可以放多張表,我們給每張表命名,表與表之間能互相聯(lián)系。

聯(lián)系就是數(shù)據(jù)能夠?qū)?yīng)匹配,正式名稱叫聯(lián)接,對應(yīng)的操作叫做 Join ,我們想象成 Excel 中的 vlookup 。


上面就是兩張表,用戶和教育背景,看上去能夠使用姓名進行匹配,可是這里出現(xiàn)了兩個張三,一個是北京大學,一個是上海大學,究竟哪個張三才能和用戶表的張三對應(yīng)上?都不能。

也許清華大學還有張三,復(fù)旦大學,交通大學也有,畢竟全中國姓名相同的人那么多。正確的用法應(yīng)該是使用 ID 聯(lián)接,而不是姓名。ID 是產(chǎn)品、運營和數(shù)據(jù)人員們在工作中接觸最多的內(nèi)容之一,用戶 ID 文章 ID 商品 ID 等,如果大家還不了解,這里需要掌握。


上圖就是正確的用法,用戶表和教育表能夠通過 ID 聯(lián)接,可能有人疑問,用戶 ID 為 1 和 6 的,還是不能對應(yīng)呀?這個不要緊,因為在數(shù)據(jù)庫中,不是所有的表都能一一對應(yīng),存在部分匹配的可能性,也許那個叫秦路的,他沒讀過書,教育背景表中自然沒有記錄了。

當然,數(shù)據(jù)庫的設(shè)計還要更嚴謹,一般每張表都會有主鍵(主鍵不是必須,但是從效率優(yōu)化上肯定會加),這個主鍵也不能是其他表的主鍵,防止產(chǎn)生沖突。


這樣就靠譜了,用戶 ID 是用戶表的主鍵,教育背景 ID 是教育背景表的主鍵,我們在教育背景表中加入一個字段叫用戶 ID,它是專門用來聯(lián)接用戶表的,它不是主鍵。

是不是有點繞?實際上,并不是所有名字帶 ID 的都叫主鍵,這一點要搞清楚。

數(shù)據(jù)庫中,表的名字和字段應(yīng)該是英文。如果是主鍵,只要叫 id 即可,你要關(guān)聯(lián)其他表,則以「表名_id」作為聯(lián)接。


關(guān)聯(lián)后的邏輯如下,這種方式叫全聯(lián)接,匹配不上的都用 Null 表示,匹配上的我用橙色表示。聯(lián)接是關(guān)系型數(shù)據(jù)庫中的核心概念,是操作的基礎(chǔ),現(xiàn)在迷糊不要緊,多練習幾次就好了。


如果現(xiàn)在我有一張新的表,需要關(guān)聯(lián) education,聰明的你也一定想到方法了吧。

了解上面的概念,你就知道什么叫關(guān)系型數(shù)據(jù)庫,簡單說,它是由多張能互相聯(lián)接的二維行列表格組成的數(shù)據(jù)庫。

關(guān)系型數(shù)據(jù)庫是基于關(guān)系代數(shù)模型發(fā)展而來。常用的數(shù)據(jù)庫有 SQL Server 、MySQL 、Oracle 等,我們后續(xù)學習都以 MySQL 為主。

接下來是安裝 MySQL 。

我們?nèi)?MySQL 的官網(wǎng)下載,版本 5.6 以上即可。

按照教程完成后,我們通過命令行查詢知否成功,Win 和 Mac 的操作不一樣。


我們當然不會在這么丑的界面上操作 MySQL 啦,我們還需要安裝 GUI,這是為我們提供操作界面的。

Mac 用戶推薦 SequealPro,Win 用戶推薦 WorkBench 。后續(xù)我會在 SequealPro 操作。MySQL 的默認用戶名和密碼均是 root,建議重新設(shè)置一下。

如果大家有疑問,可以去網(wǎng)上搜索相關(guān)教程,不安裝 MySQL 也是可以的。因為數(shù)據(jù)分析師大多數(shù)情況是用在線數(shù)據(jù)查詢平臺操作,安裝只是為了方便演示。不想要安裝的同學,可以在 SQLZoo 練習,以后我也會講解。

輸入賬號密碼后進入操作界面,數(shù)據(jù)庫我命名為 qin 。左側(cè)欄是數(shù)據(jù)庫中的 Table 列表,現(xiàn)在為空。右側(cè)是表相關(guān)的操作和信息。


因為現(xiàn)在沒有數(shù)據(jù),我們加載曾經(jīng)使用過的練習數(shù)據(jù)。數(shù)據(jù)分析師不需要學習如何創(chuàng)建刪除增改表的操作,因為用不到,我只會講解查詢,大家有興趣可以自行了解。

任何 MySQL 的 GUI 工具,都能加載 CSV,一般叫 import 。


Encoding 選擇 Autodetect,其余按默認。


接下來需要設(shè)置各字段的數(shù)據(jù)類型,系統(tǒng)會幫我們自動選上,這里不用改動。int 代表整數(shù)數(shù)值,varchar 代表字符串(中文英文標點符號這類),括號里面的數(shù)字是允許存儲字節(jié),這塊也不要深入理解,只要知道常用的字段類型即可。

給表取個名字,載入后,就將 CSV 成功導(dǎo)入到數(shù)據(jù)庫了,能夠進行數(shù)據(jù)查詢的操作。


這張表沒有設(shè)置主鍵,主要是練習,所以跳過了這一步驟。

大家可能會遇到導(dǎo)入的數(shù)據(jù)是亂碼,這是系統(tǒng)編碼之間的差異,是 utf8 和 gbk 之間的沖突,網(wǎng)上有相關(guān)解答,搜索關(guān)鍵詞即可。

到這里,大家已經(jīng)成功地在自己電腦上創(chuàng)建了數(shù)據(jù)庫。我們在之前文章已經(jīng)針對練習數(shù)據(jù)進行了 Excel 操作、BI 分析,接下來學習 SQL??赡苣銈円膊碌搅?,后續(xù)還會有統(tǒng)計學、Python 編程。

下一章,便是講解查詢語言SQL


作者  秦路
本文為原作者原創(chuàng)作品,轉(zhuǎn)載需授權(quán)



數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }