数据库杂谈(一)——数据库基本概念
文章目錄
- 1 數據庫基本概念
- 1.1數據庫和數據庫管理系統
- 1.2 數據庫系統和文件系統
- 1.3 數據模型
- 1.4 數據庫三級模式和兩級獨立性
- 1.4.1 三級模式
- 1.4.2 二級映像功能
- 1.4.3 數據獨立性
- 1.5 數據庫發展歷史及分類
- 1.6 數據庫系統的組成和生命周期
- 1.6.1 三個概念
- 1.6.2 生命周期
- 1.6.3 存儲管理器
- 1.7 數據庫用戶和管理員
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等,數據模式就是用對應的編程語言寫出來的軟件。
目前數據庫中主流的數據模型是關系數據模型,在數據庫原理的課程中一般都是圍繞關系數據模型作為講解。數據模型可以分為以下四類:
這里我們不過多提及
這里我們不過多提及
面向對象的程序設計已經目前稱為主流的軟件開發方法。這導致面向對象數據模型的發展,面向對象的數據類型可以看成是E-R模型增加了封裝,方法(函數)和對象標識等概念的擴展。對象-關系數據模型結合了面向對象的數據模型和關系數據模型的特征。
這里我們不過多累述,但是我們要知道可擴展標記語言被廣泛地用來表示半結構化數據。
需要注意的是,實際上在以前還有網狀數據模型和層次數據模型,下面我們也有講述,不過由于他們已經過時了,除了在某些地方仍舊是用的舊數據庫之外,現在已經很少使用了。
1.4 數據庫三級模式和兩級獨立性
1.4.1 三級模式
三級模式指的是:許多視圖、簡單的概念(邏輯)模式和物理模式。這和Java中的MVC設計框架有點類似。
-
外模式(視圖)描述的是如何去看數據。
-
概念模式定義邏輯結構。
-
物理模式描述文件和索引的使用。
表只是一個邏輯概念,也就是我們說的概念模式;那么表在磁盤上會怎么存呢?比如說學生基本信息表,你是用一個堆文件來存,還是用一個哈希文件來存,還是用一個簇集,這都是取決于我們用什么結構來存,而存法,就是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 二級映像功能
數據庫管理系統的三級模式對應數據庫中數據的三個抽象級別。為了能夠在數據庫內部實現這三個抽象層次的聯系和轉換,數據庫系統提供了三級模式之間的兩層映像。
兩層映像指的是外模式/模式映像和模式/內模式映像。
1.4.3 數據獨立性
實際上對于應用程序來說,其可以不在意數據庫中的數據是怎么存放的,這是由于數據庫中的數據具有數據獨立性。
邏輯數據獨立性:保護數據的邏輯結構的改變
一個在數據庫的基礎之上開發的應用程序不受數據邏輯結構的影響。
假如基表變動(也就是數據結構變動),那么通過改變一些邏輯,能夠使得原來基表還未變動之前的視圖不受改變。即基表雖然改變,但是視圖為了保證不變,我修改基表和視圖的映射。
物理數據獨立性:保護數據的物理結構的改變
一個表結構變化,比如我前面使用哈希文件存的,但是現在用堆文件存,只要表邏輯結構不變,物理結構變化是沒事的。
數據獨立性是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這樣的應用程序接口標準被用于進行客戶端和服務器的交互。
BS結構(三層數據庫結構)
B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務器安裝Oracle、Sybase、Informix或 SQL Server等數據庫。BS結構中用戶端的瀏覽器通過應用服務器同數據庫進行數據交互。
拿VPN來說,現在比如說校園網,都是通過IE瀏覽器然后訪問互聯網,然后互聯網給Web服務端(應用服務器)發請求,如果成功,則通過App服務端(用戶端)訪問校園網數據庫,如果失敗則進入不了校園網。
C/S架構的優點是能充分發揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務器。對應的優點就是客戶端響應速度快。缺點主要有以下幾個: 只適用于局域網。而隨著互聯網的飛速發展,移動辦公和分布式辦公越來越普及,這需要我們的系統具有擴展性。這種方式遠程訪問需要專門的技術,同時要對系統進行專門的設計來處理分布式的數據。 客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺電腦出問題,如病毒、硬件損壞,都需要進行安裝或維護。特別是有很多分部或專賣店的情況,不是工作量的問題,而是路程的問題。
1.6 數據庫系統的組成和生命周期
1.6.1 三個概念
在最開始的時候我們提到數據庫是數據庫管理系統的一個子集,對于很多人來說,數據庫、數據庫管理系統、數據庫系統三個概念常常容易混淆,這里給出三者定義方便做對比:
數據庫是長期存儲在計算機內有組織、可共享的數據集合,數據庫中的數據按一定的數據模型組織、描述、存儲,冗余度小,具有較高的數據獨立性、共享性和易擴展性。
數據庫管理系統是數據庫系統的核心組成部分,它是介于用戶與操作系統之間的一層數據管理軟件,是用戶和數據庫的接口。
數據庫系統是帶有數據庫的計算機系統,一般由數據庫、數據庫管理系統(及其開發工具)、相關的硬件、軟件和各類人員組成。數據模型是數據庫的核心。
綜上所述:數據庫系統=應用+DBMS+數據庫+DBA
1.6.2 生命周期
數據庫和軟件一樣,也有一個生存周期,它包含下列五個階段。
數據庫系統的規劃
它包含系統的應用和功能的確認、應用環境的分析、DBMS及其支持環境的選擇和配置、人員的配置和培訓以及投資估算和效益分析等活動。
數據庫設計
數據庫設計實際上主要是數據的表示方法和存儲結構的設計。
數據庫建立
數據庫的運行、管理和維護
數據庫投入運行后,還必須監視和調優其性能,聽取用戶的反饋,必要時對數據庫做相應的調整
數據庫的擴充和重構
一個單位的組成、結構和功能是會變化的,其對應的數據模式也須做相應的改變。
1.6.3 存儲管理器
存儲管理器負責數據庫中數據的存儲、檢索和更新,其和文件管理器進行交互,原始數據通過操作系統提供的文件系統存儲在磁盤上。
存儲管理器一般包括以下幾類:
| 權限及完整性管理器 | 它檢測是否滿足完整性約束,并檢查視圖訪問數據的用戶的權限 |
| 事務管理器 | 它保證即使發送了保障,數據庫也保持在一致的狀態,并保證并發事務的執行不發生沖突 |
| 文件管理器 | 它管理磁盤存儲空間的分配,管理用于表示磁盤上所存儲信息的數據結構 |
| 緩沖區管理器 | 它負責將數據從磁盤上取到內存來,并決定哪些數據應該緩沖存儲在內存中 |
存儲管理器還實現了一些數據結構,可以作為系統物理實現的一部分:
| 數據文件 | 存儲數據庫自身 |
| 數據字典 | 存儲關于數據庫結構的元數據,尤其是數據庫模式 |
| 索引 | 用于提供對數據項的快速訪問,在MySQL中一般采用B+樹索引 |
1.7 數據庫用戶和管理員
使用數據庫的人員一般分為數據庫用戶和數據庫管理員。
舉個簡單的例子,我們要登錄QQ,那么在登錄界面當你輸入賬號密碼后,后端馬上會去數據庫尋找關于你的數據,一旦找到了就通過登錄。那么作為登錄用戶,你就是數據庫用戶;而對于后臺管理數據庫的人來說,它要設計你所在數據庫中對應的表,還有負責一系列優化、并發、恢復工作,這類人就叫數據庫管理員,即DBA。
DBA主要的作用如下:
| 模式定義 | DBA利用DDL來書寫關于表的定義 |
| 存儲結構以及存取方式的定義 | |
| 模式和物理組織的修改 | DBA設計模式來適應不同的需求,并且選擇不同的物理結構來提高性能 |
| 數據訪問授權 | 對不同類型的權限,DBA可以給不同權限看不同的視圖 |
| 日常維護 | 主要是定期備份、監視磁盤空間、監視數據庫運行 |
總結
以上是生活随笔為你收集整理的数据库杂谈(一)——数据库基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10月Web服务器调查:Apache下降
- 下一篇: McAfee:较之中国美国黑客才最令人害