Chap 3 資料庫模型與處理架構
3-1 資料模型的基礎-說明 「資料模型」(Data Model)是使用一組整合觀念來描述資料、資料間的關係和資料的限制條件(是否是正確資料),也就是用來描述資料庫中資料的特性。
3-1 資料模型的基礎-圖例
3-1 資料模型的基礎 概念資料模型:這是與資料庫管理系統無關,即沒有使用特定資料庫種類來建立資料模型,以概念方式描述大多數使用者認知的資料。 邏輯資料模型:使用特定資料庫種類建立的資料模型,例如:關聯式資料模型,這是用來描述ANSI/SPARC三層資料庫架構中,位在概念層以上的概念和外部層資料。 實體資料模型:這個資料模型是用來描述ANSI/SPARC三層資料庫架構的內部層資料。
3-1 資料模型的基礎 完整的資料庫程式設計,以關聯式資料庫設計為例: 先收集使用者認知的資料,以概念資料庫設計建立概念資料模型 接著將概念資料模型執行關聯表正規化,轉換成邏輯資料模型 最後建立實體資料模型的實體資料庫設計
3-1-2 概念資料模型 建立概念資料模型的原因,如下所示: 能夠進一步了解資料範圍。 增加與最終使用者的溝通機會。 開發與資料庫管理系統無關的資料模型。 儘早發現資料庫設計的錯誤。
3-1-2 概念資料模型 概念資料模型最常使用「實體關聯模型」(Entity-Relationship Model,簡稱E-R Model)以圖形方式建立,稱為「實體關聯圖」(Entity-Relationship Diagram),這是1976年由Peter Chen提出,他相信在真實世界中,實體和其關聯是最自然的模型化觀念,換句話說,實體關聯模型的基礎是建構在實體和關聯性之上。
3-1-2 概念資料模型
3-1-3 邏輯資料模型 第一個邏輯資料模型是關聯式模型,因為是關聯式資料庫的資料模型,所以本書稱為關聯式資料庫模型。 關聯式資料庫模型是由E. F. Codd在1970年所提出,邏輯資料模型主要是由三種元素組成,如下所示: 資料結構(Data Structures):資料的組成方式,以關聯式資料庫模型來說,就是欄和列組成的表格。 資料操作或運算(Data Manipulation或Operations):資料的相關操作。例如:新增、刪除、更新和查詢。 完整性限制條件(Integrity Constraints):維護資料完整性的限制條件,其目的是確保資料是合法的資料。
3-1-3 邏輯資料模型-說明 資料庫系統演進各年代的資料庫系統中,其使用的資料庫模型就是邏輯資料模型,主要有四種邏輯資料模型,如下所示: 網路式資料庫模型(Network Databse Model)。 階層式資料庫模型(Hierarchical Database Model)。 關聯式資料庫模型(Relational Database Model)。 物件導向式資料庫模型(Object-Oriented Database Model)。
3-1-3 邏輯資料模型-圖例 將學校的開課資料的實體關聯圖轉換成邏輯資料模型
3-1-4 實體資料模型 實體資料模型(Physical Data Model)是針對指定資料庫管理系統建立實際架構的模型,資料模型可以顯示資料是如何實作和儲存在資料庫。 關聯式資料庫管理系統的實體資料模型是建立關聯表的表格、關聯性和定義索引。
3-1-4 實體資料模型-圖例
3-2 資料庫模型 3-2-1 網路式資料庫模型 3-2-2 階層式資料庫模型 3-2-3 物件導向式資料庫模型 3-2-4 物件關聯式資料庫模型
3-2-1 網路式資料庫模型 網路式資料庫和階層式資料庫系統約在同一個年代開發,早於關聯式資料庫系統,不過網路式資料庫模型(Network Database Model)是在關聯式資料庫模型出現後才出現的資料模型(這是參考關聯式資料庫模型所導出),資料模型採用網路圖形來連結資料。 網路式資料庫模型支援多對多關聯性,這是依據1971年由CODASYL DBTG(Conference on Data Systems Languages Database Task Group)組織所提出的報告,或稱為DBTG模型,Database Task Group從1960年代後期就開始發展的網路式資料庫系統。
3-2-1 網路式資料庫模型 網路式資料庫模型是將資料組織成網路狀圖形,資料間連接可以擁有迴圈。網路式資料庫模型的兩種基本型態,如下所示: 記錄型態(Record Type):記錄型態是由一組屬性所組成,每一個記錄型態的成員稱為記錄,資料是一組記錄的集合。 連接型態(Link Type):它是連接兩個記錄型態的型態,屬於一對多關聯性(Relationship),這是從稱為「擁有者型態」(Owner Type)關聯到多個「成員型態」(Member Type)。
3-2-1 網路式資料庫模型 網路式資料庫模型是建立在兩種「集合結構」(Set Structures),也就是一組記錄型態的記錄集合和一組連接型態的連接集合,如下圖所示:
3-2-1 網路式資料庫模型
3-2-2 階層式資料庫模型 階層式資料庫模型(Hierarchical Database Model)類似網路式資料庫模型,只是使用樹狀結構來組織資料,記錄資料間是以父子關係來建立鏈結,子記錄只能擁有一個父記錄。 在1960年代後期階層式資料庫模型的資料庫管理系統非常的普遍,最著名的階層式資料庫系統是1968年IBM公司開發的「IMS」(Information Management System),這也是最早商用的資料庫管理系統。
3-2-2 階層式資料庫模型 階層式資料庫模型的資料結構一定擁有一個「樹根」(Root),使用「父子關聯性」來鏈結記錄集合,將資料建立成階層的樹狀結構。 記錄型態(Record Type):記錄型態是由一組欄位屬性組成。每一個記錄型態的成員稱為記錄,資料是一組記錄的集合。 父子關聯型態(Parent-child Relationship Type):兩個記錄型態間的連接型態,屬於一對多關聯性,這是從稱為「父記錄型態」關聯到多個「子記錄型態」。
3-2-2 階層式資料庫模型 階層式資料庫模型是由多個記錄型態,然後使用父子關聯型態將它連接起來,如下圖所示:
3-2-2 階層式資料庫模型
3-2-2 階層式資料庫模型 多對多關聯性在階層式資料庫模型可以重複記錄型態,如下圖所示:
3-2-2 階層式資料庫模型 「虛擬記錄型態」(Virtual Record Type)的記錄只是一個指標,指向其他記錄型態的記錄,如下圖所示:
3-2-3 物件導向式資料庫模型 「物件導向式資料庫模型」(Object-Oriented Database Model)是在物件導向程式語言新增資料庫功能,換句話說,就是使用物件導向方式來模擬關聯式資料庫的功能。 物件導向式資料庫模型的主要目的是統一應用程式和資料庫開發的資料模型和語言環境,物件導向式資料庫模型讓程式設計和資料庫統一使用物件導向方式進行設計。
3-2-3 物件導向式資料庫模型 物件是資料與相關處理資料的程序和函數結合在一起的組合體,資料就是變數,程序和函數,其中程序與函數稱為方法,如下圖所示:
3-2-3 物件導向式資料庫模型 狀態(State):物件所有「屬性」的狀態值,屬性是用來儲存物件的狀態,可以簡單的只是一個布林值變數,也可能是另一個物件,例如:車子的車型、排氣量等屬性。 行為(Behavior):行為是物件可見部分提供的服務,也就是塑模所抽象化的操作,可以作什麼事,使用方法來實作行為,例如:車子可以發動、停車、加速和換擋等。 識別字(Identity):識別字是用來識別不同的物件,每一個物件都擁有獨一無二的識別字。
3-2-3 物件導向式資料庫模型 類別是一種分類,將擁有相同特性的物件集合歸類在同一類別,在前面我們建立摸擬各種車輛的Car、Car1、Car2、Car3…等物件,各物件擁有相同屬性和行為,只是狀態不同。 簡單的說,這些物件屬於同一類,反過來看,我們可以建立一個範本來建立這些物件,如同工廠依照藍圖製造車輛,這個範本就是類別,屬於同一類別的物件即該類別的「實例」(Instance)。
3-2-3 物件導向式資料庫模型 繼承(Inheritance)是物件導向程式設計的重要觀念,繼承是宣告的類別繼承現存類別的部分或全部的成員資料和方法、新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法或資料。
3-2-3 物件導向式資料庫模型 類別的繼承關係可以建立「類別架構」(Class Hierarchy),如下圖所示:
3-2-3 物件導向式資料庫模型 物件導向式資料庫(Object-oriented Database)使用物件導向式資料模型,以物件導向程式語言定義資料庫的結構,以Java語言來說就是類別(Class),一個類別相當於關聯式資料庫的一個關聯表,例如:使用Java語言定義Book類別,如下所示: class Book { public String b_no; public String title; public float price; public Author getAuthor() { …… } public Publisher getPublisher() { …… } }
3-2-3 物件導向式資料庫模型 物件導向式資料庫是物件導向程式設計和資料庫技術的聯姻,如下圖所示:
3-2-4 物件關聯式資料庫模型 「物件關聯式資料庫模型」(Object-relational Database Model)是一種結合物件導向式和關聯式資料庫模型,擴充關聯式資料庫模型的功能,所以其基本的觀念仍然是關聯式資料庫模型,只是新增結構化屬性,能夠自行定義資料型態。 國際標準組織(International Standards Organization, ISO)在新版的標準SQL語言新增物件關聯式模型的觀念,稱為SQL 99或SQL 3,在SQL:99新增物件觀念,可以擴充資料型態儲存複雜的資料,但是仍相容於關聯式資料庫。
3-2-4 物件關聯式資料庫模型 物件關聯式資料庫模型支援「巢狀關聯表」(Nested Relations),也就是說,資料型態不只可以使用關聯式資料庫的基本型態,還可以使用自訂型態的物件,相當於是另一個關聯表。例如:在Authors關聯表新增名為address的新型態,如下圖所示:
3-2-4 物件關聯式資料庫模型 物件關聯式資料庫的關聯表和巢狀關聯表,如下圖所示:
3-3 資料庫系統的種類 資料庫系統以使用者人數來區分: 資料庫系統以使用範圍(Scope)區分: 單人使用 多人使用 資料庫系統以使用範圍(Scope)區分: 桌上型(Desktop) 工作群組(Workgroup) 企業級(Enterprise) 資料庫系統以位置來區分,資料庫系統的資料處理可能位在同一台主機或網路上的其他主機: 集中式資料處理(Centralized Data Processing) 分散式資料處理(Distributed Data Processing)
3-3 資料庫系統的種類 如果資料庫系統使用前述的資料庫模型來區分,資料庫系統可以依使用的資料庫模型進行分類,如下所示: 網路式資料庫系統。 階層式資料庫系統。 關聯式資料庫系統。 物件導向式資料庫系統。 物件關聯式資料庫系統。
3-4 架構的基礎 「架構」(Architecture)這個名詞可以指單獨一台電腦設計,不過對於企業組織來說,通常是指整個公司組織電腦系統的配置,包含實際使用的電腦硬體種類、網路、配置的位置和使用的電腦運算方式。 資料庫系統架構可以分成兩種處理架構,如下所示: 集中式處理架構(Centralized Processing Architectures)。 分散式處理架構(Distributed Processing Architectures)。
3-5 集中式處理架構 在早期大型主機(Mainframe)時代,電腦系統主要是使用IBM公司開發的「系統網路架構」(Systems Network Architecture, SNA),這種架構屬於集中式處理架構,擁有一台大型主機,使用多個終端機與主機溝通。 以資料庫系統來說,資料庫管理系統和作業系統都在同一台電腦執行,使用者透過終端機將資訊送到主機,例如:資料庫查詢指令,然後從主機取得回應結果,在終端機顯示的結果是由主機產生的資料,終端機只負責顯示取得的資料。
3-5 集中式處理架構
3-6 分散式處理架構-前後台 資料庫系統分成使用者的前台(Frontends)和資料庫的後台(Backends),分別分散執行所需的工作,如下所示: 前台(Frontend):使用者執行的應用程式,用來執行資料庫查詢等資料處理,然後顯示執行的結果。 後台(Backend):執行資料處理的資料庫管理系統。
3-6 分散式處理架構-前後台圖例
3-6-1 檔案分享架構 「檔案分享架構」並不是一種主從架構,它是主從架構的前身,早期個人電腦網路都是採用檔案分享架構,主機扮演的角色單純只是「檔案伺服器」(File Server)。 客戶端向檔案伺服器請求資料檔案,然後將檔案下載到客戶端,然後在客戶端電腦啟動資料庫管理系統執行資料處理,真正執行資料處理是在客戶端的個人電腦或工作站,檔案伺服器只是儲存和管理檔案,稱為「檔案伺服器模型」。
3-6-2 主從架構的基礎 主從架構的電腦本身並沒有分別,只是扮演不同的角色,分為伺服端(Server)和客戶端(Client),如下所示: 伺服端(Server):在主從架構中扮演提供服務(Service)的提供者(Provider)角色。 客戶端(Client):在主從架構中的角色是提出服務請求(Request)的請求者(Requester)。
3-6-2 主從架構的基礎
3-6-3 二層式主從架構 標準主從架構是二層式主從架構(Two-Tier Client/Server Architecture)。 二層式主從架構可以分成兩部分,如下: 展示層(Presentation Tier):與使用者互動的使用介面,這是實際使用者看到的應用程式,同時負責商業邏輯(Business Logic)和資料處理邏輯(Data Processing Logic)。 資料層(Data Tier):負責資料的儲存,以資料庫系統來說,就是管理資料庫的資料庫管理系統。
3-6-3 二層式主從架構
3-6-3 二層式主從架構 缺點 更改商業和資料處理邏輯就需要重新修改、編譯和安裝展示層應用程式。 二層式主從架構只傳遞回應資料,但是真正的資料處理是在展示層應用程式,所需的資料仍然需要從資料層傳送到展示層,增加區域網路負載。 在從端的每一個展示層應用程式都需要獨立的資料庫連結,並且保持連線狀態,而區域網路最多只能支援大約100人同時建立資料庫連結。 客戶端應用程式的程式碼是使用特定資料庫管理系統的函式庫,如果資料庫管理系統更改時,展示層應用程式的程式碼也須修改。
3-6-4 三層式主從架構 擴充二層式主從架構,在之間新增一層「商業邏輯層」(Business Logic Tier),就成為「三層式主從架構」(Three-Tier Client/Server Architecture),將二層式主從架構展示層的資料處理和商業邏輯功能獨立成「應用程式伺服器」(Application Server)。 應用程式伺服器(Application Server)如同餐廳中超高效率的服務生,從展示層的前台取得點選的套餐,將它送到後台的資料庫伺服器取得所需的各種餐點,在處理後,送到前台的是一套完整組合的套餐。
3-6-4 三層式主從架構-圖例
3-6-4 三層式主從架構 優點 清楚切割使用介面的展示層和商業邏輯層的資料處理與商業邏輯,如此可以重複使用資料處理和商業邏輯的現成軟體元件,加速應用程式的開發。 集中管理和維護商業邏輯,如有更改,只需更改商業邏輯層的應用程式伺服器,而不用更改展示層的應用程式。 更改資料層的資料庫管理系統,同樣不會影響展示層的應用程式。 商業邏輯層和資料層的實際架構可以位在同一台電腦伺服器,或是不同電腦使用高速網路連接,如此可以解決網路資料傳遞的頻寬問題。
3-6-5 多層架構 多層架構(N-Tier Architecture)是將三層式主從架構進行再次的擴充,N表示分割成3、4或5等層,需視資料庫系統架構的需求來進行分割。 多層架構是將三層式架構的商業邏輯層架構再次分割成獨立軟體元件的多個應用程式伺服器,事實上,三層式架構可視為一種最基本的多層架構。
3-6-5 多層架構-網頁資料庫圖例
3-7 中介軟體 「中介軟體」(Middleware)是一種軟體用來整合不同應用程式,以便各應用程式可以使用標準方式進行連結和資料的交換。 中介軟體可以隱藏背後實際執行的應用程式,只需透過中介軟體就可以進行與其他應用程式的通訊和資料交換。
3-7-1 資料庫系統的中介軟體 在資料庫系統架構,中介軟體在二層式主從架構是連接前台和後台的軟體程式,在三層式主從架構是用來連接商業邏輯層和資料層的資料庫管理系統。 中介軟體的主要的目的是簡化資料庫應用程式的開發,因為資料庫管理系統的種類繁多且支援多種作業系統,各家廠商都擁有專屬函式庫呼叫來進行通訊和資料交換。
3-7-1 資料庫系統的中介軟體優點
3-7-2 微軟的中介軟體-說明 微軟主導的資料庫中介軟體有兩種: ODBC。 OLE DB。 OLE DB和ODBC的主要差異是OLE DB資料來源並不限於關聯式資料庫,它也可以使用在非關聯式資料庫、試算表或文字檔案等其他資料來源。
3-7-2 微軟的中介軟體-ODBC 微軟主導的資料庫中介軟體稱為「ODBC」,ODBC提供標準方式存取關聯式資料庫伺服器的資料,程式使用「ODBC API」呼叫來建立所需的應用程式,ODBC架構主要分成兩個部分: ODBC驅動程式管理員(ODBC Driver Manager):管理ODBC支援的各種驅動程式,以便使用正確的ODBC驅動程式來轉換ODBC API呼叫。 ODBC驅動程式(ODBC Driver):各種資料庫管理系統支援的驅動程式,可以將ODBC API呼叫轉換成專屬資料庫管理系統的原生API呼叫。
3-7-2 微軟的中介軟體-ODBC(圖例)
3-7-2 微軟的中介軟體-OLE DB OLE DB(也寫成OLE-DB或OLEDB)是一種微軟開發的資料庫存取介面API,它是繼ODBC後,微軟另一種開放規格的資料存取介面。 OLE DB是使用COM(Component Object Model)元件來實作存取介面,可以使用一致行為來存取不同資料來源的資料,支援關聯式資料庫、非關聯式資料庫的物件導向資料庫、文字檔、電子郵件、目錄服務、試算表和商業物件等不同來源的資料。
3-7-2 微軟的中介軟體-OLE DB
3-7-3 昇陽的JDBC 昇陽公司提出的資料庫中介軟體是「JDBC」是一種開放標準的Java程式介面,可以讓Java程式連結資料庫管理系統。 以Java程式語言來說,這是一個實作JDBC驅動程式介面的類別,即JDBC API,JDBC驅動程式介面主要分為兩類: 透過其他中介軟體作為另一種中介軟體的橋樑。 JDBC驅動程式介面可以直接連接資料庫管理系統。
3-7-3 昇陽的JDBC-圖例
3-8 分散式資料庫系統 若資料庫伺服器只有一個,資料庫的資料是集中儲存在一個地方,稱為「集中式資料庫系統」。 集中式資料庫系統雖然方便資料管理,但風險高、易受網路流量影響傳輸速度且主機負荷量大。 分散式資料庫系統:將資料依特性分散儲存在以網路的連接的資料庫伺服器上
3-8 分散式資料庫系統-圖例
3-8-1 分散式資料庫系統的基礎 「分散式資料庫」(Distributed Database, DDB):指資料在邏輯上屬於同一個資料庫系統,不過事實上,實際的資料是分散儲存在以網路連接的不同資料庫伺服器上。 「分散式資料庫管理系統」:管理分散式資料庫的軟體,提供資料的分散儲存,但是使用者並不會認為它是在存取分散儲存的資料,對於使用者來說,仍然是一個完整的資料庫,如此稱為「透通性」(Transparent)。
3-8-1 分散式資料庫系統的基礎 最基本的分散式資料庫系統架構是使用主從架構,它是由多個站(Sites)或稱為點(Nodes)所組成,使用通訊網路(Communication Network)連接,可以使用區域網路(Local Area Network)或廣域網路(Wide Area Network)。 分散式資料庫系統分成1~N個站,有些站的角色是客戶端(從端),有些站是伺服器(主端),有些站同時擁有客戶和伺服器,資料庫分散置於擁有伺服器的各站。
3-8-1 分散式資料庫系統的基礎
3-8-1 分散式資料庫系統的基礎 分散式資料庫系統分成1~N個站,有些站的角色是客戶端,有些站是伺服器,有些兩者兼具,資料庫分散於擁有伺服器的各站 分散式資料庫系統主要在客戶端軟體處理分散功能,所以客戶端需要產生多站查詢和交易管理的執行計畫
3-8-2 分散式資料庫系統的優缺點 優點 增加資料庫系統的執行效能:在最近的地方就可以取得所需的資料。 提高可靠性和可用性:就算有些伺服器當機或出現網路問題,分散式資料庫系統仍然擁有足夠的妥善率,不會影響整個資料庫系統的運作。 更多的彈性和擴充性:因為資料是分散儲存在多台伺服器,不論擴充與重新配置資料庫伺服器的彈性都比較高。 分享與區域自主性:資料庫伺服器的資料可以分享,也可以只讓區域的使用者存取。
3-8-2 分散式資料庫系統的優缺點 缺點 系統複雜:資料是分散儲存在各地的伺服器,所以分散式資料庫系統的複雜度相當高。 成本高昂:相關應用程式的開發成本隨著分散程度而提高。 維護不易:分散式資料庫系統維護不易,容易產生資料安全與整合問題。 缺乏標準:目前並沒有分散式資料庫系統的官方標準。
3-8-3 分散式資料庫系統的種類 同質分散式資料庫系統(Homogeneous Distributed Database System) 指所有資料庫伺服器都採用相同的資料庫管理系統,使用相同的資料庫模型和資料操作方式。 異質分散式資料庫系統(Heterogeneous Distributed Database System) 指資料庫伺服器使用不同的資料庫管理系統,例如:同時使用SQL Server和Oracle,此時需要考量不同資料庫管理系統和不同格式資料間的整合問題。
3-8-4 資料分割-說明 「資料分割」(Data Fragmentation)是分割資料庫的資料成為一個個片斷(Fragment),以便將各片斷分散儲存在其他資料庫伺服器,其中每一個片斷是資料庫的一個較小的邏輯單位。 以分散式關聯式資料庫為例,各資料庫只會儲存關聯表的部分片斷,其分割方式有水平方向的水平分割和垂直方向的垂直分割。
3-8-4 資料分割-水平分割 水平分割(Horizontal Fragmentation) 以關聯式資料庫為例,就是將關聯表以值組的列為分割單位,分割成更小的邏輯單位。
3-8-4 資料分割-垂直分割 垂直分割(Vertical Fragmentation) 以關聯式資料庫為例,就是將關聯表以屬性的欄為分割單位,分割成更小的邏輯單位。
3-8-5 資料複寫-說明 「資料複寫」(Data Replication)是分散式資料庫系統的重要特點,複寫是建立資料庫的備份,其中原始資料庫稱為主資料庫(Master),複寫的資料庫稱為拷貝資料庫(Replica),在主資料庫和拷貝資料庫之間需要定時進行同步更新。 在分散式資料庫系統使用複寫的方式分為: 沒有複寫 完全複寫 部分複寫
3-8-5 資料複寫-圖例