一篇搞懂數據模型【數據庫概論筆記】

(一) 客觀世界被描述的範疇

在現實的生活中,描述一件事物,是非常簡單的,但是如何將客觀世界中,我們所理解,所認知的數據放到數據庫中就需要人們對其進行整理、規範和加工,也就是根據其特徵進行數據的抽象,然後才能存放到數據庫中

然而這個抽象的過程也不是一蹴而就的,對事物的抽象,存在多個不同的層次,同時也需要採用不同的模型進行描述

說明:圖片右側的三種模型會在後面具體介紹

可能看完上面不同層次的抽象,對於數據在實際世界與計算機中的聯繫過程,還是很懵,下面通過三個範疇的簡單介紹,大家大致就可以有一個直觀的概念了

數據從現實生活進入到數據庫實際上經歷了若干個階段。一般劃分三個階段,即現實世界、信息世界和機器世界,稱爲數據的三種範疇。

① 現實世界:存在於人們頭腦之外的客觀世界,稱爲現實世界(別想複雜,這就是咱們生活的這個世界)

② 信息世界:也叫觀念世界,是現實世界在人們頭腦中的反映

  • 也就是,你看到實際生活中一個東西或事物,你腦子裏會咋想他,例如學生信息管理,你就會想,學生相關的,例如年齡,學號,出生日期,學院/系 等等

③ 機器世界:信息世界的信息在機器世界中以數據形式存儲

  • 機器畢竟只能存儲數據化的一些信息,必須有一定的規範,且進行加工、編碼等等步驟後才能行

(二) 數據模型

(1) 定義

在數據庫系統中針對不同的使用對象和應用目的,採用不同的數據模型。根據模型的應用的不同目的,可以將這些模型劃分爲兩類,它們分屬於不同的層次(可以對應看前面第一大點的配圖)

(2) 分類

A:概念數據模型

  • 它也稱信息模型

  • 它是按用戶的觀點(觀念世界)來對數據和信息建模,主要用於數據庫設計

B:DBMS支持的基本數據模型

  • 它是按計算機系統的觀點進行(機器世界)數據建模,主要用於DBMS的實現

  • 主要包括層次模型、網狀模型、關係模型等等

(3) 數據模型的三要素

A:數據結構

  • 數據結構描述數據庫的組成對象以及對象之間的聯繫

  • 數據結構用於描述系統的靜態特性

  • 通常按照數據結構的類型來命名數據模型

    • 層次結構——層次模型
    • 網狀結構——網狀模型
    • 關係結構——關係模型

B:數據操作

  • 數據操作是指對數據庫中各種對象(型)的實例(值)允許執行的操作的集合,包括操作及有關的操作規則

  • 數據庫主要有檢索和修改(包括插入、刪除、更新)兩大類操作

  • 數據模型必須定義這些操作的確切含義、操作符號、操作規則(如優先級)以及實現操作的語言

  • 數據操作用於描述系統的動態特徵

說白了,就是你想咋 “動” 這些數據

C:數據完整性約束

  • 數據完整性約束是一組完整性規則的集合

  • 完整性規則是給定的數據模型中數據及其聯繫所具有的制約和儲存規則,用以限制符合數據模型的數據庫狀態以及狀態的變化,用以確保數據的正確、有效和相容

下面我們會分別,就概念數據模型基本數據類型兩者進行較爲詳細的介紹

(三) 概念模型

(1) 定義

概念模型是從現實世界中抽取出對於一個目標應用系統來說最有用的事物、事物特徵以及事物之間的聯繫,通過各種概念精確地加以描述

簡單的說就是:概念模型,就是按照用戶的觀點來對信息進行建模

(2) 必知概念

A:實體(Entity)

客觀存在並可相互區別的客觀事物或抽象事件稱爲實體

  • 就好比你腦海中對一個東西或事物的反映
  • 實體可以指人,如一名學生、一名工人等;也可以指東西,如一臺電腦、一個桌子、一個杯子等
  • 實體不僅可以指實際的事物,還可以指抽象的事物,如一次拜訪、一次野餐、購物、演出、籃球賽等
  • 甚至還可以指事物與事物之間的聯繫,如“學生選課記錄”和“用戶訂餐記錄”等

B:屬性(Attribute)

屬性是指實體所具有的某一方面的特性

  • 一個實體可有多個屬性,例如,學生的屬性有姓名、年齡、性別、學院等。

屬性值:屬性所取的具體值稱作屬性值

  • 例如,一名學生,其中一個屬性 “姓名” 的取值 爲 “張三”

C:域(Domain)

一個屬性可能取的所有屬性值的範圍稱爲該屬性的域

  • 例如,教師屬性“性別”的域爲男、女;教師屬性“職稱”的域爲助教、講師、副教授、教授等

由此可見,每個屬性都是個變量,屬性值就是變量所取的值,而域則是變量的變化範圍

因此,屬性是表徵實體的最基本的信息

D:碼(Key)

惟一標識實體的屬性集稱爲碼

  • 唯一!唯一!唯一!
  • 例如學號是學生實體的碼,一個學號就能確定這個學生到底哪個

E:實體型(Entity Type)

具有相同屬性的實體必然具有共同的特性和性質,用實體名及其屬性名集合來抽象和刻畫同類實體,稱爲實體型

  • 例如,學生(姓名,年齡,性別,學院)就是一個實體型

F:實體集(Entity Set)

同一類型實體的集合。例如,某一學校中的學生具有相同的屬性,他們就構成了實體集 “學生”

(2) 實體間聯繫

現實世界中事物彼此的聯繫在概念模型中反映爲實體間的聯繫

  • 實體內部的聯繫通常是指組成實體的各屬性之間的聯繫
  • 實體之間的聯繫通常是指不同實體集之間的聯繫

如上圖,常見的聯繫有這麼幾種

定義就不給了,很繁瑣枯燥,舉幾個例子很容易理解:

A:一對一

學校裏,實體集班級與實體集班長之間的就具有1:1聯繫

  • 一個班級只有一個班長,而一個班長只在一個班中任班長職務

B:一對多

例如,實體集班級與實體集學生就是一對多聯繫

  • 因爲一個班級中有若干名學生,而每個學生只在一個班級中學習。

C:多對多

實體集課程與實體集學生之間的聯繫是多對多聯繫(m:n)

  • 因爲一個課程同時有若干名學生選修,而一個學生可以同時選修多門課程。

實體型之間的這種一對一、一對多、多對多聯繫不僅存在於兩個實體型之間,也存在於兩個以上的實體型之間。

  • 例如,對於課程、教師與參考書三個實體型,如果一門課程可以有若干個教師講授,使用若干本參考書,而每一個教師只講授一門課程,每一本參考書只供一門課程使用,則課程與教師、參考書之間的聯繫是一對多的

(三) 基本數據模型

目前常用的數據模型有三種:

  • ① 層次模型

  • ② 網狀模型

  • ③ 關係模型

其中層次模型和網狀模型統稱爲非關係模型

層次模型(Hierarchical Model)
網狀模型(Network Model)
關係模型(Relational Model)
半結構化數據模型(Semistructured-data Model)
面向對象模型(Object Oriented Model)
對象關係模型(Object Relational Model)

(1) 層次模型

A:基本概念

用樹型結構來表示實體之間聯繫的模型稱爲層次模型

構成層次模型的樹是由結點和連線組成的,結點表示實體集(文件或記錄型),連線表示相連兩個實體之間的聯繫

這種聯繫只能是一對一,一對多的!!!

通常把表示“一”的實體放在上方,稱爲父結點,而把表示**“多”的實體放在下方**,稱爲子結點

根據樹結構的特點,建立數據的層次模型需要滿足下列兩個條件:

  • 有且僅有一個結點沒有父結點,這個結點即爲樹根結點

  • 其他數據記錄有且僅有一個父結點

就如上圖就是一個層次模型的例子

B:特點

層次模型的一個基本的特點是,任何一個給定的記錄值只有按其路徑查看時,才能現出它的全部意義,無一個子女記錄值能夠脫離雙親記錄值而獨立存在

層次模型最明顯的特點是層次清楚、構造簡單以及易於實現,它可以很方便地表示出一對一和一對多這兩種實體之間的聯繫。

C:優點

  • 層次模型的數據結構比較簡單;
  • 層次數據庫的查詢效率高;
  • 因記錄間的聯繫用有向邊表示,在DBMS中用指針來實現,路徑明確,快速

D:缺點

  • 對於非層次性的,如多對多聯繫、一個結點具有多個雙親等,層次模型表示這類聯繫就很難受,只能通過引入冗餘數據(易產生不一致性)或創建非自然組織(引入虛結點)來解決
  • 對插入和刪除操作的限制比較多
  • 查詢子結點必須通過雙親結點
  • 由於結構嚴密,層次命令趨於程序化

(2) 網狀模型

A:基本概念

網狀模型和層次模型在本質上是一樣的,簡單對比分析一下:

  • 從邏輯上看它們都是用連線表示實體之間的聯繫,用結點表示實體集

  • 從物理上看,層次模型和網絡模型都是用指針來實現兩個文件之間的聯繫

  • 其差別僅在於網狀模型中的連線或指針更加複雜,更加縱橫交錯,從而使數據結構更復雜

網狀模型去掉了層次模型的兩個限制(下面的 ① ② 點),所以它是一種比層次模型更具普遍性的結構,

在數據庫中,把滿足以下條件的基本層次聯繫集合稱爲網狀模型:

  • ① 允許一個以上的結點沒有雙親結點
  • ②一個節點可以有多於一個雙親節點
  • ③ 允許兩個節點之間有多種聯繫

網狀模型可以直接表示實體之間多對多的聯繫

B:優點

  • 能夠更爲直接地描述現實世界,如一個結點可以有多個雙親
  • 具有良好的性能,存取效率較高

C:缺點

  • 結構比較複雜,而且隨着應用環境的擴大,數據庫的結構就變得越來越複雜,不利於用戶最終掌握
  • 其DDL,DML語言複雜,用戶不容易使用

(3) 關係模型

A:基本概念

關係模型是現在非常流行的一種數據模型

關係模型是用表格數據來表示實體本身及其相互之間的聯繫的

  • 在用戶觀點下,關係模型中數據的邏輯結構是一張二維表,它由行和列組成

  • 關係既可以表示實體也可以用來描述實體間的聯繫

在關係模型中,把數據看成一個二維表,每一個二維表稱爲一個關係

關係表中的每一列稱爲屬性,相當於記錄中的一個數據項,對屬性的命名稱爲屬性名

表中的一行稱爲一個元組,相當於記錄值。

對於表示關係的二維表,其最基本的要求是,表中元組的每一個分量必須是不可分的數據項,即不允許表中再有表,如下圖

B:優點

  • 關係模型的概念單一,數據結構比較簡單,實體與實體間的聯繫均用關係來表示,因此,數據的結構比較簡單、清晰
  • 具有很高的數據獨立性。在關係模型中,用戶完全不涉及數據的物理存放,只與數據本身的特性發生關係。因此,數據獨立性很高
  • 可以直接處理多對多的聯繫。在關係模型中,由於使用表格數據來表示實體之間的聯繫,因此,可以直接描述多對多的實體聯繫(如下表直接表示了學生與課程之間的多對多的關係)
  • 建立在嚴格的數學概念基礎上,也有着堅實的理論基礎

C:缺點

  • 最主要的缺點是,查詢效率往往不如非關係數據模型。

  • 爲提高效率,關係數據庫管理系統必須對用戶的查詢請求進行優化,這樣增加了開發DBMS的難度。

(4) 半結構化模型

A:基本概念

半結構數據是“無模式”的,數據是自描述(self describing)的

數據攜帶了關於其模式的信息,模式可以隨着時間在單一數據庫內任意改變,易於修改和變化

它是一種適於數據庫集成(integration)的數據模型,適於描述包含在兩個或多個數據庫(這些數據庫含有不同模式的相似數據)中的數據。

它也是一種標記服務的基礎模型,適於在Web上共享信息

B:特點

半結構化數據類似樹或圖

  • 葉子結點(leaf)與具體數據相關,數據的類型可以是任意原子類型,如數字和字符串。

  • 內部結點(interior)至少都有一條向外的弧。每條弧都有一個標籤(label),該標籤指明弧開始處的結點與弧末的結點之間的關係

  • 要有一個根(root)結點,它代表整個數據庫,每個結點都從根可達。

XML 適合存儲半結構化數據,關於XML 在我之前的文章中可以看到一篇具體的介紹,這裏就不做過多的介紹

面向對象數據模型(object-oriented data model,簡稱OO data model)
吸收了概念數據模型和知識表示模型的一些基本概念,同時又借鑑了面向對象程序設計語言和抽象數據類型的一些思想,是一種可擴充的數據模型。
面向對象數據模型的基本概念是對象和類。

(5) 面向對象數據模型

A:基本概念

面向對象數據模型,吸收了概念數據模型和知識表示模型的一些基本概念,同時又借鑑了面向對象程序設計語言和抽象數據類型的一些思想,是一種可擴充的數據模型。
面向對象數據模型的基本概念是對象和類。

現實世界的任意實體都是對象

一個對象可以包含多個屬性,用來描述對象的狀態、組成和特性

對象還包括若干方法,用以描述對象的行爲特性,通過方法可以改變對象的狀態,對對象進行各種數據庫操作

對象是封裝的,對象之間的通信是通過消息傳遞來實現的,即消息從外部傳遞給對象,存取和調用對象中的屬性和方法,在內部執行要求的操作,操作的結果仍以消息的形式返回

B:類(Class)和實例(instance)

共享同一屬性集合和方法集合的所有對象組合在一起構成了一個對象類(簡稱爲類),一個對象是某一類的一個實例。
例如,學生是一個類,具體的某個學生,例如張山是學生類中的一個對象
在數據庫系統中有“型”和“值”的概念,而在面向對象數據模型中,“型”就是類,對象是某個類的“值”

類屬性的定義域可以爲基本類,如字符串、整數、布爾型,也可以爲一般類,即包括屬性和方法的類一個類的屬性也可以定義爲這個類自身

C:類層次(Class hierarchy)

面向對象數據模型中,類的子集稱爲該類的子類,該類稱爲子類的超類。子類還可以有子類,也就是類可以有嵌套結構

系統中所有的類組成了一個有根的有向無環圖,稱爲類層次

一個類可以從類層次的直接或間接祖先那裏繼承所有的屬性和方法,用這個方法實現了軟件的可重用性

(四) 結尾

如果文章中有什麼不足,歡迎大家留言交流,感謝朋友們的支持!

如果能幫到你的話,那就來關注我吧!如果您更喜歡微信文章的閱讀方式,可以關注我的公衆號

在這裏的我們素不相識,卻都在爲了自己的夢而努力 ❤

一個堅持推送原創開發技術文章的公衆號:理想二旬不止

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章