第1.2節 數據庫系統的目的

考慮一個大學組織的某一部分,該部分記錄關於所有教員、學生、院系、課程設置等信息。

在計算機上保存信息的方法之一是在操作系統文件中存儲信息
爲了支持用戶操作信息,系統有若干個操作文件的應用程序,比如:

  • 增加新的學生、教員以及課程的程序;
  • 爲學生註冊課程並生成班級名冊的程序;
  • 爲學生分配乘積,計算GPA,生成成績單的程序;

程序員開發這些應用程序來滿足大學的需求。

根據需要將新的應用程序添加到系統中。比如,假設該大學決定要創建一個新的專業。因此,該大學創建了一個新的院系,並創建新的永久性文件(或者將信息添加到現有文件中)來記錄有關在這個系裏的所有教員、在這個專業的所有學生、課程設置、學位要求等信息。該大學可能必須要編寫新的應用程序來處理新專業的具體規定以及該大學的新規則。因此,隨着時間的推移,系統需要更多的文件和更多的應用程序

這類典型的文件處理系統是由操作系統支持的。文件處理系統在各種文件裏存儲永久性記錄,需要不同的應用程序來從對應的文件中提取記錄、向對應的文件裏添加記錄。

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

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

回到20世紀60年代和70年代,正是以上這些困難,加上其他困難,不僅推動了數據庫系統的初始發展,而且推動了從基於文件的應用向基於數據庫的應用的轉換。

接下來,我們將看到那些數據庫系統克服文件處理系統存儲數據缺點所使用的的概念和算法。在本書的大部分內容裏,我們使用一個大學組織作爲典型的數據處理應用的運行實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章