- 數(shù)據(jù)庫系統(tǒng)教程(第2版)
- 何玉潔
- 7380字
- 2020-06-24 18:05:59
1.3 數(shù)據(jù)管理技術(shù)的發(fā)展
數(shù)據(jù)庫技術(shù)是應(yīng)數(shù)據(jù)管理任務(wù)的需要而產(chǎn)生和發(fā)展的。數(shù)據(jù)管理是指對數(shù)據(jù)進(jìn)行分類、組織、編碼、存儲、檢索和維護(hù),它是數(shù)據(jù)處理的核心,而數(shù)據(jù)處理則是指對各種數(shù)據(jù)的收集、存儲、加工和傳播等一系列活動的總和。
自計算機(jī)產(chǎn)生之后,人們就希望用它來幫助我們對數(shù)據(jù)進(jìn)行存儲和管理。最初對數(shù)據(jù)的管理是以文件方式進(jìn)行的,也就是用戶通過編寫應(yīng)用程序來實(shí)現(xiàn)對數(shù)據(jù)的存儲和管理。后來,隨著數(shù)據(jù)量越來越大,人們對數(shù)據(jù)的要求越來越多,希望達(dá)到的目的也越來越復(fù)雜,文件管理方式已經(jīng)很難滿足人們對數(shù)據(jù)的需求,由此產(chǎn)生了數(shù)據(jù)庫技術(shù),也就是用數(shù)據(jù)庫來存儲和管理數(shù)據(jù)。數(shù)據(jù)管理技術(shù)的發(fā)展因此也就經(jīng)歷了文件管理和數(shù)據(jù)庫管理兩個階段。
本節(jié)將介紹文件管理和數(shù)據(jù)庫管理在管理數(shù)據(jù)上的主要差別。
1.3.1 文件管理
理解今日數(shù)據(jù)庫特征的最好辦法是了解在數(shù)據(jù)庫技術(shù)產(chǎn)生之前,人們是如何通過文件的方式對數(shù)據(jù)進(jìn)行管理的。
20世紀(jì)50年代后期到60年代中期,計算機(jī)的硬件方面已經(jīng)有了磁盤等直接存取的存儲設(shè)備,軟件方面,操作系統(tǒng)中已經(jīng)有了專門的數(shù)據(jù)管理軟件,一般稱為文件管理系統(tǒng)。文件管理系統(tǒng)把數(shù)據(jù)組織成相互獨(dú)立的數(shù)據(jù)文件,利用“按文件名訪問,按記錄進(jìn)行存取”的管理技術(shù),可以對文件中的數(shù)據(jù)進(jìn)行修改、插入和刪除等操作。
在出現(xiàn)程序設(shè)計語言之后,開發(fā)人員不但可以創(chuàng)建自己的文件并將數(shù)據(jù)保存在自己定義的文件中,而且還可以編寫應(yīng)用程序來處理文件中的數(shù)據(jù),即編寫應(yīng)用程序來定義文件的結(jié)構(gòu),實(shí)現(xiàn)對文件內(nèi)容的插入、刪除、修改和查詢操作。當(dāng)然,真正實(shí)現(xiàn)磁盤文件的物理存取操作的還是操作系統(tǒng)中的文件管理系統(tǒng),應(yīng)用程序只是告訴文件管理系統(tǒng)對哪個文件的哪些數(shù)據(jù)進(jìn)行哪些操作。我們將由開發(fā)人員定義存儲數(shù)據(jù)的文件及文件結(jié)構(gòu),并借助文件管理系統(tǒng)的功能編寫訪問這些文件的應(yīng)用程序,以實(shí)現(xiàn)對用戶數(shù)據(jù)的處理的方式稱為文件管理。在本章后面的討論中,為描述簡單,我們將忽略操作系統(tǒng)中的文件管理系統(tǒng),假定應(yīng)用程序直接對磁盤文件進(jìn)行操作。
用戶通過編寫應(yīng)用程序來管理存儲在自定義文件中的數(shù)據(jù)的操作模式如圖1-2所示。

圖1-2 用文件存儲數(shù)據(jù)的操作模式
假設(shè)某學(xué)校要用文件的方式保存學(xué)生及其選課的數(shù)據(jù),并針對這些數(shù)據(jù)文件構(gòu)建對學(xué)生及選課情況進(jìn)行管理的系統(tǒng)。此系統(tǒng)主要實(shí)現(xiàn)兩部分功能:學(xué)生基本信息管理和學(xué)生選課情況管理。假設(shè)教務(wù)部門管理學(xué)生選課情況,各系管理自己的學(xué)生基本信息。學(xué)生基本信息管理只涉及學(xué)生的基本信息數(shù)據(jù),假設(shè)這些數(shù)據(jù)保存在F1文件中;學(xué)生選課情況管理涉及學(xué)生的部分基本信息、課程基本信息和學(xué)生選課信息,假設(shè)文件F2和F3分別保存課程基本信息和學(xué)生選課信息的數(shù)據(jù)。
設(shè)A1為實(shí)現(xiàn)“學(xué)生基本信息管理”功能的應(yīng)用程序,A2為實(shí)現(xiàn)“學(xué)生選課管理”功能的應(yīng)用程序。圖1-3所示為用文件存儲并管理數(shù)據(jù)的實(shí)現(xiàn)示例(圖中省略了操作系統(tǒng)部分)。

圖1-3 用文件存儲并管理數(shù)據(jù)的實(shí)現(xiàn)示例
假設(shè)文件F1、F2和F3分別包含以下信息。
F1文件:學(xué)號、姓名、性別、出生日期、聯(lián)系電話、所在系、專業(yè)、班號。
F2文件:課程號、課程名、授課學(xué)期、學(xué)分、課程性質(zhì)。
F3文件:學(xué)號、姓名、所在系、專業(yè)、課程號、課程名、修課類型、修課時間、考試成績。
我們將文件中所包含的每一個子項(xiàng)稱為文件結(jié)構(gòu)中的“字段”或“列”,將每一行數(shù)據(jù)稱為一個“記錄”。
“學(xué)生選課管理”的處理過程大致為:在學(xué)生選課管理中,若有學(xué)生選課,則先查F1文件,判斷有無此學(xué)生;若有,則再訪問F2文件,判斷其所選的課程是否存在;若一切符合規(guī)則,就將學(xué)生選課信息寫到F3文件中。
這看似很好,但仔細(xì)分析一下,就會發(fā)現(xiàn)用文件方式管理數(shù)據(jù)有以下缺點(diǎn)。
① 編寫應(yīng)用程序不方便。應(yīng)用程序編寫者必須清楚地了解所用文件的邏輯及物理結(jié)構(gòu),如文件中包含多少個字段,每個字段的數(shù)據(jù)類型,采用何種邏輯結(jié)構(gòu)和物理存儲結(jié)構(gòu)。操作系統(tǒng)只提供了打開、關(guān)閉、讀、寫等幾個底層的文件操作命令,而對文件的查詢、修改等操作,都必須在應(yīng)用程序中編程實(shí)現(xiàn)。這樣就容易造成各應(yīng)用程序在功能上的重復(fù),如圖1-3所示的“學(xué)生基本信息管理”和“學(xué)生選課管理”都要對F1文件進(jìn)行操作,而共享這兩個功能相同的操作卻很難。
② 數(shù)據(jù)冗余不可避免。由于A2應(yīng)用程序需要在學(xué)生選課信息文件(F3文件)中包含學(xué)生的一些基本信息,如學(xué)號、姓名、所在系、專業(yè)等,而這些信息同樣包含在學(xué)生信息文件(F1文件)中,因此,F(xiàn)3文件和F1文件中存在重復(fù)數(shù)據(jù),從而造成數(shù)據(jù)的重復(fù),稱為數(shù)據(jù)冗余。
數(shù)據(jù)冗余帶來的問題不僅僅是存儲空間的浪費(fèi)(其實(shí),隨著計算機(jī)硬件技術(shù)的飛速發(fā)展,存儲容量不斷擴(kuò)大,空間問題已經(jīng)不是我們關(guān)注的主要問題),更為嚴(yán)重的是造成了數(shù)據(jù)的不一致(inconsistency)。例如,某個學(xué)生所學(xué)的專業(yè)發(fā)生了變化,我們一般只會想到在F1文件中進(jìn)行修改,而往往忘記了在F3文件中應(yīng)做同樣的修改。由此就造成了同一名學(xué)生在F1文件和F3文件中的“專業(yè)”不一樣,也就是數(shù)據(jù)不一致。當(dāng)發(fā)生數(shù)據(jù)不一致時,人們不能判定哪個數(shù)據(jù)是正確的,尤其是當(dāng)系統(tǒng)中存在多處數(shù)據(jù)冗余時,更是如此。這樣,數(shù)據(jù)就失去了其可信性。
文件本身并不具備維護(hù)數(shù)據(jù)一致性的功能,這些功能完全要由用戶(應(yīng)用程序開發(fā)者)負(fù)責(zé)維護(hù)。這在簡單的系統(tǒng)中還可以勉強(qiáng)應(yīng)對,但在復(fù)雜的系統(tǒng)中,若讓應(yīng)用程序開發(fā)者來保證數(shù)據(jù)的一致性,幾乎是不可能的。
③ 應(yīng)用程序依賴性。就文件管理而言,應(yīng)用程序?qū)?shù)據(jù)的操作依賴于存儲數(shù)據(jù)的文件的結(jié)構(gòu)。定義文件和記錄的結(jié)構(gòu)通常是應(yīng)用程序代碼的一部分,如C程序的struct。文件結(jié)構(gòu)的每一次修改,如添加字段、刪除字段,甚至修改字段的長度(如電話號碼從7位擴(kuò)到8位),都將導(dǎo)致應(yīng)用程序的修改,因?yàn)樵诖蜷_文件進(jìn)行數(shù)據(jù)讀取時,必須將文件記錄中不同字段的值對應(yīng)到應(yīng)用程序的變量中。隨著應(yīng)用環(huán)境和需求的變化,修改文件的結(jié)構(gòu)不可避免,這些都需要在應(yīng)用程序中做相應(yīng)的修改,而(頻繁)修改應(yīng)用程序是很麻煩的。人們首先要熟悉原有程序,修改后還需要對程序進(jìn)行測試、安裝等;甚至修改了文件的存儲位置或者文件名,也需要對應(yīng)用程序進(jìn)行修改,這顯然給程序的維護(hù)帶來很多麻煩。
所有這些都是由于應(yīng)用程序?qū)ξ募慕Y(jié)構(gòu)以及文件的物理特性過分依賴造成的,換句話說,用文件管理數(shù)據(jù)時,其數(shù)據(jù)獨(dú)立性(data independence)很差。
④ 不支持對文件的并發(fā)訪問。在現(xiàn)代計算機(jī)系統(tǒng)中,為了有效利用計算機(jī)資源,一般都允許同時運(yùn)行多個應(yīng)用程序(尤其是在現(xiàn)在的多任務(wù)操作系統(tǒng)環(huán)境中)。文件最初是作為程序的附屬數(shù)據(jù)出現(xiàn)的,它一般不支持多個應(yīng)用程序同時對同一個文件進(jìn)行訪問。回憶一下,某個用戶打開了一個Word文件,當(dāng)?shù)诙€用戶在第一個用戶未關(guān)閉此文件前打開此文件時,會得到什么信息呢?他只能以只讀方式打開此文件,而不能在第一個用戶打開的同時對此文件進(jìn)行修改。再回憶一下,如果用某種程序設(shè)計語言編寫一個對某文件中內(nèi)容進(jìn)行修改的程序,其過程是先以寫的方式打開文件,然后修改其內(nèi)容,最后再關(guān)閉文件。在關(guān)閉文件之前,不管是在其他的程序中,還是在同一個程序中,都不允許再次打開此文件,這就是文件管理方式不支持并發(fā)訪問的含義。
對于以數(shù)據(jù)為中心的系統(tǒng)來說,必須支持多個用戶對數(shù)據(jù)的并發(fā)訪問,否則就不會有這么多的火車或飛機(jī)的訂票點(diǎn),也不會有這么多的銀行營業(yè)網(wǎng)點(diǎn)。
⑤ 數(shù)據(jù)間聯(lián)系弱。當(dāng)用文件管理數(shù)據(jù)時,文件與文件之間是彼此獨(dú)立、毫不相干的,文件之間的聯(lián)系必須通過程序來實(shí)現(xiàn)。例如,對上述的F1文件和F3文件,F(xiàn)3文件中的學(xué)號、姓名等學(xué)生的基本信息必須是F1文件中已經(jīng)存在的(即選課的學(xué)生必須是已經(jīng)存在的學(xué)生);同樣,F(xiàn)3文件中的課程號等與課程有關(guān)的基本信息也必須存在于F2文件中(即學(xué)生選的課程也必須是已經(jīng)存在的課程)。這些數(shù)據(jù)之間的聯(lián)系是實(shí)際應(yīng)用當(dāng)中所要求的很自然的聯(lián)系,但文件本身不具備自動實(shí)現(xiàn)這些聯(lián)系的功能,我們必須通過編寫應(yīng)用程序,即手工地建立這些聯(lián)系。這不但增加了編寫代碼的工作量和復(fù)雜度,而且當(dāng)聯(lián)系很復(fù)雜時,也難以保證其正確性。因此,用文件管理數(shù)據(jù)時很難反映現(xiàn)實(shí)世界事物間客觀存在的聯(lián)系。
⑥ 難以滿足不同用戶對數(shù)據(jù)的需求。不同的用戶(數(shù)據(jù)使用者)關(guān)注的數(shù)據(jù)往往不同。例如,對于學(xué)生基本信息,負(fù)責(zé)分配學(xué)生宿舍的部門可能只關(guān)心學(xué)生的學(xué)號、姓名、性別和班號,而教務(wù)部門可能關(guān)心的是學(xué)號、姓名、所在系和專業(yè)。
若多個不同用戶希望看到的是學(xué)生的不同基本信息,那么就需要為每個用戶建立一個文件,這勢必造成很多的數(shù)據(jù)冗余。我們希望的是,用戶關(guān)心哪些信息就為他生成哪些信息,將用戶不關(guān)心的數(shù)據(jù)屏蔽,使用戶感覺不到其他信息的存在。
可能還會有一些用戶,其需要的信息來自于多個不同的文件。例如,假設(shè)各班班主任關(guān)心的是:班號、學(xué)號、姓名、課程名、學(xué)分、考試成績等。這些信息涉及了3個文件:從F1文件中得到“班號”,從F2文件中得到“學(xué)分”,從F3文件中得到“考試成績”;而“學(xué)號”“姓名”可以從F1文件或F3文件中得到,“課程名”可以從F2文件或F3文件中得到。在生成結(jié)果數(shù)據(jù)時,必須對從3個文件中讀取的數(shù)據(jù)進(jìn)行比較,然后組合成一行有意義的數(shù)據(jù)。例如,將從F1文件中讀取的學(xué)號與從F3文件中讀取的學(xué)號進(jìn)行比較,學(xué)號相同時,才可以將F1文件中的“班號”與F3文件中的當(dāng)前記錄所對應(yīng)的學(xué)號和姓名組合起來,之后,還需要將組合結(jié)果與F2文件中的內(nèi)容進(jìn)行比較,找出課程號相同的課程的學(xué)分,再與已有的結(jié)果組合起來。然后再從組合后的數(shù)據(jù)中提取出用戶需要的信息。如果數(shù)據(jù)量很大,涉及的文件比較多時,這個過程非常復(fù)雜。因此,這種復(fù)雜信息的查詢,在按文件管理數(shù)據(jù)的方式中是很難處理的。
⑦ 無安全控制功能。在文件管理方式中,很難控制某個人對文件能夠進(jìn)行的操作,如只允許某個人查詢和修改數(shù)據(jù),但不能刪除數(shù)據(jù),或者對文件中的某個或者某些字段不能修改等。而在實(shí)際應(yīng)用中,數(shù)據(jù)的安全性是非常重要且不可忽視的。例如,在學(xué)生選課管理中,我們不允許學(xué)生修改其考試成績,但允許他們查詢自己的考試成績。在銀行系統(tǒng)中,更是不允許一般用戶修改其存款數(shù)額。
人們對數(shù)據(jù)需求的增加,迫切需要對數(shù)據(jù)進(jìn)行有效、科學(xué)、正確、方便的管理。針對文件管理方式的這些缺陷,人們逐步開發(fā)出了以統(tǒng)一管理和共享數(shù)據(jù)為主要特征的數(shù)據(jù)庫管理系統(tǒng)。
1.3.2 數(shù)據(jù)庫管理
20世紀(jì)60年代后期以來,計算機(jī)管理數(shù)據(jù)的規(guī)模越來越大,應(yīng)用范圍越來越廣泛,數(shù)據(jù)量急劇增加,同時多種應(yīng)用同時共享數(shù)據(jù)集合的要求也越來越強(qiáng)烈。
隨著大容量磁盤的出現(xiàn),硬件價格的不斷下降,軟件價格的不斷上升,編制和維護(hù)系統(tǒng)軟件和應(yīng)用程序的成本相應(yīng)地不斷增加。在數(shù)據(jù)處理方式上,對聯(lián)機(jī)實(shí)時處理的需求越來越多,同時開始提出和考慮分布式處理技術(shù)。在這種背景下,以文件方式管理數(shù)據(jù)已經(jīng)不能滿足應(yīng)用的需求,于是出現(xiàn)了新的管理數(shù)據(jù)的技術(shù)——數(shù)據(jù)庫技術(shù),同時出現(xiàn)了統(tǒng)一管理數(shù)據(jù)的專門軟件——數(shù)據(jù)庫管理系統(tǒng)。
從1.3.1小節(jié)的介紹可以看到,在數(shù)據(jù)庫管理系統(tǒng)出現(xiàn)前,人們對數(shù)據(jù)的操作是通過直接針對數(shù)據(jù)文件編寫應(yīng)用程序?qū)崿F(xiàn)的,這種模式會產(chǎn)生很多問題。有了數(shù)據(jù)庫管理系統(tǒng)后,人們對數(shù)據(jù)的操作全部是通過數(shù)據(jù)庫管理系統(tǒng)實(shí)現(xiàn)的,而且應(yīng)用程序的編寫也不再直接針對存放數(shù)據(jù)的文件。有了數(shù)據(jù)庫技術(shù)和數(shù)據(jù)庫管理系統(tǒng)后,人們對數(shù)據(jù)的操作模式發(fā)生了根本的變化,如圖1-4所示。

圖1-4 用數(shù)據(jù)庫進(jìn)行管理的操作模式
比較圖1-2和圖1-4,可以看到主要區(qū)別有兩個:第一個是在操作系統(tǒng)和用戶應(yīng)用程序之間增加了一個系統(tǒng)軟件——數(shù)據(jù)庫管理系統(tǒng),使得用戶對數(shù)據(jù)的操作都是通過數(shù)據(jù)庫管理系統(tǒng)實(shí)現(xiàn)的;第二個是有了數(shù)據(jù)庫管理系統(tǒng)后,用戶不再需要有數(shù)據(jù)文件的概念,即不再需要知道數(shù)據(jù)文件的邏輯和物理結(jié)構(gòu)及物理存儲位置,只需知道存放數(shù)據(jù)的場所——數(shù)據(jù)庫即可。
本質(zhì)上講,即使在有了數(shù)據(jù)庫技術(shù)后,數(shù)據(jù)最終還是以文件的形式存儲在磁盤上的(這點(diǎn)我們將在本書附錄A中的“創(chuàng)建數(shù)據(jù)庫”部分可以體會到),只是這時對物理數(shù)據(jù)文件的存取和管理是由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一實(shí)現(xiàn)的,而不再是每個用戶通過編寫應(yīng)用程序?qū)崿F(xiàn)。數(shù)據(jù)庫和數(shù)據(jù)文件既有區(qū)別,又有聯(lián)系,它們之間的關(guān)系類似于單位的名稱和地址之間的關(guān)系。單位地址代表了單位的實(shí)際存在位置,單位名稱是單位的邏輯代表。而且,一個數(shù)據(jù)庫可以包含多個數(shù)據(jù)文件,就像一個單位可以有多個不同的地址一樣(就像我們現(xiàn)在的很多大學(xué),都是一個學(xué)校有多個校址),每個數(shù)據(jù)文件存儲數(shù)據(jù)庫的部分?jǐn)?shù)據(jù)。不管一個數(shù)據(jù)庫包含多少個數(shù)據(jù)文件,對用戶來說,他只針對數(shù)據(jù)庫進(jìn)行操作,無需對數(shù)據(jù)文件進(jìn)行操作。這種模式極大地簡化了用戶對數(shù)據(jù)的訪問。
有了數(shù)據(jù)庫技術(shù)后,用戶只需要知道存放所需數(shù)據(jù)的數(shù)據(jù)庫名,就可以對數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)文件中的數(shù)據(jù)進(jìn)行操作。將對數(shù)據(jù)庫的操作轉(zhuǎn)換為對物理數(shù)據(jù)文件的操作是由數(shù)據(jù)庫管理系統(tǒng)自動實(shí)現(xiàn)的,用戶不需要知道,也不需要干預(yù)。
對于1.3.1小節(jié)中列舉的學(xué)生基本信息管理和學(xué)生選課管理兩個子系統(tǒng),如果使用數(shù)據(jù)庫技術(shù)來實(shí)現(xiàn),其實(shí)現(xiàn)方式如圖1-5所示。

圖1-5 用數(shù)據(jù)庫存儲數(shù)據(jù)的實(shí)現(xiàn)示例
與用文件管理數(shù)據(jù)相比,用數(shù)據(jù)庫技術(shù)管理數(shù)據(jù)具有以下特點(diǎn)。
① 相互關(guān)聯(lián)的數(shù)據(jù)集合。在用數(shù)據(jù)庫技術(shù)管理數(shù)據(jù)時,所有相關(guān)的數(shù)據(jù)都被存儲在一個數(shù)據(jù)庫中,它們作為一個整體定義,因此可以很方便地表達(dá)數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系。例如,學(xué)生基本信息中的“學(xué)號”與學(xué)生選課管理中的“學(xué)號”,這兩個學(xué)號之間是有關(guān)聯(lián)關(guān)系的,即學(xué)生選課中的“學(xué)號”的取值范圍在學(xué)生基本信息的“學(xué)號”取值范圍內(nèi)。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系是通過參照完整性實(shí)現(xiàn)的。
② 較少的數(shù)據(jù)冗余。由于數(shù)據(jù)被統(tǒng)一管理,因此可以從全局著眼,對數(shù)據(jù)進(jìn)行最合理的組織。例如,將1.3.1小節(jié)中文件F1、F2和F3的重復(fù)數(shù)據(jù)挑選出來,進(jìn)行合理的管理,這樣就可以形成以下所示的幾部分信息。
學(xué)生基本信息:學(xué)號、姓名、性別、出生日期、聯(lián)系電話、所在系、專業(yè)、班號。
課程基本信息:課程號、課程名、授課學(xué)期、學(xué)分、課程性質(zhì)。
學(xué)生選課信息:學(xué)號、課程號、修課類型、修課時間、考試成績。
在關(guān)系數(shù)據(jù)庫中,可以將每一類信息存儲在一個表中(關(guān)系數(shù)據(jù)庫的概念將在后邊介紹),重復(fù)的信息只存儲一份,當(dāng)在學(xué)生選課中需要學(xué)生的姓名等其他信息時,根據(jù)學(xué)生選課中的學(xué)號,可以很容易地在學(xué)生基本信息中找到此學(xué)號對應(yīng)的姓名等信息。因此,消除數(shù)據(jù)的重復(fù)存儲不影響對信息的提取,同時還可以避免由于數(shù)據(jù)重復(fù)存儲而造成的數(shù)據(jù)不一致問題。例如,當(dāng)某個學(xué)生所學(xué)的專業(yè)發(fā)生變化時,在“學(xué)生基本信息”一個地方進(jìn)行修改即可。
同1.3.1小節(jié)中的問題一樣,當(dāng)所需的信息來自不同地方,如(班號,學(xué)號,姓名,課程名,學(xué)分,考試成績)信息,這些信息需要從三個地方(關(guān)系數(shù)據(jù)庫為三張表)得到,這種情況下,也需要對信息進(jìn)行適當(dāng)?shù)慕M合,即學(xué)生選課中的學(xué)號只能與學(xué)生基本信息中學(xué)號相同的信息組合在一起。同樣,學(xué)生選課中的課程號也必須與課程基本信息中課程號相同的信息組合在一起。過去在文件管理方式中,這個工作是由開發(fā)者編程實(shí)現(xiàn)的,而現(xiàn)在有了數(shù)據(jù)庫管理系統(tǒng),這些煩瑣的工作完全交給了數(shù)據(jù)庫管理系統(tǒng)來完成。
因此,在用數(shù)據(jù)庫技術(shù)管理數(shù)據(jù)的系統(tǒng)中,避免數(shù)據(jù)冗余不會增加開發(fā)者的負(fù)擔(dān)。在關(guān)系數(shù)據(jù)庫中,避免數(shù)據(jù)冗余是通過關(guān)系規(guī)范化理論實(shí)現(xiàn)的。
③ 程序與數(shù)據(jù)相互獨(dú)立。在數(shù)據(jù)庫中,組成數(shù)據(jù)的數(shù)據(jù)項(xiàng)以及數(shù)據(jù)的存儲格式等信息都與數(shù)據(jù)存儲在一起,它們通過DBMS,而不是應(yīng)用程序來操作和管理,應(yīng)用程序不再需要處理文件和記錄的格式。
程序與數(shù)據(jù)相互獨(dú)立有兩方面的含義。一方面是當(dāng)數(shù)據(jù)的存儲方式發(fā)生變化時(這里包括邏輯存儲方式和物理存儲方式),如從鏈表結(jié)構(gòu)改為散列結(jié)構(gòu),或者是順序存儲和非順序存儲之間的轉(zhuǎn)換,應(yīng)用程序不必作任何修改。另一方面是當(dāng)數(shù)據(jù)所包含的數(shù)據(jù)項(xiàng)發(fā)生變化時,如增加或減少了一些數(shù)據(jù)項(xiàng),如果應(yīng)用程序與這些修改的數(shù)據(jù)項(xiàng)無關(guān),則不用修改應(yīng)用程序。這些變化都將由DBMS負(fù)責(zé)維護(hù)。大多數(shù)情況下,應(yīng)用程序并不知道,也不需要知道數(shù)據(jù)存儲方式或數(shù)據(jù)項(xiàng)已經(jīng)發(fā)生了變化。
在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)庫管理系統(tǒng)通過將數(shù)據(jù)劃分為三個層次來自動保證程序與數(shù)據(jù)相互獨(dú)立。第2章將詳細(xì)介紹數(shù)據(jù)的三個層次,也稱為三級模式結(jié)構(gòu)。
④ 保證數(shù)據(jù)安全、可靠。數(shù)據(jù)庫技術(shù)能夠保證數(shù)據(jù)庫中的數(shù)據(jù)是安全的和可靠的。它的安全控制機(jī)制可以有效地防止數(shù)據(jù)庫中的數(shù)據(jù)被非法使用和非法修改;其完整的備份和恢復(fù)機(jī)制可以保證當(dāng)數(shù)據(jù)遭到破壞時(由軟件或硬件故障引起的)能夠很快地將數(shù)據(jù)庫恢復(fù)到正確的狀態(tài),并使數(shù)據(jù)不丟失或丟失很少,從而保證系統(tǒng)能夠連續(xù)、可靠地運(yùn)行。保證數(shù)據(jù)的安全是通過數(shù)據(jù)庫管理系統(tǒng)的安全控制機(jī)制實(shí)現(xiàn)的,保證數(shù)據(jù)的可靠是通過數(shù)據(jù)庫管理系統(tǒng)的備份和恢復(fù)機(jī)制實(shí)現(xiàn)的。
⑤ 最大限度地保證數(shù)據(jù)的正確性。數(shù)據(jù)的正確性也稱為數(shù)據(jù)的完整性,它是指存儲到數(shù)據(jù)庫中的數(shù)據(jù)必須符合現(xiàn)實(shí)世界的實(shí)際情況,如人的性別只能是“男”和“女”,人的年齡應(yīng)該在0~150(假設(shè)沒有年齡超過150歲的人)。如果在性別中輸入了其他值,或者將一個負(fù)數(shù)輸入年齡中,在現(xiàn)實(shí)世界中顯然是不對的。數(shù)據(jù)的正確性是通過在數(shù)據(jù)庫中建立完整性約束來實(shí)現(xiàn)的。當(dāng)建立好保證數(shù)據(jù)正確的約束后,如果有不符合約束的數(shù)據(jù)要存儲到數(shù)據(jù)庫中,數(shù)據(jù)庫管理系統(tǒng)能主動拒絕這些數(shù)據(jù)。
⑥ 數(shù)據(jù)可以共享并能保證數(shù)據(jù)的一致性。數(shù)據(jù)庫中的數(shù)據(jù)可以被多個用戶共享,即允許多個用戶同時操作相同的數(shù)據(jù)。當(dāng)然,這個特點(diǎn)是針對支持多用戶的大型數(shù)據(jù)庫管理系統(tǒng)而言的,對于只支持單用戶的小型數(shù)據(jù)庫管理系統(tǒng)(如Access),任何時候最多只允許一個用戶訪問數(shù)據(jù)庫,因此不存在共享的問題。
多用戶共享問題是數(shù)據(jù)庫管理系統(tǒng)內(nèi)部解決的問題,它對用戶是不可見的。這就要求數(shù)據(jù)庫管理系統(tǒng)能夠?qū)Χ鄠€用戶進(jìn)行協(xié)調(diào),保證多個用戶之間對相同數(shù)據(jù)的操作不會產(chǎn)生矛盾和沖突,即在多個用戶同時操作相同數(shù)據(jù)時,能夠保證數(shù)據(jù)的一致性和正確性。設(shè)想一下火車訂票系統(tǒng),如果多個訂票點(diǎn)同時對某一天的同一車次火車進(jìn)行訂票,那么必須保證不同訂票點(diǎn)訂出票的座位不能重復(fù)。
數(shù)據(jù)可共享并能保證共享數(shù)據(jù)的一致性是由數(shù)據(jù)庫管理系統(tǒng)的并發(fā)控制機(jī)制實(shí)現(xiàn)的。
目前,數(shù)據(jù)庫技術(shù)已經(jīng)發(fā)展成為一門比較成熟的技術(shù)。通過上述討論,可以概括出數(shù)據(jù)庫具備如下特征:
數(shù)據(jù)庫是相互關(guān)聯(lián)的數(shù)據(jù)的集合,它用綜合的方法組織數(shù)據(jù),具有較小的數(shù)據(jù)冗余,可供多個用戶共享,具有較高的數(shù)據(jù)獨(dú)立性,具有安全控制機(jī)制,能夠保證數(shù)據(jù)安全、可靠,允許并發(fā)地使用數(shù)據(jù)庫,能有效、及時地處理數(shù)據(jù),并能保證數(shù)據(jù)的一致性和正確性。
需要強(qiáng)調(diào)的是,所有這些特征并不是數(shù)據(jù)庫中的數(shù)據(jù)固有的,而是靠數(shù)據(jù)庫管理系統(tǒng)提供和保證的。
- ASP.NET Core:Cloud-ready,Enterprise Web Application Development
- Getting Started with ResearchKit
- OpenCV實(shí)例精解
- 控糖控脂健康餐
- Visual C++數(shù)字圖像模式識別技術(shù)詳解
- C#程序設(shè)計教程
- Visual Basic程序設(shè)計實(shí)驗(yàn)指導(dǎo)(第4版)
- JavaScript by Example
- 微信小程序開發(fā)解析
- Integrating Facebook iOS SDK with Your Application
- INSTANT Silverlight 5 Animation
- Geospatial Development By Example with Python
- Visual Basic程序設(shè)計(第三版)
- Python函數(shù)式編程(第2版)
- 邊玩邊學(xué)Scratch3.0少兒趣味編程