一、什么是數據模型?
-
數據模型是數據庫的基礎結構,用于描述和組織數據的方式。
-
它不僅是數據庫的底層結構,還是一個概念性工具,幫助理解數據的含義和關系。
- 數據模型包括數據本身、數據之間的關系、數據的語義(含義和描述)、以及數據的約束條件。
- 在設計數據庫時,可以從物理層面(存儲結構)、邏輯層面(關系模型)和視圖層面(用戶視角)來考慮和實現數據模型。
常見的四種數據模型:
1.關系模型
關系模型是數據庫管理系統中的一種主要數據模型。關系模型通過表和表之間的關系,提供了一種清晰而有效的方式來組織和管理數據,適用于各種規模和類型的應用程序和數據庫需求。
-
關系模型是由表的集合組成的,每個表用來表示數據和數據之間的關系。
-
表中的行和列用來存儲數據,同時也表示數據之間的關系。
-
每個表可以包含多個列,每個列都有唯一的名稱和定義的數據類型。
-
在關系模型中,表被稱為關系,反映了數據的結構和組織方式。
-
關系模型是基于記錄(即行)的模型,每條記錄有多個字段或屬性,字段數目和類型是固定的。
-
關系模型是目前最廣泛使用的數據模型,大多數現代數據庫系統都基于此模型設計和實現。
2.實體關系模型
E-R 模型通過清晰地定義實體和它們之間的關系,為數據庫設計提供了一種直觀且高效的方法。
-
E-R 模型由稱為實體的基本對象及其之間的關系組成。
-
實體是現實世界中可區分的事物或對象,例如一個人、一個地方或一個事件。
-
實體之間可以存在不同類型的關系,如一對一、一對多或多對多關系,這些關系反映了實際世界中事物之間的連接方式。
3.對象模型
對象模型(Object-Based Model,OBM)是數據庫設計中的一個重要概念。結合了實體-關系(E-R)模型和面向對象編程語言的特性。
對象模型在現代數據庫設計和應用開發中具有重要的地位,為面向對象編程與數據庫管理之間的集成提供了理想的解決方案。
-
面向對象的特性:
- 對象模型基于面向對象編程(如C++、Java、C#等)的思想,將數據表示為對象。
- 每個對象有其自身的屬性(數據)和方法(操作)。
-
封裝:
- 將數據和操作封裝在對象內部,通過定義公共接口進行訪問和操作,增強了數據的安全性和模塊化。
-
繼承:
- 支持類與子類之間的繼承關系,使得對象可以繼承和重用現有的屬性和方法。
-
多態:
- 允許不同類的對象對相同的消息作出不同的響應,提高了代碼的靈活性和可復用性。
-
實體-關系模型(E-R模型):
- 基于實體、屬性和關系的概念,用于描述現實世界中的數據結構和關聯。
-
數據建模:
- 通過定義類、屬性和方法來建模現實世界中的實體和其關系,更符合業務邏輯和需求的表達方式。
4.半結構化數據模型
半結構化數據模型是一種用于表示和處理半結構化數據的概念性模型,它區別于傳統的結構化數據模型(如關系數據庫中的表和列)和非結構化數據(如文本和圖像)。
-
半結構化數據模型強調數據可以包含不同的數據項類型,并且可以根據需要動態擴展和修改數據的結構。
-
這種模型與傳統的數據模型形成鮮明對比,比如關系型數據庫模型,它們通常要求所有數據都遵循預定義的嚴格結構。
-
在這種情況下,半結構化數據模型可以使用類似可擴展標記語言(如XML)的格式來表示數據。
-
XML允許數據以自定義的、層次化的方式進行組織,每個數據項可以具有不同的屬性集合。這
二、為什么需要數據建模?
- 1.大數據時代,如何將這些海量的數據進行有序、有結構地分類組織和存儲是我們面臨的一個挑戰,也是我們的目標。
- Tips:如果把數據比作圖書館里的書,我們希望看到書在書架上分門別類的放好;如果把數據比作城市里的建筑,我們希望城市規劃布局合理;如果把數據看作電腦文件和文件夾,我們希望按照自己的習慣有很好的文件夾組織方式,而不是糟糕混亂的桌面,經常為找一個文件而不知所措。
-
2.而數據模型就是數據組織和存儲的方法,數據模型強調從業務、數據存儲和使用角度合理存儲數據。
-
良好的數據模型可以帶來很多好處:
- 性能(效率):快速查詢所需要的數據,減少數據的I/O吞吐,極大改善用戶體驗,提高使用數據的效率。
- 成本:減少不必要的數據冗余,也能實現計算結果復用,極大降低成本。
總結下來就是一句話——大數據系統需要數據模型方法來幫助更好地組織和存儲數據,以便在最主要的兩個方面——成本和效率之間取得最佳平衡。
三、從OLTP、OLAP系統區別看模型方法論的選擇
- 一般在公司中,系統是分為兩部分的,一部分系統是業務系統,另一部分是決策類系統。
- OLTP通常是業務系統的這種模式,OLAP通常是面向于分析的決策類系統。
- OLTP通常是關系型數據庫,必須要保證業務上的數據的唯一性或者準確性(嚴格3NF要求)。
- OLAP強調的不再是業務數據的存儲,而是通過對業務數據的再分析,最終產出一個決策,去回流到業務系統中,讓業務系統更好的去發展。