翻轉工作室:粘添壽
第二章 資料庫系統簡介
在真實環境理,『資料』(Data)可說是最困難處理的東西,譬如醫院裡的病歷表、書局的圖書目錄、材料店的零件目錄、甚至個人的電話簿、、等等。如果僅有數百筆資料,我們要從中搜尋、更新、增加或刪除其中一筆資料可能不會很困難,但當它成長至數千、數萬、甚至數百萬筆資料之後,我們要管理這些資料可不是那麼容易了。 另外,資料如果僅做搜尋、更新、增加等等管理工作,可能辛苦一點慢慢用人工去達成還可以,但要做一些統計分析的工作就有困難了。譬如我們要找出每個月到某家醫院看診 3 次以上的病人的資料,或這個月哪幾本書的最暢銷,或想找出姓張的、又住在鳥松鄉朋友的電話,…,等等諸如此類的查詢動作,如果要用人工來達成可能需耗費許多精神,也不容易達成。
隨著人民生活越來越複雜,所產生或需要的資料越來越多,我們希望由資料中萃取資訊越來越精細且準確,因此需要一套電子化系統來歸納與管理資料,這就是『資料庫』(Database)。
乍看起來,資料庫好像一套電子化檔案櫃,它有系統的收集資料,並起歸納成各個檔案的功能,讓使用者能容易的管理龐大複雜的資料,資料庫好像是真實環境的輔助設備而已。沒錯,30 年前的資料庫設計是想盡辦法讓所有人工操作轉換成資訊化環境,如圖 2-1 所示。但目前世界裡幾乎都是資訊化的環境,大多先規劃出資訊化處理模式,再依照此模式實現在真實環境裡,如圖 2-2。如何設計資訊化處理模型,則必須由基礎的資料庫模型設計開始,這也是我們學習資料庫的最主要動機。
既然這樣,資料庫的設計不再是被動滿足真實環境所需,而是建構新的操作模型來帶動真實環境的運作,如此看來,資料庫模型的設計就顯得非常重要。但入門者,還是先從模擬真實環境的設計開始,才能完全了解資料庫模型。
圖2-1 真實環境轉換成資訊化處理
圖 2-2 真實環境實現資訊化處理模型
2-2 資料庫系統簡介
簡單的說,『資料庫』就是一個電子化的檔案櫃,但它需要管理工具來處理它,這就是『資料庫管理系統』,整個資料庫系統如圖 2-3 所示,它可區分為關個單元,分別介紹其功能:
圖 2-3 資料庫系統架構
2-2-2 資料庫
表示真正儲存資料的地方,但資料可能有上萬或上千萬筆資料。如需要由大量資料中查詢、更新、或插入某一筆資料,是很困難的工作。為了能在千萬筆資料中快速搜尋到某一筆資料,對資料儲存方式就非重要。如果儲存時排列得恰當,搜尋時也許會比較快。譬如,一大堆學生資料(如 n 筆),如果沒有排列整齊的話,我們可能要一個接一個比對才可以找到,運氣好第一筆就找到,運氣不好可能找到最後(第 n 個)才找到。簡單的方法,我們依照學號順序排列,找某一筆資料的速度就會快很多。排列儲存方法就是所謂的『資料結構』。
什麼方法排列可以最快速找到資料,這是很高的學問,也牽涉到資料庫系統的優劣。當然啦! 越昂貴的資料庫系統排列方法越複雜,速度越快,但也相對應需浪費許多儲存空間,較常看見的方法是陣列式順序排列、樹狀(Tree)、B Tree 或 B+ Tree 等等資料結構方法。本書限於課程進度,並無法一一介紹這些資料儲存方式,請有興趣讀者參考其他書籍。
2-2-3 資料庫綱目
決定好資料儲存方式(資料結構)之後,雖然可依照此模式來儲放資料,但還是須限制資料的型態如何。譬如某一筆資料 age,他表示年齡,因此僅能夠用整數或浮點數表示,絕不可以字串。或者 addree 表示地址,則一定要用字串表示。不僅這樣,有些資料還要限制它的範圍,譬如 tall 代表身高,雖然可用浮點數表示,但還要限制它在 30 ~ 250 公分以內,如果該筆資料有 400 公分就成為笑話。
所以我們需要一套方法來規定資料格式,這就稱為『資料庫綱目』(Database Schema),我們定義好資料綱目之後,儲存資料庫的東西就不可以違背此規定,這就能保持資料的正確性(或稱完整性)。一般資料庫管理系統(DBMS)會自動檢查資料是否違背限制原則,當輸入不符合格是資料時,他會拒絕。
2-2-4 資料存取軟體
定義好資料庫儲存(資料結構)方式與資料綱目之後,就必須研議一套存取方法,並將它做成一個套件,透過這套軟體就可容易的存取資料庫的資料。各種資料結構模式,它們的搜尋、插入、更新方法都不一樣,更何況還加入資料綱目的限制,就顯得非常複雜。不僅這樣,資料庫大多有上千萬筆資料,要從中尋找一筆資料的話,大多需將整個資料庫倒入記憶體內搜尋,很不幸記憶體可能儲放不了(資料太大),這時候要如何切斷搜尋,又是一件困難的工作,這都與資料庫設計有關。
由此可見,資料庫、資料綱目與存取軟體這三樣東西都與硬體架構有關,甚至與資料庫原始設計方法息息相關。各家廠商所設計方法都不一樣,價格也不一樣。簡單的說,越複雜的架構可以儲存越多資料,越簡單便宜的架構只可以儲存較少的資料。譬如,Access 個人資料庫套件,操作起來與大系統的資料庫(如 SQL Server)差不多,如果儲存資料不多話,兩者幾乎沒有甚麼差別,但如果存放上萬筆之後,兩者的查詢速度就會差很多。
2-2-5 SQL資料查詢工具
各家資料庫廠商都會提供資料的存取工具,來操作資料庫系統。但為了方便使用者,OSI 協會制定一套標準介面,透過此介面就可以查詢與管理不同廠家的資料庫,這就是 SQL(Standard Query Language)。當然,如何將資料庫存取軟體轉換連結到 SQL 語言操作,這是各家廠商必須提供者。對於一般使用者而言,只要認識 SQL 語言的操作方法,而可以不用理會資料庫儲存方式(即是資料結構),如何限定資料格式(資料綱目),甚至它的硬體與軟體架構如何,就可以隨意操作資料庫。
在圖 2-3 中,我們將系統的存取軟體與 SQL 查詢工具整合稱之為『資料庫管理系統』(DBMS),透過它,我們可以操作任何資料庫,而不論資料庫的大小(譬如 MySQL、SQL Server、、),第 2-5 節再詳細介紹它有哪些管理功能。
2-2-6 SQL 嵌入應用程式
僅利用 SQL 語言工具來查詢或管理資料庫系統,會感覺到非常不方便,如果我們將這些 SQL 命令植程式語言當中,或是編寫應用程式時,將 SQL 命令植入其中,如此來管理或應用資料庫就可以方便許多,這就是『資料庫程式設計』。植入 Visual Basic 或 C就是 VB.Net,或 PHP + MySQL 等等。
當然啦 ! 『資料庫系統』就是上述這些功能套件的整合體。
2-3 資料模型
資料模型是描述資料庫的內容、結構、以及使用方法。亦是資料儲存結構(陣列或樹狀、、),資料的限制規定、以及資料之間連繫的方法。前面兩者前一節大略說明過,後面資料之間連繫就是一個大問題,功能是如何由一個資料找尋到另一個資料,譬如由系所資料如何聯繫到系所老師、如何由老師連結到所開的課程、如何由課程找到修讀的學生、如何由學生找到他的監護人等等。因此它牽涉下列問題:
資料結構(Data Structure):資料儲存方式,譬如陣列或樹狀格式。
完整性限制條件(Integrity Constraints):確保資料庫內資料的完整性。譬如,某一位學生的更改姓名,在學校裡有關該學生的資料都要修改,不可以出現教務處有變更,學務處沒有變更的現象。或某一位學生退學,必須將它的資料在教務處或學務處都必須刪除,不可有遺落的現象。
資料處理(Data manipulation):定義好的資料模型應該可方便的插入、修改、刪除、查詢等等的處理。
在資料庫發展過程中並沒有『資料模型』概念,早期設計資料庫時,只要能滿足需求就好。自從有了『關聯式資料庫』模型之後,為了區分它與之前資料庫有哪些地方不同,才將過去的資料庫拿出來定義模型。同學看一看就好,這都是過去的歷史陳蹟,目前僅存『關聯式資料庫』,以及『物件導向資料庫』(這一個聽一聽就好)兩種,以後就不知道了。這裡所說的資料模型式是講有關資料之間的聯繫方法,也就是如何從一筆資料(系所資料)找到另一筆資料(如系所老師),此種聯繫方法就是建立整個資料庫的模型。許多學者將資料模型區分為下列三種:
階層式資料模型:利用樹狀結構建立資料之間的聯繫(父節點 => 子節點),因此僅能使用於一對多的資料模型。
網路式資料模型:改進樹狀結構的缺點,在資料之間建立鏈路連結(網路),使能達到多對多的資料之間的聯繫。它建立的架構是:父節點 => 子節點 =>(鏈路)父節點。子節點之間還是無法聯繫得到,譬如,我要找到張大有的同班同學,就無法達成。
關聯式資料模型:這是目前最風行的資料庫模型,幾乎所有資料庫系統都是這種模型。它將某些相同的資料歸納成一個關聯(Relation,我們稱為表格),某一個關聯描述一個東西(無論有形、無形或物件),描述方法是將該『東西』用幾個現象來標明,譬如,學生這個『東西』則用學號、姓名、性別、地址等等現象來描述,此『現象』就稱為『屬性』(Attribute,我們稱為表格的欄位)。關聯(表格)之間就找一個或多個屬性(欄位)來建立關係。譬如,學生資料裡的班別代碼,與班級資料表內的班級代之間建立聯繫。
其實,各種資料模型之間並沒有所謂優與劣的問題,是時代變遷需求的改變。當真實環境越加複雜時,就會發展出更複雜的資料模型來應付它。說不定再過幾年,真實環境更加複雜之後,關聯式資料模型已無法滿足,屆時一定會再發展出更先進的資料模型出來。當然,目前還到達那種環境,也很難猜測未來系統模型如何?
2-4 關聯式資料庫簡介
關聯式資料庫模型將所有物件都以一個關聯來表式,每一關聯由若干個屬性來描述它。到底需多少個屬性是依環境的需求而定,並沒一定規則。關聯表如下圖所示,相關名詞如下:
圖 2-4 關聯式資料庫之關聯表(表格)
關聯(Relation):表示某一物件的現象,以 Windows 系列的產都稱為『資料表』(Table)。也給予每一個資料表一個名稱,譬如:學生資料表(Relation name)。
屬性(Attribute):每一個關聯是由若干個屬性所組成,我們稱之為『欄位』(Field)。也給予每欄位一個名稱,譬如:學號、姓名、班級代碼、性別等等(Attribute name)。
屬性集(Attribute Set):又稱為值組(Tuple)。屬性集表示關聯表內屬性的集合,我們稱之為『紀錄』(Record)。每一筆記錄表示一筆資料,譬如:在學生資料表內,每一筆記錄描述一個學生的資料。
值域(Domain):每一個 Attribute 的資料格式範圍,我們稱為『欄位資料格式』。譬如:學生資料表內的姓名欄位,它的資料格式就被限制於 CHAR(20),由 20 個以內的字元表示。
維度(Degree):表示資料表內有多少筆紀錄。
**** 何謂關聯式資料庫:*****
1. 是利用若干個資料表所構成的資料庫。
2. 資料表之間都必須有關聯(或稱關係連結)。
3. 沒有和其他資料表產生關聯的資料表是多餘的。
當我們設計資料表之前,應該先了解它得特性如何:
不含重複的紀錄:資料表內每一筆記錄應該都是獨立性,並表示一個物件,不應該有重複的現象。譬如:每一位學生在學生資料表內應該只有一筆記錄,不會有重複或由兩筆記錄描述同一位學生。
紀錄之間並沒有順序性:紀錄在資料表內並沒有前後之分,也就是沒有順序性。
欄位之間沒有順序性:資料表內的欄位也沒有前後之分。
欄位內容是單元值( Atomic Value):表示欄位內所儲存的資料是不可再分割的單元值。譬如:某一位學生的姓名欄位是『張簡單』,它就是一個單元值,無法區分『張』是姓、『簡單』是名,或『張簡』是姓、『單』是名。如果真的需要區分姓與名,那資料表要重新設計,將『姓名』欄位更改為『姓』、『名』兩個欄位。
為了滿足上述的資料表的特性,對於資料表內欄位的規劃就需要某些限制,針對欄位的特質,有下列定義:
主鍵(Primary Key)
雖然我們要求資料表內紀錄不可以重複,但許多情況下還是會重複,譬如,學生資料表內可能出現相同姓名、相同性別、相同地址、等等情況導致紀錄重複。因此為了不讓資料有重複現象,必須找到一個欄位,它的內容能讓每一筆資料都不相同。譬如,學生資料表內找到『學號』,它是不可能重複的,我們就選定它當『主鍵』。
如果在某一個資料表內找不到一個欄位是不可能重複的,也許我們可以組合 2 或 3 個欄位組合當主鍵。譬如選課總表,則選用『學號』與『開課代碼』兩個欄位的組合當為主鍵,我們還限制每位學生不可以選修兩次相同的課程。
候補鍵(Candidate Keys)
『候補鍵』表示具有被選為主鍵特質的欄位,可能是一個或若干欄位的組合。主鍵表示可以辨識各筆資料之間的不同。譬如學生資料表{學號、姓名、班級代碼、性別、電話、電子郵件、地址}內有資格當主鍵有{學號},{學號、姓名},{學號、班級代碼}…, 這些具有主鍵的特質。候補鍵須找出他們之間最小的集合,當然就是 {學號},就取它來當主鍵。如果多了『身分證號』欄位,它也具有主鍵功能也是候補鍵之一。因此主鍵具有下列兩條件:
唯一性
最小性
替代鍵(Alternative Key)
具有主鍵功能而未選上者稱之,它具有替代主鍵的特質。假設學生資料中 {學號}與{身分證號}都具有候補鍵的特質,我們選擇了{學號}當主鍵,則{身分證號}就是替代鍵。
外來鍵(Foreign Key)
該欄位與其它表格的主鍵關聯稱之。外來鍵是表格之間連繫的主要管道,如下圖所示。譬如,學生是屬於哪一個班是利用該學生資料的『班級代碼』對應到班級資料表的『班級代碼』欄位,找到他所屬班級的相關資料(班級名稱、系別代碼與入學年度),接著『系別代碼』也是外來鍵,它對應系別資料表的主鍵,可透過此聯繫找到該班是屬於哪一系所有。
圖 2-5 表格之間的關聯性
資料庫設計完成之後,需要有一套完整的『資料庫管理系統』(Database Management)來協助它,幾本上,它須具備有下列功能:
定義『資料結構』方法,將資料有系統組織的儲存下來。
定義『資料庫綱目』:描述資料表格式,包含欄位名稱、資料型態、資料範圍,甚至使用者權限分配。
提供高階查詢語言:一般都需提供 SQL 查詢工具,包含有:
資料定義語言(Data Definition Language, DDL)。用來定義資料庫綱目的工具。
資料處理語言(Data Manipulation Language, DML)。用來查詢、新增、刪除、更新資料表內容之工具。
資料控制語言(Data Control Language)。用來控制資料保全或保密的工具。
異動管理(Transaction Management):異動處理是資料庫系統最困難的工作之一,如管理不完善可能導致資料的錯誤,DBMS 至少須提供下列功能:【以下課堂舉例說明】
單元性(Atomicity):功能是『一個異動中所含的所有動作中,只要一個動作無法完成,則整個異動須恢復原來情況,如同沒有執行過此異動一樣。』為了達成此目的,系統須提供『委任』(Commit) 與『回復』(Rollback)之功能。
隔離性(Isolation):功能是『一個異動還未被委任(Commit)之前,它所存取的資料不得被其它異動存取』。
持續性(Durability):功能是『雖然異動完成,甚至被委任(Commit)之後,如系統出問題它還是可以被恢復原狀。』此功能需靠『Transaction Log』來達成。
安全管制(Security Control):功能是『資料表具有安全管制的功能,也許需透過密碼或其它管道認證才可存取。』
完整性:具有備份與確保資料正確的工具。
系統分析:具有效能分析的工具。
使用資料庫的資訊系統包含有『資料』與『應用程式』兩大部份,它們是否安裝在同一主機,或各自主機安裝,就延伸了多種資料庫系統的架構。各種架構都有它應用的地方,無所謂優劣如何,這也是系統管理人員必須要思考如何架構,才最能符合環境所需,以下分別介紹各種架構。
2-6-1 集中式處理系統
表示『資料』與『應用系統』安裝在同一主機上,此主機的作業系統大多允許多人同時使用,譬如 Unix/Linux、PS2 等系統。多位使用者可同時透過網路連線登入系統操作。此系統是最傳統架構,但也是最安全的,任何安全措施只要在主機系統上實施即可。目前許多需要安全性較高的系統,或者小系統還是採用此架構。
集中式處理系統大部份工作負荷都落在主機上,如果工作負荷不是很大的話,此系統還算非常好。如果工作負荷慢慢增加(或資料量越來越大),而導致主機處理速度越來越慢,再來擴充系統,那可就不簡單了,因此,我們可再考慮下一個系統架構。
圖 2-6 集中式資料庫系統
2-6-2 主從式架構
集中式處理架構將所有負荷都落在主機上,而使用者電腦只做簡單的螢幕顯示與鍵盤輸入而已。於目前電腦的處理能力越來越強時,我們就考慮將部份工作移到使用者電腦上,分攤主機電腦的負荷,因此就有『主從式架構』(Client/Server Architecture)的產生。主從式架構就是將『資料』與『應用程式』分開,主機系統處理資料庫部份,並且可以存放多個資料庫,稱之為『資料庫伺服器』(Database Server)。另外,將應用程式安裝於使用者電腦上。此架構最典型的範例是 SQL Server + VB.net,在主機(Windows Server)上安裝 SQL Server 成為資料庫伺服器,在使用者電腦(Windows 7)上執行 VB.Net 的應用程式。
此系統的缺點是系統管理人員必須到每一個使用者電腦上安裝應用程式,或者當應用軟體更新時,很難掌握到每部電腦使否有同時被更新。基本上,如果系統固定於某一環境裡,此架構算是非常理想,如果應用環境太大,或出差人員常要到外地執行此程式時,我們就要考慮下一個系統架構。
圖 2-7 主從式資料庫系統
2-6-3 三層式應用系統架構
圖 2-8 三層式資料庫系統
如果選定一個地方存放應用程式,當使用者要執行程式時,再將它下載到使用者電腦上,如此就可以解決主從式架構的缺點。新的架構『三層式架構』(Three-Tier Architecture)是瀏覽器(IE/Chrome)、網頁伺服器(Web Server)與資料庫伺服器(Database Server) 等三個套件連結在一起。資料庫伺服器(如 SQL Server 或 MySQL)存放資料,最好由一部獨立主機來處理。網頁伺服器(如 IIS 或 Apache) 存放應用程式,也最好由一部主機獨立處理,這兩套系統都可用 Windows Server 或 Unix/Linux 系統安裝,如果處理資料不是很大的話,也可以整合在同一部主機內。如此一來,應用程式就必須利用 HTML 語法來編寫,並且必須植入資料庫的查詢語言(SQL 語法),因此就有 ASP.Net 與 PHP 語法的誕生。我們必須將 HTML 所編寫的應用程式下載到使用者電腦上執行,因此該電腦必須安裝可執行 HTML 語言的套件,就目前而言 IE 與 Chrome 兩套件最普遍。
簡單的說,只要使用者電腦上安裝標準的瀏覽器,就可以下載執行應用程式,透過網頁伺服器可以向資料庫系統查詢與處理資料。
2-6-4 個人資料庫
以上所介紹的三種資料庫系統架構大多屬於多人使用系統,運用於比較大的資訊系統,譬如:火車訂票系統、銀行交易管理系統等等。但還是有許多較隱密性資料,大多屬於專人員管理,不得輕易洩漏出去,譬如:秘書管理客戶資料、訪客登錄資料、或流動金管理等等,資料量也許很大需要專屬資料庫來管理,則可利用個人資料庫系統,譬如 Access 資料庫。一般個人資料庫大多提供經常性使用的操作介面,使用者不須編寫程式及可查詢、修改、插入等操作,譬如 Access 桌面操作選單。但也可以利用 SQL 工具查詢,甚至可編寫管理程式。但它僅能安裝於個人使用的電腦系統(如 Windows 7)上,他人無法利用網路連線存取該資料庫資料。
圖 2-9 個人資料庫
2-7 綜合練習
可查詢任何書籍及上網搜尋相關資料。
1. 請依照下列程序作答:
(1) 請選出一種您最熟悉的資訊系統。
(2) 請列出此資訊系統的 5 項功能。
(3) 請敘述您如何建構此資訊系統。
2. 請敘述『關聯式資料庫系統』的特性如何?
3. 請敘述『主從式資料庫系統』的特性如何?
4. 請敘述『網頁資料庫系統』的特性如何?