資料庫原理(一) 資料庫基本概念

1 資料庫基本概念

1.1資料庫和資料庫管理系統

資料庫管理系統:由一個互相關聯的數據的集合和一組用以訪問這些數據的程式組成,這個數據集合一般叫做資料庫

資料庫管理系統(Database Management System)是一種操縱和管理資料庫的大型軟體,用於建立、使用和維護資料庫,簡稱DBMS。它對資料庫進行統一的管理和控制,以保證資料庫的安全性和完整性。用戶通過DBMS訪問資料庫中的數據,資料庫管理員也通過DBMS進行資料庫的維護工作。它可以支援多個應用程式和用戶用不同的方法在同時或不同時刻去建立,修改和詢問資料庫。大部分DBMS提供數據定義語言DDL(Data Definition Language)和數據操作語言DML(Data Manipulation Language),供用戶定義資料庫的模式結構與許可權約束,實現對數據的追加、刪除等操作。

資料庫:資料庫是「按照數據結構來組織、存儲和管理數據的倉庫」。是一個長期存儲在電腦內的、有組織的、可共享的、統一管理的大量數據的集合。

從資料庫管理系統的定義可知,資料庫是資料庫管理系統的子集


1.2 資料庫系統和文件系統

設計資料庫系統的目的是為了管理大量資訊。那為什麼我們有文件系統了,可以放數據了,為啥還要用到資料庫呢?這就要討論它們的區別了。

在早期的電腦中,保存資訊的方法是將它們保存在作業系統文件中。為了使用戶可以對資訊進行操作,系統中應該有一些對文件進行操作的應用程式。這個談到的應用程式不是我們說的QQ啊,網易雲啊這種程式,而是針對某種功能設計的特殊程式。比如大學學生管理系統中增加新的學生、教師和課程;為課程註冊學生,併產生班級花名冊。這些應用程式都是由系統程式設計師根據大學的需求編寫的。

也就是說,當我們追求越完美的學生管理系統,所需要的文件和應用程式可能就越來越多。而這似乎有一些弊端。

文件和資料庫的區別(這裡我們講的是在應用開發上的區別)

其實文件和資料庫我們都可以用來存數據,但是文件是作業系統提供的一個最簡單最基本的一個存取數據的機制;在作業系統里,數據在文件里沒有結構,而是一串平滑的字元流。所以,文件系統明顯地有下列5個缺點:

  • 數據訪問困難;編寫應用程式很不方便。由於作業系統只提供打開、關閉、讀、寫等幾個低級的文件作業系統,對文件的查詢、修改等處理都必須在應用程式解決。
  • 數據冗餘不一致;文件的設計很難滿足多種應用程式的不同要求,數據冗餘往往是不可避免的 。相同的資訊可能在幾個地方重複存儲,比如一個學生是學數學和音樂的,數學課的文件上面有他的名字和學號,音樂課上面也有;這樣的話如果該學生學號改變,兩個文件都要改,假如一個地方沒改,就會造成數據不一致
  • 維護艱難;對文件結構的每個修改將導致應用程式的修改,應用程式的維護工作量很大。
  • 並發訪問異常;文件系統一般不支援對文件的並發訪問。
  • 數據孤立;由於數據缺少同一管理,在數據的結構、編碼、表示格式、命名以及輸出格式等方面不容易做到規範化、標準化;在數據的安全和保密方面,也難以採取有效的措施。
  • 原子性問題;傳統的文件處理系統中,保持原子性很難做到。比如兩個發生銀行的轉賬,兩個賬戶的文件都要同時修改,也就是說,轉賬這個操作必須是原子的——要麼不發生要麼全發生,而這個是傳統的文件系統很難做到的。

也就是說,我們使用資料庫管理系統的優點即為文件系統的缺點。

資料庫管理系統的好處

  • 數據獨立性和有效訪問。
  • 減少應用開發時間。
  • 數據完整性和安全性。
  • 對資料庫的統一管理。
  • 故障恢復。

1.3 數據模型

在講解這一部分之前,我們需要對幾個概念有些許了解。

數據:就是描述現實世界的符號,他是資訊存在的形式。

數據模型:數據模型就是來描述數據的一組概念和定義;也可以理解為數據結構,實際上就是描述現實世界的方法。

數據模式:用一個給定的數據模型對一個具體數據的描述

實際上,如果學過數據結構,就可以很輕鬆地了解以上的概念。你也可以這麼理解:數據模型相當於程式語言,比如C++,Java等,數據模式就是用對應的程式語言寫出來的軟體。

目前資料庫中主流的數據模型是關係數據模型,在資料庫原理的課程中一般都是圍繞關係數據模型作為講解。數據模型可以分為以下四類:

  1. 關係模型

這裡我們不過多提及

  1. 實體聯繫模型(E-R模型)

這裡我們不過多提及

  1. 基於對象的數據模型

面向對象的程式設計已經目前稱為主流的軟體開發方法。這導致面向對象數據模型的發展,面向對象的數據類型可以看成是E-R模型增加了封裝,方法(函數)和對象標識等概念的擴展。對象-關係數據模型結合了面向對象的數據模型和關係數據模型的特徵。

  1. 半結構化數據模型

這裡我們不過多累述,但是我們要知道可擴展標記語言被廣泛地用來表示半結構化數據。

需要注意的是,實際上在以前還有網狀數據模型和層次數據模型,下面我們也有講述,不過由於他們已經過時了,除了在某些地方仍舊是用的舊資料庫之外,現在已經很少使用了。


1.4 資料庫三級模式和兩級獨立性

1.4.1 三級模式

三級模式指的是:許多視圖、簡單的概念(邏輯)模式物理模式。這和Java中的MVC設計框架有點類似。

image-20211004004634420

  • 外模式(視圖)描述的是如何去看數據。

  • 概念模式定義邏輯結構。

  • 物理模式描述文件和索引的使用。

表只是一個邏輯概念,也就是我們說的概念模式,那麼表以後在磁碟上會怎麼存呢;比如說學生基本資訊表,你是用一個堆文件來存,還是用一個哈希文件來存,還是用一個簇集,這都是取決於我們用什麼結構來存;而存法,就是physical Schema(物理模式)。概念模式,就是我們剛剛說的表,表的結構是什麼,屬性有多少,長度如何,這就是概念模式,我們把概念模式里的表叫做基表,基表是用真正的某種結構存儲在磁碟上的。而外模式(視圖),是通過對基表的改造,來呈現不同的樣子給用戶看,不同許可權的用戶看到的視圖是不一樣的。

舉個例子,如果拿大學資料庫的例子來說明上面的三級模式的話:

概念模式

Student(sid:string,name:string,login:string,age:integer,gpa:real)
Course(cid:string,cname:string,credits:integer)
Enrolled(sid:string,cid:string,grade:integer)

物理模式

  • 以堆文件來存放
  • 在學生表的第一列建一個B+樹索引

視圖

Course_info(cid:string,enrollment:integer)

視圖可以不是基表的資訊,可以是通過基表的資訊計算出來的。

1.4.2 數據獨立性

實際上對於應用程式來說,其可以不在意資料庫中的數據是怎麼存放的,這是由於資料庫中的數據具有數據獨立性。

邏輯數據獨立性:保護數據的邏輯結構的改變

一個在資料庫的基礎之上開發的應用程式不受數據邏輯結構的影響。

假如基表變動(也就是數據結構變動),那麼通過改變一些邏輯,能夠使得原來基表還未變動之前的視圖不受改變。即基表雖然改變,但是視圖為了保證不變,我修改基表和視圖的映射。

物理數據獨立性:保護數據的物理結構的改變

一個表結構變化,比如我前面使用哈希文件存的,但是現在用堆文件存,只要表邏輯結構不變,物理結構變化是沒事的。

數據獨立性是DBMS最大的好處之一。因為文件系統是沒有這樣的優點的。

1.5 資料庫發展歷史及分類

發展歷史我覺得幾個特別的需要記住,其他的就算了。

  • 1964年,第一個DBMS:美國通用電氣公司Bachman等人開發的IDS,採用網狀數據模型。
  • 1969年,IBM公司推出了IMS,採用層次數據模型。
  • 1970年,E.Fcodd(IBM)提出了關係數據模型,以關係(表)作為描述數據的基礎。

如果根據DBMS的發展歷史來分類的話,如下:

在電腦發展早期,那時候沒有網路,一台主機帶著一堆終端,大家通過終端來訪問一台機器,很明顯,那時候資料庫也是集中放在一台機器上,所以當時DBMS早期是一種集中式資料庫結構

70年代中後期,隨著區域網的發展還有其他網路的普及,出現了分散式資料庫系統;所謂並行電腦系統就是在一台電腦上,可能會有多個CPU,每個CPU可能帶有自己的記憶體甚至帶有自己的硬碟。在考慮並行電腦系統的軟硬體特點,前人做出了能夠提高效率的並行式資料庫系統;由於當時電腦配置還不是很高級,很多時候用一個分散式作業系統通過網路控制多台機器,使其協調共同完成一個資料庫系統的工作。

隨著無線網路的發展,後來又出現了移動資料庫的概念,也就是充分利用移動網路的能力,在隨時隨地都能夠訪問到資料庫。網格計算和雲計算都是這方面的技術。

根據資料庫架構的話可以分為以下兩種:

CS結構(兩層體系架構)

C/S又稱Client/Server或客戶/伺服器模式,伺服器通常採用高性能的PC、工作站或小型機,並採用大型資料庫系統,如Oracle、Sybase、Informix或 SQL Server。客戶端需要安裝專用的客戶端軟體。也就是說,在CS架構中,應用程式駐留在客戶機上,通過查詢語言表達式來調用伺服器上的資料庫系統功能。像ODBC和JDBC這樣的應用程式介面標準被用於進行客戶端和伺服器的交互。

image-20220124121444130

BS結構(三層資料庫結構)

B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,伺服器安裝Oracle、Sybase、Informix或 SQL Server等資料庫。BS結構中用戶端的瀏覽器通過應用伺服器同資料庫進行數據交互。

image-20220124121505132

拿VPN來說,現在比如說校園網,都是通過IE瀏覽器然後訪問互聯網,然後互聯網給Web服務端(應用伺服器)發請求,如果成功,則通過App服務端(用戶端)訪問校園網資料庫,如果失敗則進入不了校園網。

C/S架構的優點是能充分發揮客戶端PC的處理能力,很多工作可以在客戶端處理後再提交給伺服器。對應的優點就是客戶端響應速度快。缺點主要有以下幾個: 只適用於區域網。而隨著互聯網的飛速發展,移動辦公和分散式辦公越來越普及,這需要我們的系統具有擴展性。這種方式遠程訪問需要專門的技術,同時要對系統進行專門的設計來處理分散式的數據。 客戶端需要安裝專用的客戶端軟體。首先涉及到安裝的工作量,其次任何一台電腦出問題,如病毒、硬體損壞,都需要進行安裝或維護。特別是有很多分部或專賣店的情況,不是工作量的問題,而是路程的問題。

1.6 資料庫系統的組成和生命周期

1.6.1 三個概念

在最開始的時候我們提到資料庫是資料庫管理系統的一個子集,對於很多人來說,資料庫、資料庫管理系統、資料庫系統三個概念常常容易混淆,這裡給出三者定義方便做對比:

資料庫是長期存儲在電腦內有組織、可共享的數據集合,資料庫中的數據按一定的數據模型組織、描述、存儲,冗餘度小,具有較高的數據獨立性、共享性和易擴展性。

資料庫管理系統是資料庫系統的核心組成部分,它是介於用戶與作業系統之間的一層數據管理軟體,是用戶和資料庫的介面。

資料庫系統是帶有資料庫的電腦系統,一般由資料庫、資料庫管理系統(及其開發工具)、相關的硬體、軟體和各類人員組成。數據模型是資料庫的核心。

image-20211004020310273

綜上所述:資料庫系統=應用+DBMS+資料庫+DBA

1.6.2 生命周期

資料庫和軟體一樣,也有一個生存周期,它包含下列五個階段。

  1. 資料庫系統的規劃

    它包含系統的應用和功能的確認、應用環境的分析、DBMS及其支援環境的選擇和配置、人員的配置和培訓以及投資估算和效益分析等活動。

  2. 資料庫設計

    資料庫設計實際上主要是數據的表示方法和存儲結構的設計。

  3. 資料庫建立

  4. 資料庫的運行、管理和維護

    資料庫投入運行後,還必須監視和調優其性能,聽取用戶的回饋,必要時對資料庫做相應的調整

  5. 資料庫的擴充和重構

    一個單位的組成、結構和功能是會變化的,其對應的數據模式也須做相應的改變。