目錄
1.1.1 什么是關(guān)系型數(shù)據(jù)庫
1.1.3 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)RDBMS
數(shù)據(jù)庫簡而言之就是數(shù)據(jù)的集合,它是由文件系統(tǒng)存儲數(shù)據(jù)發(fā)展起來的,數(shù)據(jù)庫系統(tǒng)解決了多人數(shù)據(jù)庫讀取和寫入的并發(fā)性問題,同時它提供了事務(wù)的機制,使得存儲和管理數(shù)據(jù)庫數(shù)據(jù)更加安全可靠。數(shù)據(jù)庫系統(tǒng)讓用戶只處理邏輯數(shù)據(jù)層,比如表和視圖等。它使得用戶可以使用簡單易管理的方式來操作數(shù)據(jù)的數(shù)據(jù)。
數(shù)據(jù)技術(shù)經(jīng)過幾十年的發(fā)展,經(jīng)歷了人工管理、文件系統(tǒng)到現(xiàn)在的數(shù)據(jù)庫管理,提供了對數(shù)據(jù)更高級和更有效的管理。數(shù)據(jù)庫系統(tǒng)管理數(shù)據(jù)具有如下特點:
(1)使用數(shù)據(jù)模型表示復(fù)制的數(shù)據(jù)庫結(jié)構(gòu),用戶可以使用實體關(guān)系模型對數(shù)據(jù)進行建模,不僅可以表達數(shù)據(jù)本身,還可以描述數(shù)據(jù)之間的關(guān)系,這使得存儲在數(shù)據(jù)庫中的數(shù)據(jù)更容易理解和維護。
(2)數(shù)據(jù)系統(tǒng)將數(shù)據(jù)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)分離,用戶可以簡單地使用邏輯結(jié)構(gòu)操作數(shù)據(jù)庫,而不用考慮物理存儲結(jié)構(gòu),簡化了數(shù)據(jù)庫操作的復(fù)雜性。一般來說,一個數(shù)據(jù)庫系統(tǒng)可以分為如圖1.1所示的3級。
(3)數(shù)據(jù)庫系統(tǒng)提供了數(shù)據(jù)的控制功能,他提供了多用戶并發(fā)機制,防止數(shù)據(jù)庫數(shù)據(jù)被非法更改。數(shù)據(jù)庫系統(tǒng)會提供數(shù)據(jù)的備份和恢復(fù)功能,可以避免出現(xiàn)災(zāi)難性時間導(dǎo)致的數(shù)據(jù)丟失。數(shù)據(jù)提供數(shù)據(jù)完整性功能,并且提供了必要的安全性機制。
關(guān)系型數(shù)據(jù)庫系統(tǒng)是近30年來數(shù)據(jù)庫系統(tǒng)的主流模型,他使用數(shù)據(jù)之間的關(guān)系模型來存儲和管理數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫的模型建立與20世紀(jì)70年代,美國的E.F.Codd發(fā)表了一遍名為《大型共享數(shù)據(jù)庫的數(shù)據(jù)關(guān)系模型》的論文,他定義了一個基于數(shù)學(xué)幾何理論的關(guān)系模型,關(guān)系型數(shù)據(jù)庫是一個符合關(guān)系模型的數(shù)據(jù)庫。
●注意:《大型共享數(shù)據(jù)庫的數(shù)據(jù)關(guān)系模型》已經(jīng)具有簡體中文版本,感興趣的用戶可以通過湊所引擎了解關(guān)于這邊論文的詳細信息。
在現(xiàn)實世界匯總,大量的數(shù)據(jù)都是具有一些相關(guān)性的,關(guān)系型數(shù)據(jù)庫系統(tǒng)就是更具數(shù)據(jù)的關(guān)系對數(shù)據(jù)進行結(jié)構(gòu)化的組織和存儲。對關(guān)系型數(shù)據(jù)庫的定義簡而言之就是:使用關(guān)系或二維表存儲信息。二維表是由行(也可以稱為元組)和列(也看可以稱為屬性)組成的,通常簡稱為表或者是關(guān)系型數(shù)據(jù)庫的實體。表中的每一行都具有相同的列集,因此可以將關(guān)系型數(shù)據(jù)稱為存儲在關(guān)系表中的數(shù)據(jù)庫。
舉個例子,為了存儲人事部門的數(shù)據(jù),可以創(chuàng)建一個員工表和一個部門表,由于員工表中的每個人員信息都是屬于部門,因此關(guān)系型數(shù)據(jù)庫還會存儲員工表和部門之間的引用關(guān)系。當(dāng)沒有使用關(guān)系型數(shù)據(jù)庫系統(tǒng)時,認識部門可能使用Excel創(chuàng)建一張人員表,示意結(jié)構(gòu)如圖1.2所示。
人事部門還會創(chuàng)建一張部門表,部門表中包含了部門的名稱、部門的位置部門的編號等信息,人員表的所屬部門應(yīng)該是要與部門表中的部門名稱保持一致,否則數(shù)據(jù)庫中的數(shù)據(jù)庫就會出現(xiàn)混亂,如圖1.3所示。
關(guān)系型數(shù)據(jù)庫出了存儲這些基本的數(shù)據(jù)信息外,還會存儲表之間的關(guān)系。關(guān)系型數(shù)據(jù)會維護這些關(guān)系的完整性,一遍提供更加結(jié)構(gòu)話的存儲方式。
數(shù)據(jù)庫主要用來存儲現(xiàn)實世界中的數(shù)據(jù),關(guān)系型數(shù)據(jù)庫通過使用表盒關(guān)系來存儲數(shù)據(jù),可以保存現(xiàn)實世界中的數(shù)據(jù)集合。實體關(guān)系模型對現(xiàn)實世界進行抽象,得出實體類型和實體間的關(guān)系,用來描述現(xiàn)實世界中數(shù)據(jù)的組成結(jié)構(gòu)。在構(gòu)建了實體關(guān)系后,一般會使用實體關(guān)系的圖來清晰地表達出實體關(guān)系的機構(gòu)。實體關(guān)系圖(Entity Relationship Diagram)是指提供了表實體、屬性和關(guān)系的圖形化表示方式,用來描述現(xiàn)實世界的概念模型,簡稱為E-R圖。
實體關(guān)系模型具有3個核心的元素,在進行數(shù)據(jù)庫的分析和設(shè)計時,需要認真地理解這幾個元素的具體含義及在E-R圖匯總的表現(xiàn)形式,分別如下所示。
●實體(Entity):是具有相同特征和屬性的顯示世界事務(wù)的抽象,在E-R圖匯總用矩形表示,矩形框內(nèi)注明實體的名稱。比如員工張三、員工趙七都是實體。
●屬性(Attribute):是指實體具有的特征,一個實體可以包含若干個實體。在E-R圖匯總屬性用橢圓形表示,并使用線條將其與相應(yīng)的實體連接起來。比如員工具有工號、入職日期等屬性。
●關(guān)系(Relationship):是指實體之間的像話聯(lián)系的方式,一般具有一對一關(guān)系(1:1)、一對多關(guān)系(1:N)、多對多關(guān)系(M:N)。
以認識管理系統(tǒng)的人員信息和員工請假為例,通過使用實體關(guān)系建模,回執(zhí)了如圖1.4所示的ER實體關(guān)系圖。
由圖1.4可以發(fā)現(xiàn),人員和請假單這兩個實體使用矩形表示,實體的屬性使用橢圓形表示,實體與實體之間的關(guān)系使用另行表示。人員實體與請假單實體居勇1對多的關(guān)系,因此在另行附近使用1和N表示。
一般來說,數(shù)據(jù)庫設(shè)計人員對數(shù)據(jù)庫進行需求分析時,與數(shù)據(jù)庫的用戶進行溝通,數(shù)據(jù)庫的設(shè)計人員可能需要回執(zhí)多種不同類型的圖來表單關(guān)系型數(shù)據(jù)庫的存儲結(jié)構(gòu),在邏輯設(shè)計階段回執(zhí)E-R關(guān)系圖,可以使用Visio、PowerDesigner或者是ERWin Data Modeler等軟件來實現(xiàn)。
數(shù)據(jù)庫管理系統(tǒng)是基于關(guān)系型數(shù)據(jù)庫模型創(chuàng)建的計算機軟件程序,其英文全稱是Relational Database Management System,簡稱RDBMS。數(shù)據(jù)庫管理系統(tǒng)是位于操作系統(tǒng)和用戶(或者是基于數(shù)據(jù)庫的應(yīng)用程序)之間的一組數(shù)據(jù)庫管理程序,它提供了對數(shù)據(jù)庫中的數(shù)據(jù)進行統(tǒng)一管理和控制的功能,對歸根到底,數(shù)據(jù)庫中的數(shù)據(jù)是以文件的形式存放在操作系統(tǒng)中的,數(shù)據(jù)庫管理系統(tǒng)提供了數(shù)據(jù)庫和高級組織形成,他提供了對數(shù)據(jù)庫中的數(shù)據(jù)的統(tǒng)一管理和控制的功能,數(shù)據(jù)庫管理系統(tǒng)與用戶的示意圖如圖1.5所示。
數(shù)據(jù)庫管理系統(tǒng)負責(zé)對數(shù)據(jù)庫進行全方位的管理,他包含了如圖1.6所示的幾項職責(zé)。
如圖1.6所示,一個數(shù)據(jù)庫管理系統(tǒng)通常要提供如下所示的幾項功能。
●定義數(shù)據(jù)庫結(jié)構(gòu):DBMS提供數(shù)據(jù)定義語言來定義(DDL)數(shù)據(jù)庫結(jié)構(gòu),用來搭建數(shù)據(jù)庫框架,并被保存在數(shù)據(jù)字典中。
●存取數(shù)據(jù)庫內(nèi)容:DBMS提供數(shù)據(jù)操作語言(DML),實現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的基本存取操作——檢索、插入、修改和刪除。
●數(shù)據(jù)庫的運行管理:DBMS提供數(shù)據(jù)控制功能,即數(shù)據(jù)的安全性、完整性和并發(fā)控制等對數(shù)據(jù)庫運行進行有效的控制和管理,以確保數(shù)據(jù)正確有效。
●數(shù)據(jù)庫的建立和維護:包括數(shù)據(jù)庫出事數(shù)據(jù)的裝入,數(shù)據(jù)的轉(zhuǎn)儲、恢復(fù)、重組織,系統(tǒng)性能監(jiān)視、分析等功能。
●數(shù)據(jù)庫的傳輸:DBMS提供處理數(shù)據(jù)的傳輸,實現(xiàn)用戶程序與DBMS之間的通信,通常與操作系統(tǒng)協(xié)調(diào)完成。
有了關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)人員就可以在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、存取數(shù)據(jù)庫內(nèi)容、對數(shù)據(jù)庫進行備份和管理,只需要理解常用的系統(tǒng)相關(guān)的操作,而不用去研究關(guān)系型數(shù)據(jù)庫系統(tǒng)內(nèi)部深奧難懂的數(shù)學(xué)方方面的理論知識。
目前比較常見的DBMS有Oracle、SQL Server、Mysql、DB2等,它們都使用關(guān)系型數(shù)據(jù)庫模型作為基礎(chǔ)構(gòu)建的軟件,它們建立在關(guān)系數(shù)據(jù)模型的基礎(chǔ)之上,通過一系列相關(guān)的表和其他數(shù)據(jù)庫,對象把現(xiàn)實世界中存在的事務(wù)及事務(wù)之間的聯(lián)系用數(shù)據(jù)庫對象,比如表、視圖、索引、關(guān)系加以存儲,使之為數(shù)據(jù)庫的用戶提供規(guī)范化的信息。
為了便于管理關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng)使用一種稱為SQL的聲明性語言。SQL的全稱是結(jié)構(gòu)化查詢語言(Structured Query Language),是一種對關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)進行定義和操作的句法。他獨立于數(shù)據(jù)庫管理系統(tǒng),并且以經(jīng)被國際標(biāo)準(zhǔn)化組織指定為一種操作數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。SQL語言可以操作和管理數(shù)據(jù)庫,各種數(shù)據(jù)庫管理廠商使用SQL標(biāo)準(zhǔn)來定制自己的數(shù)據(jù)庫管理方式,因此它對于所有的數(shù)據(jù)庫管理系統(tǒng)來說是通用的。
●注意:由于不同的數(shù)據(jù)庫廠商對SQL語言的支持與標(biāo)準(zhǔn)仍然存在著細微的不同,因此在使用時必須要參加各個數(shù)據(jù)庫廠商提供的SQL操作文檔。
SQL語言是一種高級的非過程化編程語言。SQL語言允許用戶不了解數(shù)據(jù)庫的底層結(jié)構(gòu)和具體的操作方式,只需要在一個標(biāo)準(zhǔn)化的、較高層次的數(shù)據(jù)結(jié)構(gòu)上進行工作,這就大大簡化了數(shù)據(jù)庫的操作方式,同時因為不與數(shù)據(jù)庫、硬件等緊密耦合,因此也使得基于數(shù)據(jù)庫的應(yīng)用系統(tǒng)具有很好的可移值性。其操作示意如圖1.7 所示。
由圖中可以看到,任何客戶端通過SQL語言來與數(shù)據(jù)庫管理系統(tǒng)進行通信,通過向服務(wù)器端發(fā)送SQL語句,數(shù)據(jù)庫管理系統(tǒng)將這些SQL語句轉(zhuǎn)換為實際的對數(shù)據(jù)庫數(shù)據(jù)進行操作的指令來對數(shù)據(jù)庫進行管理,這簡化了數(shù)據(jù)庫管理系統(tǒng)的復(fù)雜程度,提高了用戶對數(shù)據(jù)庫的使用效率。
SQL語言主要又分為如下6大類。
(1)數(shù)據(jù)查詢語言(DQL) :也稱為“數(shù)據(jù)檢索語句”,用于從表中獲得數(shù)據(jù),確定數(shù)據(jù)怎樣在應(yīng)用程序給出。關(guān)鍵字SELECT是DQL ( 也是所有SQL)用得最多的語句,其他DQL常用的關(guān)鍵字有WHERE、ORDER BY、GROUP BY和HAVING.這些DQL關(guān)鍵字常與其他類型的SQL語句一起使用。
(2)數(shù)據(jù)操作語言(DML) :分別用于添加、修改和刪除表中的行。也稱為動作查詢語言。
(3)事務(wù)處理語言(TPL) :能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION、COMMIT和ROLLBACK.
(4)數(shù)據(jù)控制語言(DCL) :通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數(shù)據(jù)庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單各列的訪問。
(5)數(shù)據(jù)定義語言(DDL):在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREAT TABLE或DROP(5)數(shù)據(jù)定義語言(DDL):在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREAT TABLE或DROP也是動作查詢的一部分。
(6)指針控制語言(CCL) :用于對一個或多個表的單獨行進行操作,比如DECLARECURSOR、FETCH INTO和UPDATE WHERE CURRENT等語句。
可以看到這些SQL語句基本上涵蓋了進行數(shù)據(jù)庫操作的方方面面,基本上學(xué)習(xí)數(shù)據(jù)庫操作多數(shù)時間都是在使用SQL語句進行管理,因此對于一名合格的DBA來說,熟練地掌握SQL語言是非常有必要的。