計算機概論 第十章 檔案與資料庫管理系統 陳維魁/陳邦治 旗標出版社
本章重點 本章將檔案與資料庫二個主題 多個相關檔案可組成資料庫系統 檔案與資料庫的相關知識及二者間的關連性與差異性
大綱 3 3 資料階層 檔案組織 其他檔案結構 資料庫定義 資料庫系統的特性 資料庫管理系統 關連式資料庫 資料庫的正規化 「檔案系統」與「資料庫系統」比較 3 3
資料階層 (1/3) 資料由低階到高階的順序為位元、位元組、欄位、記錄、檔案及資料庫 位元(bit) 位元組(byte) 資料的最小單位 為二進位值0或1 位元組(byte) 一個「位元組」等於8個位元。有時稱位元組為「字元」(character) 一個「位元組」代表一個符號。例如A、B、…、Z、a、b、…z、0、1、…、9、+、-、*、/…等符號
資料階層(2/3) 欄位(field) 記錄(record) 「欄位」是由相關的「位元組」所構成 例如學生的姓名「欄位」是由「位元組」所構成(如MARY,由M、A、R、Y四個字元所構成) 記錄(record) 「記錄」是由相關的「欄位」所構成 例如學生的「記錄」是由學生的姓名、學號、e-mail、通訊地址及聯絡電話等「欄位」所構成
資料階層(3/3) 檔案(file) 資料庫(database) 「檔案」是由相關的「記錄」所構成 例如班級的「檔案」是由所有學生的「記錄」所構成 資料庫(database) 「資料庫」是由相關的「檔案」所構成 例如資工系的「資料庫」是由所有班級的「檔案」所構成
範例 假設我們要將平時所使用的「通訊錄」儲存成一檔案,請問: (1)欄位(fields)指的是什麼? (2)資料記錄(records)指的是什麼? (3)鍵值(keys)指的是什麼? 解: 假設「通訊錄」中每位聯絡人的資料都包含了姓名、電話號碼、手機號碼、電子郵件及地址共五項資料 (1)共有五個「欄位」,分別是「姓名」欄位、「電話號碼」欄位、「手機號碼」欄位、「電子郵件」欄位及「地址」欄位 (2)資料記錄是指聯絡人資料 (3)鍵值是指「電話號碼」欄位
檔案組織 由資料階層的概念可知,檔案由相關記錄組成 常用的檔案組織 循序檔 直接存取檔 索引檔
循序檔(sequential file) 循序檔的結構是將資料記錄依照在檔案中的順序存放在儲存裝置 當要存取檔案中之資料時,必須依照檔案中資料排列的順序依序存取 例如某一檔案共有50筆資料記錄,若要存取檔案中第38筆資料記錄時,則必須依第1筆、第2筆、第3筆、…、第37筆資料的順序,最後才存取到所需要的第38筆資料 檔案結構未對記錄的長度做限制,因此可依記錄實際的長度配置空間供記錄使用,所以不會浪費空間
循序存取(sequential access) 「循序存取」的特性是速度慢、效率差 由於循序檔案結構只能支援「循序存取」動作,因此存取效率不佳 循序檔範例
直接存取檔(direct access file) 直接存取檔的建立方式是利用雜湊函數(hashing function)來計算記錄的位址,再將記錄存放在儲存裝置內對應的位址空間中 對記錄做存取動作時,也是透過雜湊函數計算記錄在儲存裝置內對應的位址,然後直接到該位址處存取記錄資料
「直接存取」(direct access) 「直接存取」的特點是速度快,效率佳
直接存取檔特性 直接存取檔可支援循序存取及直接存取動作。但是因為理想的雜湊函數不容易設計,所以不容易實作 因為直接存取檔案結構限制所有記錄的長度必需相同,因此相同的檔案若利用直接存取檔案結構來存放所需求的儲存區空間量是最大的
直接存取檔範例 觀察右圖,請留意以下二項特性: 1.同屬於同一檔案的五筆記錄應使用相同大小的記憶體空間 2.記錄可不使用連續的記憶體空間
索引檔(index file) 索引檔的建立方式是利用一個索引表(index table)儲存檔案的所有記錄在儲存裝置內之位址 若要存取檔案中之記錄內容,都必須先透過索引表找到記錄在儲存裝置的位址,再到該位址處存取記錄的內容 索引表實作的方式可利用一維陣列來製作,利用陣列的註標值(index)做為記錄編號,而陣列元素內容則是存放記錄在儲存裝置內之位址
索引檔範例 索引檔可支援循序存取及直接存取動作。雖然直接存取動作比直接存取檔慢且儲存區空間的需求量比循序檔高,但是因為索引檔較直接存取檔容易實作,而且存取速度又比循序檔快相當多,因此索引檔是使用普及度最高的檔案結構
檔案組織的選擇考量 檔案中記錄的大小 成長性(growth) 活動性(activity) 揮發性(volatility) 若檔案中記錄的大小皆相同,則採用三種方法皆可,但是若不相同則採用循序檔與索引檔為佳。(固定或不固定) 成長性(growth) 成長性是指檔案中的記錄之欄位數目及長度變化情形。若檔案中記錄的成長性高則採用直接存取檔為佳 活動性(activity) 單次處理中檔案記錄被處理的平均數。檔案中記錄的活動性高則可採用循序檔 揮發性(volatility) 檔案記錄新增及刪除的頻率。若檔案中記錄的揮發性高則採用直接存取檔為佳
範例 假設有一索引循序檔的第一個磁柱有如下的資料(所示數目為各資料記錄之鍵值): 第一磁軌 5 8 13 20 25 第一磁軌 5 8 13 20 25 第二磁軌 27 30 38 42 51 第三磁軌 55 60 67 73 80 第四磁軌 84 91 96 105 111 第五磁軌 溢位區(Overflow area) (1)試以上列資訊寫出相關之索引部份。 (2)如由此檔案讀取鍵值為38之記錄時,其搜尋步驟為何? (3)若插入鍵值為68之記錄時,其結果為何?
範例(cont.) (1)索引表:以各別磁軌中所儲存的最大鍵值做為索引表的內容 磁軌編號 鍵值 1 25 2 51 3 80 4 111 (2)先由索引表中確認資料所在磁軌編號為2,再由第二號磁軌中找尋目標資料
(3)若插入鍵值為68的記錄,由於鍵值為68之記錄會插入第三磁軌中,第三磁軌的最大鍵值將由原本的80變成73且鍵值80的資料將被移到溢位區(即第五磁軌)。索引表及磁軌完整內容如下: 磁軌編號 鍵值 1 25 2 51 3 73 4 111 第一磁軌 5 10 13 20 25 第二磁軌 27 30 40 42 51 第三磁軌 55 60 67 68 73 第四磁軌 84 91 96 105 111 第五磁軌 80
主檔與異動檔 主檔(master file) 異動檔(transaction file) 儲存全部的資料,因此資料最完整且不宜經常修改 異動檔(transaction file) 用來記載某段時間內主檔修正的內容資料 例如台灣大學的學生學籍資料檔案便是一個主檔,而在某一學期間,學生可能因為搬家而更改通訊地址或電話的資料便會記載在主檔對應的異動檔中,待學期結束後才會執行將該學期中儲存學生變動資料的異動檔與主檔資料合併的動作
相對檔 (relative file) 相對檔 (relative file)會以記錄中某一特定欄位之內容直接做為記錄存放在儲存設備的位址,這個特殊的欄位稱為「相對鍵」(relative key) 為了確保不同的資料記錄存放在儲存設備的位址不相同,因此不同記錄之相對鍵值不可相同。例如,某公司的員工檔案建置時,已設定員工編號皆不相同,則可利用員工編號直接做為「相對鍵」,將來對員工資料記錄執行存取動作時便可直接到儲存設備位址為員工編號處直接存取該員工之資料
反轉檔 (inverted file) 反轉檔是指利用輔助鍵來找出記錄在檔案中的位址及對應之主要鍵的檔案結構 一般的檔案結構是由主要鍵來找出記錄在檔案中的位址 反轉檔應該會與一般的檔案結構有很大的不同
範例 假設有以下學生成績資料表: 記錄名稱 學號 姓名 物理成績 化學成續 A 001 陳一 100 90 B 002 林二 72 63 C 003 張三 66 30 D 004 李四 45 20 E 005 王五 15 83 F 006 周六 94 G 007 蔡七 89 87 H 008 馬八 54 77 I 009 施九 81 53 J 010 吳十 10
將物理成績之分數依「40分以下」、「41分-60分」、「61分-80分」及「81分以上」分為四類,並依十位學生所得之分數建立鏈結串列如下
將化學成績之分數依「40分以下」、「41分-60分」、「61分-80分」及「81分以上」分為四類,並依十位學生所得之分數建立鏈結串列如下
「姓名欄位反轉檔」
「物理成績欄位反轉檔」
「化學成績欄位反轉檔」 以化學成績「81分以上」為例來說明。「81分以上」的鏈結個數為4,代表化學成績「81分以上」者有4位,化學成績「81分以上」的第一筆記錄名稱為A,第二筆記錄名稱為E (由記錄A的指標欄位內容得知下一筆記錄為E),第三筆記錄名稱為F(由記錄E的指標欄位內容得知下一筆記錄為F),第四筆記錄名稱為G(由記錄F的指標欄位內容得知下一筆記錄為G)
「全部反轉」及「部份反轉」 「全部反轉」(fully inverted) 「部份反轉」(partially inverted) 指所有記錄均有指標指到 例如上例中的「姓名欄位反轉檔」 「部份反轉」(partially inverted) 指只有部份筆記錄有指標指到 例如上例中的「物理成績欄位反轉檔」及「化學成績欄位反轉檔」
資料庫定義 常見的資料庫定義為資料庫是一群相關資料的集合體 資料庫內部的資料會以最少重覆的情況來儲存並可供多人同時使用
資料庫定義 (cont.) James Brandly定義 Alfonso F. Cardenas定義 C. J. Date定義 資料庫系統是某些交互參考檔(cross-referenced files)集合 Alfonso F. Cardenas定義 資料庫系統是某些事件(occurrences)所組成的集合,這些事件內包含有記錄型態,且記錄型態彼此間存在著某種特殊關係 C. J. Date定義 資料庫系統是一群可被操作的資料之集合,這些資料可被應用程式所使用
資料庫系統成員 計算機硬體 資料庫管理系統(Database Management System;DBMS) 資料庫內部的資料 資料庫管理者(Database administrator;DBA) 資料庫使用者
資料庫管理者的工作 決定資料庫的結構、資料儲存方式及存取方式 根據需求重建、變更資料庫的結構 建立資料庫的安全防護體系、備份(backup)及回復(recovery)策略 幫助使用者使用資料庫
資料庫系統的特性 (1/4) 「共享性」(shareable) 「不重複性」(non-redundancy) 指資料庫系統允許多個使用者同時使用同一筆資料 「不重複性」(non-redundancy) 指同一份資料在資料庫中被多人同時使用時,此時多個使用者可只共享同一份資料,不會因為多人同時使用便將資料複製多份
資料庫系統的特性 (2/4) 「完整性」(integrity) 指資料庫內的資料只有被授權的合法使用者有權更改,未獲授權的使用者不得自行變更資料庫的內容 只有教務處的學生成績系統管理者可在被合法授權的情形下更改學生成績(可能是因授課教師疏忽而輸入錯誤的成績,因此必須更改成績) 資料庫管理者可以藉由設定某些檢查程序,以保護資料庫的完整性
資料庫系統的特性 (3/4) 「資料獨立性」(data independency) 指應用程式與資料庫的內部儲存方式沒有任何的關連,如此一來當使用者寫程式必須利用到資料庫的內容時或必須使用資料庫時,不需要知道或考慮資料庫的內部結構 當變更所使用的應用程式時,便不需要對資料庫的內部儲存方式做任何型式的修正 具獨立性特徵的資料庫才容易被使用
資料庫系統的特性 (4/4) 「安全性」(security) 「一致性」(consistent) 指藉由適當存取控制(access control)機制及加密機制(encryption)來保護資料庫中資料的安全性 「一致性」(consistent) 「一致性」是「不重複性」的擴充 若同一份資料在資料庫中被儲存多份,則有可能因為其中的某一份被修改了,而使得該份被修改的資料與其他資料的內容不一致,但由於資料庫系統已經具有「不重複性」,因此「一致性」自然成立
資料庫系統常見的缺點 若使用資料庫系統來取代傳統的檔案系統會使得系統的建置及維護成本提高,因為「不重複性」使得相同資料只有一份,若發生意外損害則可能無法回復
資料庫管理系統 完整的資料庫系統架構 綱目與次綱目 資料庫管理系統內部結構 結構化查詢語言的分類與用法 資料庫的邏輯結構
完整的資料庫系統架構 ANSI/SPARC所定義完整資料庫系統架構共分為三個階層 外部層(external level) 概念層(conceptual level) 內部階層(internal level)
外部層(external level) 外部層是最接近使用者的階層,本層是以個別使用者觀點所見到的資料庫的內容(view) 本層具資料獨立性,藉由Sub-schema定義
概念層(conceptual level) 概念層是以整體使用者為觀點,並且是內部層與外部層間溝通的橋樑,在概念層中資料以SQL來定義 一筆概念記錄可能等於多筆外部記錄或多筆儲存記錄 本層藉由Conceptual schema或schema定義
內部層(internal level) 內部層是資料庫內資料實際的儲存方式之階層 包括記錄實際儲存順序、各欄位的資料特性及索引等 本層之資料具資料相依性並藉由Internal schema定義
ANSI/SPARC 完整資料庫系統架構
實體資料獨立性與邏輯資料獨立性 實體資料獨立性 邏輯資料獨立性 當資料庫實體之內部資料格式有更動時,程式本身不須修改便可建立邏輯資料模式 作法是指當內部層結構改變時,只要變更內部層/概念層之對映關係即可,而概念層/外部層之對映關係不需變動 邏輯資料獨立性 當資料庫實體之內部資料格式有更動時,可由資料庫管理系統(DBMS)來修改即可改,而使用者程式不須修改
綱目與次綱目 同一個綱目可能可以導出多個次綱目,綱目及次綱目的定義及區別介紹如下: 綱目(schema) 次綱目(subschema) 綱目又稱為邏輯資料庫描述(logical data base description)是資料庫設計者或管理者在建立資料庫時利用綱目定義語言(Schema Definition Language;SDL)所設計而成 利用綱目可定義資料庫的邏輯概觀(logical view) 次綱目(subschema) 次綱目是綱目的一個子集合,主要的作用是定義及控制存取模式的邏輯架構 可利用次綱目來定義個別使用者所建立之資料庫的邏輯概觀(logical view)
綱目與次綱目的關係
資料庫管理系統內部結構 資料庫管理系統(DBMS)的內部結構共分為三個部份,分別是 使用者介面( user interfaces) 資料庫管理系統子系統(DBMS subsystems) 資料庫管理系統引擎(DBMS engine)
資料庫管理系統內部結構--使用者介面 使用者介面的功能是用來與使用者、應用程式及管理者溝通 與外部階層溝通的工作是透過使用者介面來完成
資料庫管理系統內部結構--資料庫管理系統子系統 本部份一般會包含備份復原、安全管理、效能管理及應用發展等子系統
資料庫管理系統內部結構--資料庫管理系統引擎 資料庫管理系統引擎本身應具備運算的能力,所有針對資料庫的存取動作都必須透過資料庫管理系統引擎對作業系統提出輸出入工作請求來完成 DBMS Engine就是DBMS與內部階層溝通的橋樑 與內部階層溝通的工作是透過資料庫管理系統引擎來完成
結構化查詢語言的分類與用法 使用者可利用結構化查詢語言(Structured Query Language;SQL)來使用資料庫 資料定義語言(Data Definition Language;DDL) 資料處理語言(Data Manipulation Language;DML) 資料控制語言(Data Control Language;DCL)
資料定義語言 可利用此種語言在外部、概念及內部三個階層建立新的表格或刪除原來已存在的表格
資料處理語言 可利用此種語言來操作己建立好的表格,如進行新增資料、刪除、修改、存取、搜尋、更新與四則運算等動作
GRANT ALL ON EMPLOYEE TO ROBERT; 資料控制語言 資料控制語言是用來控制對資料庫中資料存取的權限,藉以達到保護資料的安全性。 範例: 將EMPLOYEE表格的所有存取權限開放給ROBERT GRANT ALL ON EMPLOYEE TO ROBERT;
使用者使用「資料庫的實體內容」模式 使用者會利用SQL當作工具,透過DBMS及作業系統當作介面來存取「資料庫的實體內容」,對應圖形如上圖
資料庫的邏輯結構 常見的資料庫結構 階層結構(hierarchical structure) 網路結構(network structure) 關聯結構(relational structure)
階層結構(hierarchical structure) 階層結構是一種類似樹狀結構的資料組織 必須是連通圖(connected graph) 不允許迴路(cycle) 樹中節點數目必須恰比邊的數目多1 亦需滿足每個子節點只能有一個父節點的規定 早期IBM所開發之IMS(Information Management System)及DL/1等系統即是採用階層結構
階層結構 (cont.) 階層結構因具有與樹狀結構相同的特性,所以可以使用既有的樹狀結構演算法及結構的建立及刪除均很容易。本結構最主要的缺點是只能由上而下,依序檢索資料,因此搜尋動作較耗時
網路結構(network structure) 網路結構類似樹狀的組織結構,但取消了每個子節點只能有一個父節點和在結構中不能有迴路的限制,也就是說任一節點可有任意數目的父節點 主要的特點是具有較大的彈性,但結構較樹狀結構複雜許多 早期HP所開發之IMAGE及Honeywell的IDS等系統即是採用網路結構
關聯結構(relational structure) 關聯結構利用由一些行與列所組成的表格來表達資料間的關係 優點是適合表達較複雜的關係,缺點則是當查詢的數目很少時,採用本結構的效率將不佳 DB2 、INGRES 、ORACLE 、SYBASE、dBASE III PLUS、ACCESS等系統採用木結構
關聯結構範例
關連式資料庫 關連式資料庫系統是由一群相關的表格(table)所組成,表格中的tuple在系統中沒有順序性 關連式資料庫系統使用實體關係圖(Entity-Relationship Diagram;ERD)作為設計關連式資料庫及描述實體關係圖(Entity-Relationship Model;E-R Model)時的工具
關連式資料庫範例
資料庫的正規化 正規化的目的是為了排除資料的重覆性以及去除所有會影響操作正確性之資料間的關係
「檔案系統」與「資料庫系統」比較