① 什麼叫「細粒度」
細粒度模型,通俗的講就是將業務模型中的對象加以細分,從而得到更科學合理的對象模型,直觀的說就是劃分出很多對象。
粒度是資料庫名詞,計算機領域中粒度指系統內存擴展增量的最小值。粒度問題是設計數據倉庫的一個最重要方面。粒度是指數據倉庫的數據單位中保存數據的細化或綜合程度的級別。細化程度越高,粒度級就越小;相反,細化程度越低,粒度級就越大。數據的粒度一直是一個設計問題。
在早期建立的操作型系統中,粒度是用於訪問授權的。當詳細的數據被更新時,幾乎總是把它存放在最低粒度級上。但在數據倉庫環境中,對粒度不作假設。
(1)資料庫為什麼用到表基本粒度擴展閱讀
粒度運算是一種新興的信息處理運算模型。它涉及到復雜信息實體(即信息粒,英語:Information Granule)的處理,包括數據的抽象化還有從信息推導知識的過程。一般來說,信息粒通常是數值層面上的實體集合,它們以相似性、功能的近似性、不可辨別性及一致性等指標來進行整合。
目前,粒度運算只有較多的理論觀點而尚未形成一套完整的方法。從理論觀點看,它提倡通過不同的解析度或尺度,對數據中出現的知識進行認知以及探索。
在這個意義上來講,粒度運算包含了所有能夠在提取及表示知識或信息的尺度中,提供靈活性和適應性的所有方法。
② 為什麼要給資料庫分層
(1)為什麼要分層
作為一名數據的規劃者,我們肯定希望自己的數據能夠有秩序地流轉,數據的整個生命周期能夠清晰明確被設計者和使用者感知到。直觀來講就是如圖這般層次清晰、依賴關系直觀。
但是,大多數情況下,我們完成的數據體系卻是依賴復雜、層級混亂的。如下圖,在不知不覺的情況下,我們可能會做出一套表依賴結構混亂,甚至出現循環依賴的數據體系。
因此,我們需要一套行之有效的數據組織和管理方法來讓我們的數據體系更有序,這就是談到的數據分層。數據分層並不能解決所有的數據問題,但是,數據分層卻可以給我們帶來如下的好處:
1)清晰數據結構: 每一個數據分層都有它的作用域和職責,在使用表的時候能更方便地定位和理解;
2)減少重復開發: 規范數據分層,開發一些通用的中間層數據,能夠減少極大的重復計算;
3)統一數據口徑: 通過數據分層,提供統一的數據出口,統一對外輸出的數據口徑;
4 )復雜問題簡單化: 將一個復雜的任務分解成多個步驟來完成,每一層解決特定的問題。
為了滿足前面提到好處,通常將數據模型分為三層:數據運營層( ODS )、數據倉庫層(DW)和數據應用層(APP)。簡單來講,我們可以理解為:ODS層存放的是接入的原始數據,DW層是存放我們要重點設計的數據倉庫中間層數據,APP是面向業務定製的應用數據。下面詳細介紹這三層的設計。
(2)數據模型的分層
1)源數據層(ODS)
此層數據無任何更改,直接沿用外圍系統數據結構和數據,不對外開放;為臨時存儲層,是介面數據的臨時存儲區域,為後一步的數據處理做准備。
2)數據倉庫層(DW)
也稱為細節層,DW 層的數據應該是一致的、准確的、干凈的數據,即對源系統數據進行了清洗(去除了雜質)後的數據。
此層可以細分為三層:
明細層DWD(Data Warehouse Detail) :存儲明細數據,此數據是最細粒度的事實數據。該層一般保持和ODS層一樣的數據粒度,並且提供一定的數據質量保證。同時,為了提高數據明細層的易用性,該層會採用一些維度退化手法,將維度退化至事實表中,減少事實表和維表的關聯。
中間層DWM(Data WareHouse Middle) :存儲中間數據,為數據統計需要創建的中間表數據,此數據一般是對多個維度的聚合數據,此層數據通常來源於DWD層的數據。
業務層DWS(Data WareHouse Service) :存儲寬表數據,此層數據是針對某個業務領域的聚合數據,業務層的數據通常來源與此層,為什麼叫寬表,主要是為了業務層的需要在這一層將業務相關的所有數據統一匯集起來進行存儲,方便業務層獲取。此層數據通常來源與DWD和DWM層的數據。
在實際計算中,如果直接從DWD或者ODS計算出寬表的統計指標,會存在計算量太大並且維度太少的問題,因此一般的做法是,在DWM層先計算出多個小的中間表,然後再拼接成一張DWS的寬表。由於寬和窄的界限不易界定,也可以去掉DWM這一層,只留DWS層,將所有的數據在放在DWS亦可。
3)數據應用層(DA 或 APP)
前端應用直接讀取的數據源;根據報表、專題分析的需求而計算生成的數據。
4)維表層(Dimension)
最後補充一個維表層,維表層主要包含兩部分數據:
A)高基數維度數據:一般是用戶資料表、商品資料表類似的資料表。數據量可能是千萬級或者上億級別。
B)低基數維度數據:一般是配置表,比如枚舉值對應的中文含義,或者日期維表。數據量可能是個位數或者幾千幾萬。
(3)問題擴展
數據倉庫系統架構
上圖系統各部分的執行流程是:
1)確定分析所依賴的源數據。
2)通過ETL將源數據採集到數據倉庫。
3)數據按照數據倉庫提供的主題結構進行存儲。
4)根據各部門的業務分析要求創建數據集市(數據倉庫的子集)。
5)決策分析、報表等應用系統從數據倉庫查詢數據、分析數據。
6)用戶通過應用系統查詢分析結果、報表。
(4)結合項目中使用
電商網站的數據體系設計,這里針對用戶訪問日誌這一部分數據進行舉例說明:
在ODS層中,由於各端的開發團隊不同或者各種其它問題,用戶的訪問日誌被分成了好幾張表上報到了我們的ODS層。
為了方便大家的使用,我們在DWD層做了一張用戶訪問行為天表,在這里,我們將PC網頁、H5、小程序和原生APP訪問日誌匯聚到一張表裡面,統一欄位名,提升數據質量,這樣就有了一張可供大家方便使用的明細表了。
在DWM層,我們會從DWD層中選取業務關注的核心維度來做聚合操作,比如只保留人、商品、設備和頁面區域維度。類似的,我們這樣做很多個DWM的中間表。
然後在DWS層,我們將一個人在整個網站中的行為數據放到一張表中,這就是我們的寬表了,有了這張表,就可以快速滿足大部分的通用型業務需求了。
最後,在APP應用層,根據需求從DWS層的一張或者多張表取出數據拼接成一張應用表即可。
③ 在系統設計中,對資料庫的設計應考慮哪些設計原則
資料庫是整個軟體應用的根基,是軟體設計的起點,它起著決定性的質變作用,因此我們必須對資料庫設計高度重視起來,培養設計良好資料庫的習慣,是一個優秀的軟體設計師所必須具備的基本素質條件!
那麼我們要做到什麼程度才是對的呢?下面就說說資料庫設計的原則:
1、資料庫設計最起碼要佔用整個項目開發的40%以上的時間
資料庫是需求的直觀反應和表現,因此設計時必須要切實符合用戶的需求,要多次與用戶溝通交流來細化需求,將需求中的要求和每一次的變化都要一一體現在資料庫的設計當中。如果需求不明確,就要分析不確定的因素,設計表時就要事先預留出可變通的欄位,正所謂「有備無患」。
2、資料庫設計不僅僅停留於頁面demo的表面
頁面內容所需要的欄位,在資料庫設計中只是一部分,還有系統運轉、模塊交互、中轉數據、表之間的聯系等等所需要的欄位,因此資料庫設計絕對不是簡單的基本數據存儲,還有邏輯數據存儲。
3、資料庫設計完成後,項目80%的設計開發在你腦海中就已經完成了
每個欄位的設計都是有他必要的意義的,你在設計每一個欄位的同時,就應該已經想清楚程序中如何去運用這些欄位,多張表的聯系在程序中是如何體現的。換句話說,你完成資料庫設計後,程序中所有的實現思路和實現方式在你的腦海中就已經考慮過了。如果達不到這種程度,那當進入編碼階段後,才發現要運用的技術或實現的方式資料庫無法支持,這時再改動資料庫就會很麻煩,會造成一系列不可預測的問題。
4、資料庫設計時就要考慮到效率和優化問題
一開始就要分析哪些表會存儲較多的數據量,對於數據量較大的表的設計往往是粗粒度的,也會冗餘一些必要的欄位,已達到盡量用最少的表、最弱的表關系去存儲海量的數據。並且在設計表時,一般都會對主鍵建立聚集索引,含有大數據量的表更是要建立索引以提供查詢性能。對於含有計算、數據交互、統計這類需求時,還要考慮是否有必要採用存儲過程。
5、添加必要的(冗餘)欄位
像「創建時間」、「修改時間」、「備注」、「操作用戶IP」和一些用於其他需求(如統計)的欄位等,在每張表中必須都要有,不是說只有系統中用到的數據才會存到資料庫中,一些冗餘欄位是為了便於日後維護、分析、拓展而添加的,這點是非常重要的,比如黑客攻擊,篡改了數據,我們便就可以根據修改時間和操作用戶IP來查找定位。
6、設計合理的表關聯
若多張表之間的關系復雜,建議採用第三張映射表來關聯維護兩張表之間的關系,以降低表之間的直接耦合度。若多張表涉及到大數據量的問題,表結構盡量簡單,關聯也要盡可能避免。
7、設計表時不加主外鍵等約束性關聯,系統編碼階段完成後再添加約束性關聯
這樣做的目的是有利於團隊並行開發,減少編碼時所遇到的問題,表之間的關系靠程序來控制。編碼完成後再加關聯並進行測試。不過也有一些公司的做法是乾脆就不加表關聯。
8、選擇合適的主鍵生成策略
④ 什麼叫基本表什麼是視圖二者的區別和聯系是什麼
基本表是資料庫中用來存儲數據的對象,是有結構的數據的集合,是整個資料庫系統的基礎。數據在表中式按行和列的格式組織排列的。
視圖是計算機資料庫中的一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在資料庫中以存儲的數據值集形式存在。
基本表、視圖區別為:存在不同、存儲內容不同、操作不同。視圖是由一個或幾個基本表導出形成的虛表。
一、存在不同
1、基本表:基本表是本身獨立存在的表。
2、視圖:視圖本身不存在獨立存儲在資料庫中,是一個虛表。
二、存儲內容不同
1、基本表:基本表存儲的內容是實際的數據。
2、視圖:視圖存儲的內容只有存儲定義,不存放實際數據。
三、操作不同
1、基本表:操作者可以對基本表進行增刪改查四種操作。
2、視圖:操作者只可以對視圖進行查操作,不能進行增刪改操作。
參考資料來源:
網路——表
網路——視圖