在日常工作中,當(dāng)我們遇到海量數(shù)據(jù)時(shí),如何從中挑選出自己想要的數(shù)據(jù)呢?是盲目的查找,還是尋求新的解決方案亦或是通過(guò)技巧來(lái)獲???開(kāi)發(fā)者在設(shè)計(jì)一個(gè)數(shù)據(jù)表單時(shí),往往會(huì)遵循 三條常用形式 ,他們認(rèn)為常規(guī)模式是設(shè)計(jì)的唯一途徑。然而由于開(kāi)發(fā)者一開(kāi)始就抱有
在日常工作中,當(dāng)我們遇到海量數(shù)據(jù)時(shí),如何從中挑選出自己想要的數(shù)據(jù)呢?是盲目的查找,還是尋求新的解決方案亦或是通過(guò)技巧來(lái)獲?。块_(kāi)發(fā)者在設(shè)計(jì)一個(gè)數(shù)據(jù)表單時(shí),往往會(huì)遵循三條常用形式,他們認(rèn)為常規(guī)模式是設(shè)計(jì)的唯一途徑。然而由于開(kāi)發(fā)者一開(kāi)始就抱有這種心態(tài),使數(shù)據(jù)表單設(shè)計(jì)變得墨守成規(guī),阻礙了它的創(chuàng)新。
作者Shivprasad 從平時(shí)的工作項(xiàng)目中積累了一些經(jīng)驗(yàn),向我們介紹了11款制作數(shù)據(jù)表單技巧,當(dāng)設(shè)計(jì)到數(shù)據(jù)表單制作時(shí),不妨以此來(lái)參考,以豐富我們的應(yīng)用經(jīng)驗(yàn)。
Rule 1:弄清(OLTP或OLAP)應(yīng)用的本質(zhì)是什么?
當(dāng)開(kāi)始制作數(shù)據(jù)表單設(shè)計(jì)時(shí),首先,要分析你設(shè)計(jì)的這個(gè)程序的本質(zhì)是什么?是事務(wù)性還是分析性的?你會(huì)發(fā)現(xiàn)許多開(kāi)發(fā)者會(huì)默認(rèn)應(yīng)用常規(guī)化規(guī)則,隨后才考慮性能問(wèn)題而不考慮應(yīng)用的本質(zhì)。
關(guān)于事務(wù)性和分析性,一起來(lái)看下兩者區(qū)別。
Transactional:這種應(yīng)用,用戶對(duì)CRUD較為感興趣,即創(chuàng)建、讀取、更新和刪除記錄。這種數(shù)據(jù),官方名稱(chēng)之位OLTP。
Analytical:用戶對(duì)分析、報(bào)告、預(yù)測(cè)等方面感興趣。這類(lèi)數(shù)據(jù)庫(kù)很少有嵌入和更新。主要目的是為了盡快獲取和分析數(shù)據(jù)。官方名稱(chēng)之為OLAP。
換句話說(shuō),如果你想以嵌入、更新、刪除為重點(diǎn),可選擇常規(guī)化的表單設(shè)計(jì)或者創(chuàng)建一個(gè)簡(jiǎn)單的非常規(guī)化的數(shù)據(jù)架構(gòu)。
下面是一個(gè)簡(jiǎn)單的圖表,左側(cè)顯示名稱(chēng)和地址,采用非規(guī)范化結(jié)構(gòu)設(shè)計(jì)出的一款簡(jiǎn)單的常規(guī)表單。
Rule 2:將數(shù)據(jù)按照邏輯思維分成不同的塊,讓生活更簡(jiǎn)單
這個(gè)規(guī)則其實(shí)就是 “三范式” 中的第一范式。這樣設(shè)計(jì)的目標(biāo),是為了當(dāng)你需要查詢(xún)套多的字符串解析功能時(shí),如子串,charindexetc,它能為你提供這項(xiàng)功能。
例如,注意觀看下面的圖表,如果你想查詢(xún)某個(gè)學(xué)生的姓名,通過(guò)“Koirala”和“Harisingh”來(lái)進(jìn)行區(qū)分。
因此,更好的方法就是打破數(shù)據(jù)邏輯思維,以便我們編寫(xiě)更加簡(jiǎn)潔、容易查詢(xún)的表單。
Rule 3:當(dāng)數(shù)據(jù)太多時(shí),rule 2不可用
開(kāi)發(fā)者們的思維有時(shí)很單一,如果你告訴他們某種方式,他們會(huì)一直這么做下去,要知道過(guò)度的使用會(huì)造成不必要的麻煩。正如我們之前談到的rule 2,首先要進(jìn)行分解,明確自己的需求。例如,當(dāng)你看到電話號(hào)碼字段時(shí),你可以在ISD代碼上進(jìn)行操作區(qū)分這些電話號(hào)碼(直到滿足你的需求)。盡管這是不錯(cuò)的方法,但會(huì)給你帶來(lái)更多的并發(fā)癥。
Rule 4:將重復(fù)、不統(tǒng)一的數(shù)據(jù)視作你最大的敵人
聚焦和重構(gòu)復(fù)制數(shù)據(jù)。我比較擔(dān)心的不是復(fù)制數(shù)據(jù)所需要的磁盤(pán)空間而是它因此而造成的混亂。
從下面的圖表中,“5th Standard”和“Fifth standard”意思是相同的,你可以說(shuō)是因?yàn)閿?shù)據(jù)或者驗(yàn)證數(shù)據(jù)錄入到你的系統(tǒng)原因,如果你想通過(guò)報(bào)表來(lái)顯示他們的不同之處,從用戶的角度開(kāi)看,這是非常困難的。
其中一個(gè)解決方法就是將不同的任務(wù)欄把相同的數(shù)據(jù)通過(guò)新建一個(gè)鍵入值聯(lián)接在一起。如圖。我們通過(guò)創(chuàng)建一個(gè)新的條目“Standards”即可將數(shù)據(jù)重新排,顯示相同的部分。
Rule 5:注意被分隔符分割的數(shù)據(jù)
前面的規(guī)則2即“第一范式”提到避免數(shù)組重復(fù),如圖所示。如果你看到教學(xué)大綱緊密排列在一起,這個(gè)領(lǐng)域中需要很多數(shù)據(jù)來(lái)填充,這種我們稱(chēng)之為“重復(fù)數(shù)組”。如果我們必須操縱這些數(shù)據(jù),單憑查詢(xún)是很困難的,我甚至還懷疑是否具備這個(gè)查詢(xún)功能。
這些帶分隔符的數(shù)據(jù)需要特別注意,如何利用更好的方法將這些數(shù)據(jù)移動(dòng)到一個(gè)不同的任務(wù)欄中,以便更好的分類(lèi)呢?如圖:
如圖所示,可以看到我創(chuàng)建了一個(gè)獨(dú)立的教學(xué)科目條目,然后列出了與之有相關(guān)聯(lián)的科目。這種方法主要適用于在教學(xué)大綱領(lǐng)域,避免過(guò)多的重復(fù)和數(shù)據(jù)分隔符中。
Rule 6:當(dāng)心數(shù)據(jù)依賴(lài)
觀察該領(lǐng)域中的部分列表。如圖,我們創(chuàng)建了roll number和standard,可以看到教學(xué)科目緊密聯(lián)系在一起,但與學(xué)生學(xué)習(xí)的科目沒(méi)有直接關(guān)聯(lián)。如果我們想給每位學(xué)生更新教學(xué)科目,這似乎看起來(lái)是不符合邏輯的,但是通過(guò)鍵入standard條目轉(zhuǎn)換這些數(shù)據(jù)就可達(dá)到目的。
這個(gè)規(guī)則告訴我們“所有的鍵入都應(yīng)該依賴(lài)主鍵”。All keys should depend on the full primary key and not partially。
Rule 7:選擇派生列
如果你想進(jìn)行OLTP應(yīng)用首先得篩選出派生列,在OLAP中我們需要做一些求和,方可獲得uixie很好的性能。如圖,求的平均數(shù)需要利用marks和subject兩列。
這個(gè)規(guī)則被稱(chēng)為第三范式,“不應(yīng)該有依賴(lài)于非主鍵的列”(No columns should depend on other non-primary key columns)我個(gè)人認(rèn)為是不能盲目使用此規(guī)則。如果該數(shù)據(jù)是計(jì)算過(guò)的數(shù)據(jù),看清狀況然后在決定實(shí)施第三范式。
Rule 8:如果性能很關(guān)鍵,不要避開(kāi)冗余數(shù)據(jù)
如果你迫切的考慮到性能規(guī)范化問(wèn)題,通常情況下需要連接許多列表以及減少增加非規(guī)范化的列表以便來(lái)提高數(shù)據(jù)圖表性能。
Rule 9:數(shù)據(jù)多、繁雜
OLAP項(xiàng)目主要是為了處理數(shù)據(jù)繁多,例如,如圖所示,假如你想獲得每個(gè)國(guó)家、每個(gè)用戶、每年的銷(xiāo)售額度。對(duì)于這種情況,你可以創(chuàng)建一個(gè)實(shí)際銷(xiāo)售列表?xiàng)l目(sales fact table)。
Rule 10:設(shè)計(jì)name value table列表
明值表意味著它有一些鍵,這些鍵被其他數(shù)據(jù)關(guān)聯(lián)著。如圖所示,我們需要弄清楚currency table (貨幣列)和country table(國(guó)家列),圖中鍵入值(數(shù)字部分)顯示的就是我們所需要的數(shù)據(jù)。
通過(guò)創(chuàng)建鍵入值(Type)來(lái)顯示出不同區(qū)域的數(shù)據(jù)。
Rule 11:無(wú)限制結(jié)構(gòu)數(shù)據(jù),自定義PK和FK
我們會(huì)經(jīng)常碰到一些無(wú)限父子分級(jí)結(jié)構(gòu)的數(shù)據(jù)。例如:考慮到一個(gè)多層次的營(yíng)銷(xiāo)方案,其中一個(gè)銷(xiāo)售人員可以領(lǐng)導(dǎo)多個(gè)銷(xiāo)售人員。在這種情況下,你可以使用自定義的主鍵和設(shè)置外鍵來(lái)幫助你實(shí)現(xiàn)統(tǒng)一。
您可以根據(jù)自身的項(xiàng)目需求選擇不同的數(shù)據(jù)處理方法。如下所示:三種常規(guī)范式。
英文出自:c-sharpcorner
market@csdn.net。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com