第1.2節(jié) 數(shù)據(jù)庫系統(tǒng)的目的

考慮一個大學(xué)組織的某一部分,該部分記錄關(guān)于所有教員、學(xué)生、院系、課程設(shè)置等信息。

在計算機上保存信息的方法之一是在操作系統(tǒng)文件中存儲信息。
為了支持用戶操作信息,系統(tǒng)有若干個操作文件的應(yīng)用程序,比如:

  • 增加新的學(xué)生、教員以及課程的程序;
  • 為學(xué)生注冊課程并生成班級名冊的程序;
  • 為學(xué)生分配乘積,計算GPA,生成成績單的程序;

程序員開發(fā)這些應(yīng)用程序來滿足大學(xué)的需求。

根據(jù)需要將新的應(yīng)用程序添加到系統(tǒng)中。比如,假設(shè)該大學(xué)決定要創(chuàng)建一個新的專業(yè)。因此,該大學(xué)創(chuàng)建了一個新的院系,并創(chuàng)建新的永久性文件(或者將信息添加到現(xiàn)有文件中)來記錄有關(guān)在這個系里的所有教員、在這個專業(yè)的所有學(xué)生、課程設(shè)置、學(xué)位要求等信息。該大學(xué)可能必須要編寫新的應(yīng)用程序來處理新專業(yè)的具體規(guī)定以及該大學(xué)的新規(guī)則。因此,隨著時間的推移,系統(tǒng)需要更多的文件和更多的應(yīng)用程序。

這類典型的文件處理系統(tǒng)是由操作系統(tǒng)支持的。文件處理系統(tǒng)在各種文件里存儲永久性記錄,需要不同的應(yīng)用程序來從對應(yīng)的文件中提取記錄、向?qū)?yīng)的文件里添加記錄。

在文件處理系統(tǒng)中保存組織信息有若干個缺點:

  1. 數(shù)據(jù)冗余和不一致
    數(shù)據(jù)冗余指的是相同的數(shù)據(jù)在不同的文件中存在多份拷貝。比如,有一個學(xué)生修了音樂和數(shù)學(xué)的雙學(xué)位,這個學(xué)生的地址和電話號碼可能出現(xiàn)在由音樂系的所有學(xué)生記錄組成的文件和由數(shù)學(xué)系的所有學(xué)生記錄組成的文件中。數(shù)據(jù)不一致指的是當出現(xiàn)數(shù)據(jù)冗余時,對其中一份拷貝更新時,沒有對所有的拷貝也更新。比如,當對音樂系的該學(xué)生的地址進行修改,可能并沒有對數(shù)學(xué)系的該學(xué)生的地址進行同步修改。
  2. 訪問數(shù)據(jù)較難
    文件處理系統(tǒng)不支持方便且高效的方式來檢索數(shù)據(jù)。比如,現(xiàn)有一個大學(xué)職員要找出住在特定郵政編碼區(qū)域內(nèi)的所有學(xué)生的姓名,請求數(shù)據(jù)處理部門生成這樣一份列表。由于原始系統(tǒng)的設(shè)計者沒有預(yù)料到這樣的請求,所以沒有現(xiàn)成的應(yīng)用程序來滿足它。但是,有一個應(yīng)用程序可以生成所有學(xué)生的列表。該職員有兩種選擇:要么獲取所有學(xué)生的列表并手動提取所需的信息,要么讓程序員編寫必要的應(yīng)用程序。這兩種選擇顯然都不令人滿意。假設(shè)編寫了這樣一個程序,幾天后,同一個職員又需要縮減名單,只包括那些至少修了60個學(xué)分的學(xué)生。正如預(yù)期的那樣,不存在生成這樣一個列表的程序。同樣,該職員又面臨上述兩種選擇,但都不令人滿意。
    不夠靈活,需求變動了,要修改程序。
  3. 數(shù)據(jù)孤立
    因為數(shù)據(jù)是分散在不同文件中的,且不同文件可能有不同的文件格式,所以編寫新的應(yīng)用程序來檢索合適的數(shù)據(jù)是困難的。
  4. 完整性問題
    在數(shù)據(jù)庫系統(tǒng)中存儲的數(shù)據(jù)必須滿足某種類型的一致性約束。
    假設(shè)一個大學(xué)為每個系維護一個賬戶,記錄每個賬戶的余額。
    假設(shè)該大學(xué)要求每個系的賬戶余額必須大于等于0。
    雖然開發(fā)者可以通過在各種應(yīng)用程序中添加合適的代碼來實現(xiàn)前述約束,但是當有新的約束增加時,很難通過修改程序來實現(xiàn)這些新的約束。
    當約束涉及來自不同文件的多個數(shù)據(jù)項時,問題會變得更加復(fù)雜。
  5. 原子性問題
    在傳統(tǒng)的文件系統(tǒng)中很難保證原子性。
    跟其他設(shè)備一樣,計算機系統(tǒng)也可能會發(fā)生故障。在許多應(yīng)用中,如果有故障發(fā)生,數(shù)據(jù)要恢復(fù)到跟故障發(fā)生前保持一致的狀態(tài)。
    比如,在銀行系統(tǒng)中有個程序要將500美元從賬戶A轉(zhuǎn)移到賬戶B。如果在程序執(zhí)行期間系統(tǒng)發(fā)生了故障,則有可能出現(xiàn)500美元已從賬戶A的余額中扣除了,但是沒有加到賬戶B的余額中,導(dǎo)致數(shù)據(jù)出現(xiàn)不一致的狀態(tài)。顯然,必須要有數(shù)據(jù)庫一致性:借和貸要么同時發(fā)生,要都不發(fā)生。即,資金的轉(zhuǎn)移必須是原子的:要么都發(fā)生,要么一個也不發(fā)生。
  6. 并發(fā)訪問異常
    在文件處理系統(tǒng)中很難避免并發(fā)訪問異常。
    比如,有個余額為10000美元的賬戶A,有兩個銀行職員幾乎同時從賬戶A中扣除500美元和100美元。這樣的并發(fā)執(zhí)行可能導(dǎo)致賬戶A的余額處于不正確的狀態(tài)。假設(shè)扣款程序是這樣執(zhí)行的:讀取舊余額,扣除借記的數(shù)量,寫回結(jié)果。如果兩個程序并發(fā)執(zhí)行,則它們可能都讀取的余額是10000美元,依次寫回9500美元和9900美元。看誰最后一個寫回,賬戶A的余額要么是9500美元,要么是9900美元,而不是正確的9400美元。
    再比如,為了對一門課的注冊學(xué)生數(shù)做限制,注冊程序?qū)@門課維護了一個注冊學(xué)生的計數(shù)器。當有學(xué)生注冊時,該程序讀取課程的當前計數(shù)器,驗證計數(shù)是否達到上限,給計數(shù)器加1,將結(jié)果寫回數(shù)據(jù)庫。假設(shè)這門課的注冊上限是40。假設(shè)有兩個學(xué)生并發(fā)注冊,計數(shù)器的值是39。兩個程序執(zhí)行可能都讀取到的計數(shù)器值是39,都寫回40,導(dǎo)致一種不一致的狀態(tài):計數(shù)器只增加了1,且這兩個學(xué)生都成功注冊了這門課。
  7. 安全問題
    因為應(yīng)用程序是以特殊的方式添加到文件處理系統(tǒng)中的,所以在文件系統(tǒng)中實現(xiàn)安全性約束是困難的。
    不是每個數(shù)據(jù)庫的用戶都能訪問所有數(shù)據(jù)的。比如,在一個大學(xué)里,薪酬職員需要看到的僅是數(shù)據(jù)庫中有財務(wù)信息的那部分數(shù)據(jù),他們不需要訪問學(xué)術(shù)記錄。

回到20世紀60年代和70年代,正是以上這些困難,加上其他困難,不僅推動了數(shù)據(jù)庫系統(tǒng)的初始發(fā)展,而且推動了從基于文件的應(yīng)用向基于數(shù)據(jù)庫的應(yīng)用的轉(zhuǎn)換。

接下來,我們將看到那些數(shù)據(jù)庫系統(tǒng)克服文件處理系統(tǒng)存儲數(shù)據(jù)缺點所使用的的概念和算法。在本書的大部分內(nèi)容里,我們使用一個大學(xué)組織作為典型的數(shù)據(jù)處理應(yīng)用的運行實例。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容