Presentation is loading. Please wait.

Presentation is loading. Please wait.

Network Database Programming

Similar presentations


Presentation on theme: "Network Database Programming"— Presentation transcript:

1 Network Database Programming
Java概論與實作 Java System Concepts 網路資料庫設計 Network Database Programming 賈蓉生 胡大源 林金池 編著

2 第一篇 Java資料庫環境

3 在眾多資料庫中,本書選定Java/Access為範例資料庫系統,以實作方式表現網站資料庫之功能。Access應屬最方便且功能完整之資料庫,凡有Office的電腦,開機即可使用,無需再另添購軟體。Java是功能強大的物件導向語言,本身即擁有網路功能,是多數網路電玩採用的設計語言,也是多數大銀行建立網路銀行的設計語言,本書使用Java,網路遠端操作資料庫之各項應用。

4 第一章 Java系統安裝

5 1-1 簡介 本系列叢書使用標準版J2SE,亦即標準版開發套件(J2SE Development Kit),簡稱為jdk。讀者可於網站( 下載、或使用本書隨書光碟提供之Java系統安裝程式,如何安裝、如何設定?請參考本章執行步驟。 本章內容包括安裝Java 系統軟體 (jdk-6.0)、設定Java環境、編輯第一個Java程式、編譯Java程式、執行類別檔案。

6 1-2 安裝Java 系統軟體 (jdk-6.0) jdk-6.0為Java程式之系統軟體,讀者可於 “ 免費下載、或使用本書光碟C:\BookJavaVol_5\System已備妥之執行檔 “jdk-6u6-windows-i586-p.exe”。

7 1-3 設定Java環境 Java之所有系統執行式均備儲於C:\Program Files\Java\jdk1.6.0_06\bin目錄內。當要編譯Java程式、或執行Java程式碼時,必須先將該程式或程式碼移置於此目錄內,才可執行,甚為不便。 為了避免必須將程式碼移置至C:\Program Files\Java\ jdk1.6.0_06\bin目錄內之不便,讓任一目錄內之Java程式、或Java程式碼均可在自己目錄內執行,我們應設定Java執行路徑之環境。

8 1-4 編輯第一個Java程式 可儲存Java程式之編輯工具非常多,筆者認為 “記事本” 最為樸實,負擔輕、效率高,因此建議讀者以 “記事本” 為Java程式之編輯器。 1 class MyfirstJava{ public static void main(String[ ] args){ System.out.println("My first Java program"); } 5 }

9 第二章 第一個Java網站資料庫

10 2-1 簡介 在尚未真正進入基礎網站資料庫精髓之前,為了讓讀者先觸摸Java與Access之網站資料庫關係,本章將作片段基礎介紹:建立資料庫、設定ODBC、網路輸入/讀取資料。

11 2-2 建立Access資料庫(Establish Database)
本書使用Java/Access系統,以Access2007為範例資料庫(如要使用其他資料庫,請自行按規定轉換),本節以手動於目錄C:\BookJavaVol_5\Program\ch02建立範例資料庫Book.accdb。

12 2-3 建立資料表(Establish Table)
延續前節資料庫Book.accdb, 於目錄C:\BookJavaVol_5\Program\ch02、開啟資料庫Book.accdb \ 建立資料表。

13 2-4 設定ODBC 當資料庫建立完成後(如前節之Book.accdb),我們雖可立即以手動方式輸入/讀取資料。但却無法藉由Win作業系統,以應用程式輸入/讀取資料。 為了要藉由Win作業系統之應用程式輸入/讀取資料,必須先設定ODBC(Open Database Connectivity),用以連通Win作業系統與資料庫。

14 2-5 遠端輸入(Network Writing)
設計Server/Client程式,於Client端鍵入指令,經由網路對Server端之資料庫作資料輸入。本章用意是請讀者體驗第一個Java網站資料庫之資料輸入,有關設計細節將於爾後各章節另詳細介紹。 參考範例01

15 2-6 遠端讀取(Network Reading)
設計Server/Client程式,於Client端鍵入指令,經由網路對Server端之資料庫作資料讀取。本章用意是請讀者體驗第一個Java網站資料庫之資料讀取,有關設計細節將於爾後各章另詳細介紹。 參考範例02

16 網路串流(Data Stream in Network)
第二篇 網路串流(Data Stream in Network)

17 人說Java語言有許多其他語言所不能及的優點,網路資料串流就是其中最大優點之一,不需要如其他語言大張旗鼓地先架設網站平台,然後才可執行網路資料傳遞,Java只需於程式中寫幾列程式碼,即可執行網路資料傳遞。 有關Java在網路上之應用,讀者可參考本系列叢書第二冊 “Java網路入門程式, 碁峰EL0049”,本篇將以Server / Client為兩組端點、設計Java網路程式,觀察如何將資料納入網路串流,傳輸於兩端點之間。

18 網路結構概念 (Network Structure Concepts)
第三章 網路結構概念 (Network Structure Concepts)

19 3-1 簡介 網路系統 (Network System) 是多個處理器(Processors) 的組合,各處理器散置於各不同地區,彼此間互不共享記憶體,各有其自己的記憶體(Memory),以地區網路(LAN Local Area Network) 或廣域網路(WAN Wide Area Network) 互通訊息。本章將探討網路系統結構之概念。

20 3-2 網路意義(Background) 網路系統(Network System) 是多個電腦處理器(Processors) 的組合,從小型的手持微電腦、個人電腦、到大型的工作站,散置於各不同地區(Sites),由網路互相連通、互相支援。

21 3-3 節點連接(Topology) 網路系統是將散置於各處的處理器(Processors) 以網路連接,互通訊息。其中有許多連接方式,各有其優缺點,我們考量的重點有: (1) 實體安裝代價(Installation Cost):連接線愈多,實體代 價愈高。 (2) 通訊時間代價(Communication Cost):連接線愈多,兩 節點連通途徑愈多,有較多最短途徑的選擇,節省通 訊時間,致通訊時間代價降低。 (3) 執行方便考量(Availability):連接線愈多,兩節點連通 途徑愈多,有較多選擇途徑。同時如果有一連線損壞, 也有較多機會以其他途徑取代之。

22 3-4 網路通訊(Communication)
當探討網路通訊,我們須考量:(1) 名稱解析(Naming Resolution),各節點之行程(Processes) 如何在廣大的網域中互相定址對方? (2) 路由策略(Routing Strategies),如何在網域中選擇傳遞資料之途徑? (3) 連接策略(Connection Strategies),網路中如何安排多個行程同時傳遞資料? (4) 衝突避免(Contention),當發生網路上爭議的問題時,如何解決?

23 3-5 網路通訊協定(Communication Protocols)
網路通訊協定(Communication Protocols) 是以多階層(Multiple Layers) 方式設計,網域網路採用國際標準組織(ISO International Standards Organization) 所提出的協定(Protocol)

24 3-6 網路故障處理(Robustness) 網路節點眾多,發生故障的機會更是稀鬆平常,如連線故障(Failure of Link)、電腦節點故障(Failure of Site)、資料遺失(Loss of Message) 等。 為了維護網路隨時保持良好狀態,網路應有能力執行:偵測故障(Detect Failure)、重組系統(Reconfiguration)、與修補故障(Recovery from Failure)。

25 3-7 網站資料庫處理(Database in Network)
1、於Server端建立資料庫,設定ODBC連接Win作業系統; 2、於Server端設計網站程式:(1)建立網站;(2)建立連接平台,等待Client端來連接;(3)建立輸入/輸出串流,與Client端傳遞資料;(4)經由Win作業系統連通資料庫。 3、於Client端設計網路程式:(1)建立連接平台,連接Server端;(2)建立輸入/輸出串流,將操作指令傳遞至Server端,同時接收Server端回傳之訊息。

26 網路連接(Server/Client Connection)
第四章 網路連接(Server/Client Connection)

27 4-1 簡介 本章將介紹Server / Client端點如何作網路連接。設計Server端網路程式,等待被Client端連接;設計Client端網路程式,連接Server端。 Server端以設定之執行埠(port) 建置網站平台(ServerSocket),再以網站平台建立連接平台(Socket),當Client端有訊息來連接時,以連接平台(Socket) 之接收功能接受連接,並捉取Client端的網址(IP) 印出之。Client端以Server之網址(IP)、及設定之執行埠(port) 建立網路連接平台(Socket,由Client端連接Server端。

28 4-2 ServerSocket Class java.net.ServerSocket繼承自Object,此類別產生的新物件,可依本機之網址(IP)、與設定之執行埠(port) 建立Server端網站平台(ServerSocket),等待Client端來連接。其中執行埠(port) 不得設定已被使用者(參考附錄A),否則將無法成功建立。 參考範例03

29 4-3 InetAddress Class java.net.InetAddress繼承自Object,此類別可依指定電腦之名稱或IP,建立一個網路位置,使用在封包(Datagram Packet) 或網路平台(Socket) 之類別內。此類別無建構子,故無法以建構子產生新物件,但可以類別方法程序回傳一個物件(如範例04之列06)。

30 4-4 Socket Class java.net.Socket繼承自Object,此類別產生的新物件,可依網站之IP和port,與Server網站連接,進而以網路串流執行遠端讀取或寫入。 參考範例05

31 4-5 指令參數與Server/Client連接
指令參數是位於執行指令後端之參數。於前節、於程式內固定設置IP與port,一旦完成編譯後,即無法改變,極不方便。如果改以指令參數(Command Parameters) 就可機動設定IP與port,我們可將完成之編譯碼,使用於任何Server/Client之連接,這也是正式應用之設計方式。 參考範例06

32 訊息傳遞(Message Transition)
第五章 訊息傳遞(Message Transition)

33 5-1 簡介 當Server端與Client端連接後,彼此以網路串流將資料相互傳遞。本章介紹如何於Client端以指令參數輸入訊息,交由網路輸出串流物件,傳送至Server端印出,再讀取Server端設定之訊息,回傳至Client端印出,完成以網路串流相互傳遞訊息。

34 5-2 DataInputStream Class
java.io.DataInptStream繼承(extends) 自FilterInputStream→InputStream→Object,且承作(implements) 自DataInput。此類別為串流物件,可用於讀取網路平台之輸入串流。

35 5-3 DataOutputStream Class
java.io.DataOutptStream繼承(extends) 自FilterOutputStream→ OutputStream→ Object,承作(implements) 自DataOutput。此類別為串流物件,可用於從網路平台輸出串流。

36 5-4 PrintStream Class java.io.PrintStream繼承(extends) 自FilterOutputStream→ OutputStream→ Object。此類別為串流物件,可用於從網路平台輸出串流,與DataOutputStream有相同的功能,使用環境則更為普遍。

37 5-5 訊息傳遞操作(Message Transition)
以類別DataInputStream、PrintStream設計輸入/輸出網路串流,設計Server/Client範例程式07,將Client端之參數訊息傳遞至Server端,同時將Server端之即定訊息回傳至Client端。 參考範例07

38 為了傳遞中文訊息,我們改以DataOutputStream建立輸出串流物件,以其方法程序writeUTF() 網路輸出中英文字串訊息、以readUTF() 讀取網路中英文字串訊息。
參考範例08

39 資料庫建立(Establish Database)
第三篇 資料庫建立(Establish Database)

40 除了由手動建立資料庫框架之外,其餘如資料表建立(Tables)、檢視表建立(Views)、資料輸入(Input)、資料新增(Insert)、資料更新(Update) 資料刪除(Delete)等,均可藉由Java程式在網路上作遠端操作。 筆者強烈推薦讀者參考本系列叢書第四冊 “資料庫入門程式, 碁峰EL0051”,先行了解各類型問題的操作指令。本篇將以Server/Client網路連接方式,由Client端鍵入指令,遠端操作Server端之資料庫。

41 資料表建立(Establish Tables)
第六章 資料表建立(Establish Tables)

42 6-1 簡介 當手動建立資料庫以後,我們即可利用網路,遠端操作該資料庫。資料庫建立於Server端,指令由Client端鍵入,執行操作。
當手動建立資料庫以後,我們即可利用網路,遠端操作該資料庫。資料庫建立於Server端,指令由Client端鍵入,執行操作。 本章將以範例實作,介紹如何遠端操作資料表建立(Tables Establish)、限制設定(Constraints)、欄位變更(Fields Alter)、資料表刪除(Tables Delete)。

43 6-2資料型態(Datatype)

44 6-3資料表建立(Tables Establish)
於Server端,參考2-2節手動建立資料庫(Database),參考2-4節設定ODBC,使資料庫與Win作業系統(Operating System) 連通;設計Server端應用程式(Application Program),連通Win作業系統與資料庫;設計Client端操作程式,鍵入指令經由網路遠端操作資料庫,建立資料表。 參考範例09

45 6-4 限制設定(Constraints) 建立資料表時,我們可對各欄位之內容作一些限制(Constraints),常用的限制有:主索引欄位設定、必須資料欄位設定、獨一無二欄位設定。 SQL語言提供指令 “PRIMARY KEY” 設定主索引欄位;提供指令 “NOT NULL” 設定必須資料欄位;提供指令 “UNIQUE” 設定獨一無二欄位。 參考範例10

46 6-5資料表變更(Alter Table) 資料表變更常用於資料型態變更(Alter Data Type)、與欄位變更(Alter Field),前者為改變資料之型態或長度;後者為增加欄位或刪除欄位。

47 6-5-1資料型態變更(Alter Data Type)
SQL語言提供指令 “ALTER TABLE tablename ALTER COLUMN field type(n)” 變更資料之型態(type) 或長度(n)。 參考範例11

48 6-5-2 欄位增刪(Add/Drop Fields)
SQL語言提供指令 “ALTER TABLE tablename ADD COLUMN field type(n)” 增加新欄位;提供指令 “ALTER TABLE tablename DROP COLUMN field” 刪除欄位。 參考範例13

49 6-6 資料表刪除(Drop Table) 於本章前數節、我們探討到如何以Java建立資料表、變更資料表,本節將延續探討刪除資料表。SQL語言提供指令 “DROP TABLE tablename” 刪除資料表。 參考範例15

50 資料變更(Data Modification)
第七章 資料變更(Data Modification)

51 7-1 簡介 當資料表建立完成後,下一步應考量如何儲存資料、與應用資料,依循本書軌跡,我們設計Server/Client網路程式,由Client端鍵入指令,對Server端之資料庫執行資料新增(Insert)、資料刪除(Delete)、與資料更新(Update)。

52 7-2 資料新增(Insert) SQL提供指令 “INSERT INTO” 執行資料庫資料新增,執行時需注意:(1) 必須是整個資料組(Tuple) 的新增,無法僅新增資料組部分欄位(Attributes) 內之資料;(2) 於一個時間內,只允許一個資料表(Relation) 執行一組資料新增,如果要對多個資料表新增多組資料,則必須分多次執行。 參考範例16

53 7-3 資料更新(Update) SQL語言提供指令 “UPDATE … SET …” 執行資料庫資料更新。執行資料更新時,可對資料組中部分欄位(Attributes) 內之資料作更新。 參考範例17

54 7-4 資料刪除(Delete) SQL語言提供指令 “DELETE FROM” 執行資料庫資料刪除。與資料新增相同,執行時需是整個資料組(Tuple) 的刪除,無法僅刪除資料組部分欄位(Attributes) 內之資料。 參考範例18

55 檢視表建立(Establish Views)
第八章 檢視表建立(Establish Views)

56 8-1 簡介 為了更靈活地應用資料庫,我們可就即有的資料表(Tables),依功能需要更改其中架構,建立另一個新資料表,如此新建之資料表是謂 “檢視表(View)”。 檢視表(View) 可依一個資料表、或由多個資料表改建。前者以一個資料表,取其特定條件之資料建立而成;後者以多個資料表,取其特定條件之關聯資料建立而成。

57 8-2 範例資料庫 為了儘速進入本章範例實作,依前述章節方法,於本書CD目錄C: \BookJavaVol_5 \Program \ch08建立資料庫Bank_ch08.accdb,及資料表Borrow(如圖8-2-1)、Branch(如圖8-2-2)、Customer(如圖8-2-3)、Deposit(如圖8-2-4)

58 8-3 單一資料表之檢視表 SQL語言提供指令 “CREATE VIEW … AS … ” 建立檢視表(View)。本節介紹如何以一個資料表(Table) 之特定條件資料建立一個新的檢視表(View)。設計範例19,依原有資料表內容,以其部份欄位建立檢視表。 參考範例19

59 8-4 多個資料表之檢視表 一個有效率的機構總是依賴一些分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工的基礎,必要時、也可聯結此多個資料表之某些內容,建立成一個檢視表,用以輔助解決一些非常困難的查詢。本節將介紹如何聯結多個資料表之內容,執行特定功能之聯結操作(Join Operations)。

60 8-5 一般聯結(Join) 當兩個資料表中至少有一個屬性欄位(Attribute) 名稱相同時,才可將該兩個資料表執行連結,一般聯結是指欄位(Attributes) 完全聯結(Join),即使是同名稱之聯結欄位也要重複列出,而自然聯結(Natural Join) 却不將同名稱之聯結欄位作重複列出。

61 一、內聯結(Inner Join): SQL語言提供內聯結指令 “… INNER JOIN … ON …” 內聯結兩個資料表(Relations),其中相同欄位之資料組為完全相同。 參考範例21

62 二、左外聯結(Left Outer Join):
SQL語言提供左外聯結指令 “… LEFT OUTER JOIN … ON …” 左外聯結兩個關聯表(Relations),其中相同欄位之資料組內容不完全相同,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容,如此操作是謂 “左外聯結”。 參考範例22

63 三、右外聯結(Right Outer Join):
SQL語言提供右外聯結指令 “… RIGHT OUTER JOIN … ON …” 右外聯結兩個關聯表(Relations),其中相同欄位之資料組內容不完全相同,當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “右外聯結”。 參考範例23

64 四、完全外聯結(Full Outer Join):
SQL語言提供完全外聯結指令 “… FULL OUTER JOIN … ON …” 完全外聯結兩個關聯表(Relations),其中相同欄位之資料組內容不完全相同,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容;當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “完全外聯結”。 參考範例24

65 8-6 自然聯結(Natural Join) 如前述,當兩個資料表中至少有一個屬性欄位(Attribute) 名稱相同時,才可將該兩個資料表執行連結,前節之一般聯結是指欄位(Attributes) 完全聯結(Join),即使是同名稱之聯結欄位也要重複列出,而本節之自然聯結(Natural Join) 却不將同名稱之聯結欄位作重複列出,比較前節、是為常用之聯結方法。

66 一、自然內聯結(Inner Join): SQL語言提供自然內聯結指令 “… NATURAL INNER JOIN … ON …” 自然內聯結兩個資料表(Relations),其中同名稱之聯結欄位將不得重複列出。 參考範例25

67 二、自然左外聯結(Natual Left Outer Join):
SQL語言提供自然左外聯結指令 “… NATURAL LEFT OUTER JOIN … ON …” 自然左外聯結兩個關聯表,其中同名稱之聯結欄位不得重複列出,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容,如此操作是謂 “自然左外聯結”。 參考範例26

68 三、自然右外聯結(Natual Right Outer Join):
SQL語言提供自然左外聯結指令 “… NATURAL RIGHT OUTER JOIN … ON …” 自然右外聯結兩個關聯表,其中同名稱之聯結欄位不得重複列出,當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “自然右外聯結”。 參考範例27

69 四、自然完全外聯結(Natual Full Outer Join):
SQL語言提供自然完全外聯結指令 “… NATURAL FULL OUTER JOIN … ON …” 自然完全外聯結兩個關聯表,其中同名稱之聯結欄位不得重複列出,當左端有資料而右端無資料時,以Null表示右端殘缺之資料組內容;當右端有資料而左端無資料時,以Null表示左端殘缺之資料組內容,如此操作是謂 “自然完全外聯結”。 參考範例28

70 第四篇 資料查詢(Data Query)

71 資料庫(Database) 設計的重點為:井然有序地儲存資料、與迅速有效地查詢資料。於本系列叢書第四冊 “資料庫入門程式, 碁峰EL0051” 曾詳細介紹SQL語言用於Access之查詢指令,本書本篇將介紹如何以Server/Client架構,執行網路遠端資料庫查詢。

72 基礎操作(Basic Operations)
第九章 基礎操作(Basic Operations)

73 9-1 簡介 於第三篇,當資料庫建立完成後,我們希望能了解該資料庫內各資料表的內容:(1) 單資料表全部資料內容、(2) 單資料表部份欄位資料內容、(3) 單資料表特定條件資料內容、(4) 多資料表關聯資料內容、(5) 特定函數資料內容。 本章將就其中基礎操作部份提出,配合SQL語言指令,以Server/Client架構作網路遠端資料庫查詢。

74 9-2 基礎查詢(Basic Query Structure)
關聯式資料庫(Relational Database) 是由多個資料表(Relations) 組合而成,每一資料表都有一個獨一無二的名稱。SQL語言提供查詢指令,基礎型態是由三組子句(Clauses) 所組成:欄位選取子句(select Clause)、資料表選取子句(from Clause)、與條件子句(where Clause)。

75 典型SQL語言查詢子句格式為: SELECT A1, A2, …, An FROM r1, r2, …,rm WHERE P 其中Ai為欄位名稱,ri為資料表名稱,P為要求條件。其意義是反應關聯代數式(Relational Algebra): П A1, A2, …, An (σ P (r1× r2 × … × rm))

76 9-3 欄位選取查詢(select Clause)
常用欄位選取查詢有:所有欄位選取(如範例29)、單一欄位選取(如範例30)、多欄位選取(如範例31)、相同資料合併選取(如範例32)、欄位計算選取(如範例33)。

77 9-3-2 單一欄位選取(SELECT field FROM …)
SQL語言如9-2節之查詢句型格式,提供指令 “SELECT field FROM …” 執行單一欄位選取查詢,其中SELECT為設定選取欄位(field)、FROM為設定資料表(tables)。 參考範例30

78 9-3-3 多欄位選取 (SELECT field1,field2,… FROM …)
SQL語言如9-2節之查詢句型格式,提供指令 “SELECT field1,field2,… FROM …” 執行多欄位選取查詢,其中SELECT為設定選取欄位(field)、FROM為設定資料表(tables)。 參考範例31

79 9-3-4 重複資料選取 (SELECT DISTINCT … FROM …)
觀察範例30,於其執行結果、我們可看到7個資料組(Tuples),其中有2個Perryridge。SQL允許執行刪除重複資料。 SQL語言如9-2節之查詢句型格式,提供指令 “SELECT DISTINCT … FROM …” 執行刪除重複資料選取,其中DISTINCT為不得有重複資料。 參考範例32

80 9-3-5 欄位計算選取(SELECT … AS … FROM …)
於選取子句,除了可選取多個欄位之外,亦可將 +、−、*、/ 等計算加諸於指定欄位,計算該欄位之資料內容。 SQL語言如9-2節之查詢句型格式,提供指令 “SELECT … AS … FROM …” 執行欄位計算選取,其中AS為新建欄位。 參考範例33

81 9-4 條件選取(where Clause) 條件選取支援選擇性資料之查詢,設定特定條件,篩除不合條件的資料,只選取滿足條件的資料。常用之條件選取有:單一條件選取(如範例34)、多條件選取(如範例35)、範圍條件選取(如範例36)。

82 9-4-1 單一條件選取(WHERE …) SQL語言如9-2節之查詢句型格式,提供指令 “WHERE …” 執行單一條件選取,以指令WHERE設定條件(Predicates)。 參考範例34

83 9-4-2 多條件選取(WHERE … AND …) SQL語言如9-2節之查詢句型格式,提供指令 “WHERE … AND …” 執行多條件選取,邏輯連接指令有“AND”、“OR”、“NOT”。 參考範例35

84 9-4-3 範圍條件選取(WHERE … BETWEEN …)
SQL語言如9-2節之查詢句型格式,提供指令 “WHERE … BETWEEN …” 執行範圍條件選取,範圍指令可使用 “BETWEEN”、或 “<=”、“<”、“>=”、“>”。 參考範例36

85 9-5 多個資料表關聯選取(from Clause)
一個有效率的機構總是依賴一個分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工基礎。 如本章範例資料庫Bank_ch09.accdb,存款部門建立資料表Deposit、借款部門建立資料表Borrow、公關部門建立資料表Customer、組織部門建立資料表Branch。各部門各依資料表分工作業,必要時亦可相互支援合作,即為本節多個資料表關聯選取。 當將兩個資料表關聯操作時,兩個資料表必須至少有一個相同名稱的欄位,我們可以直接關聯、或以檢視表關聯執行之。

86 9-5-1 直接關聯 直接以SQL語言指令將兩個資料表作關聯,再依條件需要,選取適當欄位(Fields)或資料組(Tuples) 之內容。
直接以SQL語言指令將兩個資料表作關聯,再依條件需要,選取適當欄位(Fields)或資料組(Tuples) 之內容。 參考範例37

87 9-5-2 檢視表關聯 當碰到比較困難問題、且又不易以直接關聯法解答時,我們可以檢視表關聯法解答。先將多個資料表以適當條件建立檢視表,再依需要讀取檢視表之內容。 參考範例38

88 9-6 更名操作(Rename Operation)
在操作過程中,更改名稱(Rename) 可將繁雜的名稱整理成精簡的名稱,增加可讀性與應用性,SQL提供更名機制 “AS”,可更改資料表(Relations) 或欄位(Attributes) 的名稱。同時也可用於欄位計算後之新名稱(如範例33)。 參考範例39

89 9-7 資料組變數(Tuple Variables)
有些查詢問題牽涉到資料組間之關係,非常困難而極不容易解答,但以資料組變數之輔助,則可輕易解答。 參考範例40

90 9-8 字串操作(String Operations)
在SQL語言字串中,有些符號具有特定意義,尤其是字串括號、暫離符號、與模糊取代(like) 之用法,常用格式有: 1、單引號(Single Quote):SQL字串以單引號括住字串之兩端,如 ‘It is my book ’。 2、雙引號(Double Quote):如果字串中已有單號成員,如 It’s my book,則以雙引號取代之,如 ‘ It”s my book’。 3、百分號(Percent) %:用於次字串(Sub String) 之模糊取代(like),如 ‘downtown’ = ‘down%’,其中 ‘ %’ = ‘town’。 4、底線(Underscore) _:用於字元(Character) 之模糊取代(like),如 ‘down_own’ = ‘downtown’,其中 ‘_’ = ‘t’; ‘down_ _ _n’ = ‘downtown’,其中 ‘_ _ _’ = ‘t o w’。 5、右斜線 \:視為暫離符號(Escape),當字串中有特殊符號時,為了避免誤會,SQL提供右斜線 \ 作暫離,如 ‘10% of people’ 應改為 ‘10\% of people’。 參考範例41

91 9-9 排序操作(Ordering the Display of Tuples)
SQL語言提供指令 “ORDER BY” 指定某欄位(Attribute) 為排序索引欄位,依其中的內容執行資料組(Tuples) 排序(Ordering)。 參考範例42

92 第十章 集合運算(Set Operations)

93 10-1 簡介 所謂集合(Set) 是謂 “有一完善定義的範圍(well-defined List/Collection),在範圍內包涵適當數量之元素(Elements)”。 SQL語言提供集合操作功能,以指令 “聯集(union)”、“交集(intersect)、“差集(except)” 組合多個資料集合(Sets) 之運算。

94 10-2 集合之定義(Definitions of Set)
集合操作可概分四類運算方法:聯集運算(Union)、交集運算(Intersect)、相對餘補集運算(Relative Complement)、與絕對餘補集運算(Absolute Complement)。

95 10-3 聯集運算(Union Operation)
SQL聯集運算(Union Operation) 如同關聯代數(Relational Algebra) 之 “∪”,建立多個資料集合或運算式間之 “or” 關係,使用指令 “UNION”。 範例45參考

96 10-4 交集運算(Intersect Operation)
SQL交集操作(Intersect Operation) 如同關聯代數(Relational Algebra) 之 “∩”,建立多個資料集合或運算式間之 “and” 關係,使用指令 “INTERSECT”。 參考範例47

97 10-5 差集運算(Except/Minus Operation)
SQL差集操作(Except/Minus Operation) 如同關聯代數(Relational Algebra) 之 “−”,建立多個資料集合或運算式間之 “not” 關係,使用指令 “EXCEPT” 或 “MINUS”。 參考範例48

98 聚合函數(Aggregate Functions)
第十一章 聚合函數(Aggregate Functions)

99 11-1 簡介 聚合函數(Aggregate Functions) 是將多個輸入值(Input Value) 經過計算後回傳(Return) 一個結果值(Result Value)。當聚合式執行多組聚合運算時,是謂 “群組聚合(Group aggregation)”。 SQL語言內建5個聚合函數指令:(1) 平均值(Average) 指令avg,(2) 總和值(Total) 指令sum,(3) 計數值(Count) 指令count,(4) 最大值(Maximum) 指令max,(5) 最小值(Minimum) 指令min。 上述指令中,avg、sum必須用於數字(Number) 環境,其他指令除了數字外,亦可用於其他如字串(String) 環境。

100 11-2平均值(Average) SQL語言提供指令 “AVG” 計算特定欄位(Field) 各資料組(Tuples) 之平均值(Average Value)。 參考範例49

101 11-3 總和值(Sum) SQL語言提供指令 “SUM” 計算特定欄位(Field) 各資料組(Tuples) 之總和值(Total Sum Value)。 參考範例50

102 11-4 計數值(Count) SQL語言提供指令 “COUNT” 計算特定欄位(Field) 各組資料元素(Elements) 之數量(Number)。 參考範例53

103 11-5 最大值(Maximum) SQL語言提供指令 “MAX” 搜尋特定欄位(Field) 各組資料(Tuples) 之最大值(Maximum Value)。 參考範例56

104 11-6 最小值(Minimum) SQL語言提供指令 “MIN” 搜尋特定欄位(Field) 各組資料(Tuples) 之最小值(Minimum Value)。 參考範例58

105 巢式子查詢(Nested Subqueries)
第十二章 巢式子查詢(Nested Subqueries)

106 12-1 簡介 在查詢句(Query Clauses) 中另設置子查詢句(Subquery Clauses),是謂 “巢式子查詢(Nested Subqueries)”,常使用之項目包括:子成員(Sub Membership)、成員測試(Test Set Membership)、比較設定(Make Set Comparisons)、關聯資料存在測試(Test for Existed Relations) 等。 於第十章、第十一章無法解決的問題,使用 “巢式子查詢(Nested Subqueries)” 却可輕易地解答。

107 12-2 子成員(Sub Membership) 在主查詢句(Query Clauses) 中、單純地另設置子查詢句(Subquery Clauses),可將子查詢句取得之結果,套諸於主查詢句使用,使問題邏輯簡易化。 回顧範例57,因於聚合運算,條件子句WHERE或HAVING均無法執行,此時我們可以子成員方式,設計範例60,巢式子句取代執行聚合指令 “MAX”。 參考範例60

108 12-3 成員測試(Test Set Membership)
SQL語言提供成員測試指令 “IN” 與 “NOT IN”,當子查詢句(Subquery Clauses) 存在於查詢句(Query Clause) 中時,使用 “IN”;當子查詢句不存在於查詢句中時,使用 “NOT IN”。回顧10-4節範例47,我們使用 “IN” 執行 “INTERSECT”; 回顧10-5節範例48,使用 “NOT IN” 執行 “EXCEPT/MINUS”。 參考範例62

109 12-4 比較設定(Make Set Comparisons)
 如範例64、範例65,為了執行部分比較,SQL語言提供代名詞指令 “SOME” 及其比較指令 “< SOME”、“<= SOME”、“> SOME”、“>= SOME”、“= SOME” 、“<> SOME”。 如範例66,為了執行全部比較,SQL提供代名詞指令 “ALL” 及其比較指令 “< ALL”、“<= ALL”、“> ALL”、“>= ALL”、“= ALL” 、“<> ALL”。 參考範例64

110 12-5 關聯資料存在測試 (Test for Existed Relations)
在多個資料表(Relations) 之關聯架構下,SQL語言提供指令 “EXISTS” 與 “NOT EXISTS” 測試關聯資料之存在與否,當關聯子查詢句(Subquery Clauses) 存在於查詢句(Query Clause) 中時,使用 “EXISTS”;當關聯子查詢句不存在於查詢句中時,使用 “NOT EXISTS”。回顧範例62,我們可使用 “EXISTS” 執行 “INTERSECT”;回顧範例63,可使用 “NOT EXISTS” 執行 “EXCEPT/MINUS”。 參考範例67

111 交易管理(Transaction Management)
第五篇 交易管理(Transaction Management)

112 交易管理(Transaction Management) 是指藉管理一連串多個連續操作(Operations) 來完成一項邏輯工作(Logical Unit of Work) 之處理。例如銀行轉帳(Transfer of Money),從一個銀行帳戶(Account) 轉帳至另一帳戶,在邏輯上是一項工作,在操作上是一串多個連續操作之組合執行。 本篇將詳細討論交易處理(Transaction)、轉帳交易(Concurrency Control)、與資料重整(Problem Recovery)。

113 第十三章 交易處理(Transaction)

114 13-1 簡介 例如有一個銀行帳戶,哥哥到銀行臨櫃存錢,同一時間,弟弟則以提款卡到提款機取錢,如此同步並行,如果管理不當,資料將會失去一致性,帳戶餘額亦將會混亂錯誤。 當多個行程(Processes) 作交易並行時,行程之間將相互影響、將分享記憶體(Memory)、將分享資料(Data),此時往往因管理不周嚴,使得資料失去正確性(Inconsistency)。 因此、在多個行程作交易並行時,如何保持資料的緊密性(Atomicity)、一致性(Consistency)、區隔性(Isolation)、持久性(Durability),是交易處理的重要環節,本章將深入探討之。

115 13-2 交易處理概念(Transaction Concept)
交易處理(Transaction) 是執行一連串多個連續操作(Operations)、進而完成一個單元邏輯工作(Logical Unit of Work) 之處理,執行於BEGIN … END區段內。在未討論資料庫交易處理之前,我們可以一般高階語言程式為例,於C、begin … end為一工作單元,其間之程式碼為一個交易處理;於Java、{…} 為一工作單元,其間之程式碼為一個交易處理。 為確保資料的整體性(Integrity),資料庫系統應考量其交易處理要具有:緊密性(Atomicity)、區隔性(Isolation)、一致性(Consistency)、與持久性(Durability)。 參考範例69

116 13-3 交易處理狀態(Transaction States)

117 13-4 陰影複製法(Shadow Copy) 資料庫之修補機制(Recovery Management Component) 亦可支援緊密性(Atomicity)與持久性(Durability) 的執行。陰影複製法(Shadow Copy) 是一種常用且有效的方法。設定資料庫指標(Database Pointer) 指向資料庫

118 13-5 Java/Access交易處理指令 為了執行交易處理,Java/Access提供指令 “SET” 與方法程序setAutoCommit()、commit() 輔助執行。 當設定setAutoCommit(false) 時,系統將關閉自動執行模式,程式碼有執行描述,但無實際執行動作;當逢commit()時,將描述的所有程式碼一併快速執行。因此、setAutoCommit(false) 可視為Begin Transaction,commit() 可視為End Transaction,交易行程(Transaction Processes) 執行於兩者之間。當設定setAutoCommit(true) 時,解除交易處理環境,系統恢復正常執行模式。 參考範例70

119 轉帳交易(Concurrency Transaction)
第十四章 轉帳交易(Concurrency Transaction)

120 14-1 簡介 轉帳交易是由2組執行緒並行作業,如13-2節範例69、一組從存款P減去交易額,另一組從存款Q增加交易額。為了完成轉帳交易作業,我們需先了解如何建立資料庫輔助記憶區、與資料庫資料輔助記憶區之資料複製。

121 14-2 輔助記憶區(Auxiliary Areas)
於資料表增設特定輔助欄位區(Auxiliary Area Fields) 與輔助資料組區(Auxiliary Area Tuples),用於儲存特定輔助資料,以輔助執行轉帳交易,該特定欄位區與資料組區是謂 “輔助記憶區(Auxiliary Areas)”。 參考範例71

122 14-3 記憶區資料複製 (Copies in Auxiliary Areas)
為了解決問題,需要將資料表內某處之資料複製到他處,SQL/Access提供指令函數DLookup(expr, domain [, criteria] ) 執行資料庫記憶區資料複製(Copies in Auxiliary Areas),其中expr為欄位回傳值、domain為資料表名稱、criteria為條件。 參考範例72

123 14-4 轉帳交易(Concurrency Transaction)
在了解如何建立資料庫輔助記憶區、與資料庫資料輔助記憶區之資料複製之後,配合SQL/Access指令,執行轉帳交易(Concurrency Transaction) 操作就流暢得多, 參考範例73

124 故障修補(Recoverability)
第十五章 故障修補(Recoverability)

125 15-1 簡介 於13-3節我們曾討論交易處理之執行狀態(States),如圖13-3,當交易處理無法繼續正常執行時,將進入失敗狀態(Failed State),再進入放棄狀態(Aborted State),此時系統將交易處理倒退(Roll Back) 至起始狀態,同時資料庫恢復至交易處理前之儲存內容,準備重新啟動(Restart)、或取消(Kill) 該交易處理。

126 15-2 SQL/Access修補指令 為了執行交易處理之修補,SQL/Access提供方法程序rollback() 執行倒退操作,在未執行commit() 更新資料庫之前,如果執行rollback(),將可導引交易處理倒退至起始狀態,準備重新啟動(Restart)、或取消(Kill) 該交易處理。 參考13-5節範例70,設計範例74,假設在存款交易途中發生錯誤,使用方法程序rollback() 導引交易處理倒退至起始狀態,並未更新任何資料庫之資料。 參考範例74

127 15-3 修補指令條件應用 如前節,在交易處理過程中,當系統遭到問題而無法繼續時,可利用rollback() 倒退至起始點,準備重新啟動(Restart)、或取消(Kill) 該交易處理。 我們亦可在程式中設定特定條件,當條件事件發生時,rollback() 發生作用,倒退至起始點,準備重新啟動(Restart)、或取消(Kill) 該交易處理;同理當條件事件不發生時,交易處理順利進行。設計範例75,增設如果存款額不足不得提款之條件。 參考範例75

128 15-4 條件修補指令與轉帳交易 於前兩節,僅涉及存款與提款的問題,操作步驟較為簡易,本節將參考14-4節範例73,設計範例77,使用資料庫輔助記憶區、與條件修補指令,執行轉帳交易。 參考範例77

129 第六篇 實例應用(Applications)

130 本書應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用,有關精美網頁資料庫之設計,筆者於本系列叢書第六冊 “Servlet 網站與資料庫”、第七冊 “JSP網站與資料庫” 另作詳細介紹。 於前述各篇,已詳細介紹如何遠端操作資料庫,本篇將就其精義,設計四組應用實例,讀者亦可以此為基幹,開發自己需要的系統。

131 第十六章 甄試與查榜系統(Exam System)

132 16-1 簡介 行政作業系統之設計,通常包括資料庫設計、與應用程式設計。有別於一般在本機設計之模式,為了更寬廣更方便,本章強調從網路遠端作操作應用,範例架構為: (1) 於Server端手動建立資料庫Exam_ch16.accdb,並作ODBC設定; (2) 設計資料表建立/輸入程式Server_makeTable.java、 Client_makeTable.java,於Client端經由網路建立考生資料表 (Student_Info)、考生成績表(Student_scores),前者用於考生報名 時填寫基本資料,後者用於登記考生成績。 (3) 於考生成績表(Student_scores) 計算總成績。 (4) 建立檢視表Student_view列出成績單內容。 (5) 設計查詢應用程式Server_QueryTable.java、Client_QueryTable.java, 於Client端讀取檢視表Student_view之成績單內容。

133 16-2 資料庫建立 (Establish Database)
如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

134 16-3 資料表建立/輸入程式(Establish/Input Programs)
一般行政系統之資料表,都是由軟體工程師在本機以手動建立資料表,由系統管理員在本機輸入資料,為了使作業更寬、更廣、更方便,本節設計Server/Client資料表建立/輸入程式,幫助軟體工程師可在任何地點、任何時間,從Client端經網路對Server端的資料庫建立資料表;幫助系統管理員從Client端經網路對資料表輸入資料。 參考第六章,於範例79、設計Server_makeTable.java、Client_makeTable.java,建立/輸入資料表之Java網路程式。

135 16-4 資料表建立(Establish Tables)
最簡單的甄試查榜系統至少需要2組資料表:(1)考生資料表(Student_Info)、(2)考生成績表(Student_scores)。當考生報名甄試填寫基本資料時,需使用考生資料表(Student_Info);當試卷批改後登記成績時,需使用考生成績表(Student_score)。 參考第六章,於範例80、建立考生資料表(Student_Info),於範例81、建立考生成績表(Student_score)。

136 16-5 資料表輸入 (Input Tables) 當考生報名甄試時,將其基本資料輸入考生資料表(Student_Info);當試卷批改後,將其成績登記至考生成績表(Student_Score)。本章範例輸入內容將摘錄自 “乙級軟體證照試題” 之部份內容。 參考第七章,於範例82、輸入考生資料表(Student_Info),於範例83、輸入考生成績表(Student_Score)。

137 16-6 總成績計算 (Calculate The Sum)
當輸入成績之後,應將各科成績加總,計算出總成績,以為錄取之依據。參考第十四章,於範例84、於考生成績表(Student_Score) 將各科成績加總,計算出總成績。

138 16-7 檢視表建立(Establish View)
一個有效率的機構總是依賴一些分工的組織,資料庫也是一樣,以多個不同功能的資料表奠定分工的基礎。如本例、在不同的階段,使用不同的資料表分工,當考生報名時,使用考生資料表(Student_Info) 填寫基本資料;當試卷批改後,使用考生成績表(Student_score) 登記成績。 參考第八章,於範例85、連接Student_info與Student_score,取欄位 “准考證號碼”、“姓名”、“地址”、“總成績” 建立檢視表Student_view。

139 16-8 查詢程式(Query Programs)
如16-3節之資料表建立與輸入程式,本節設計Java Server/Client查詢程式,從Client端查詢Server端資料表(Data Table) / 查詢表(Query Table) / 檢視表(View) 之內容。 參考第九章,於範例86設計程式Server_QueryTable.java、Client_QueryTable.java,用於遠端資料表查詢。

140 16-9 成績查詢(Result Query) 成績查詢可分為靜態成績查詢(All Query)、與動態查詢(Select Query),前者由管理員作全體考生之成績查詢,後者由考生對個人成績作查詢。 本書為基礎網站資料庫應用,重點在網路遠端操作資料庫,並非作精美網頁應用,在功能上是輔助精美網頁應用,將於本系列叢書 “Servlet網站資料庫”、與 “JSP網站資料庫” 詳細介紹。故本節僅在基礎架構上作應用。 參考範例87

141 16-10 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章甄試查榜系統之設計步驟為: 1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立資料表。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、總成績計算:於成績資料表作總成績計算。 6、建立檢視表:視需要欄位,建立檢視表。 7、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表。

142 16-11 系統實例應用 當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入考生之成績,系統將自動整合計算出成績單。 參考應用範例

143 學生操行成績電腦化系統 (Student Conduct Ranking System)
第十七章 學生操行成績電腦化系統 (Student Conduct Ranking System)

144 17-1 簡介 本章範例為學校學生操行成績電腦化系統,管理員於網路上輸入當日曠缺課資料及學期導師評分,系統即自動計算學生個人操行成績。本章強調從網路遠端操作應用,範例架構為: (1) 於Server端手動建立資料庫Exam_ch17.accdb,並作ODBC設定; (2) 設計資料表建立/輸入程式Server_makeTable.java、Client_makeTable.java,於Client端經由網路建立學生基礎資料表(Student)、曠缺課記錄表(Record)、導師評分表(Conduct)。當學生入學填寫基本資料時,使用學生基礎資料表(Student);當每日登記學生曠缺時數時,使用曠缺課記錄表(Record);當每學期導師評分時,使用導師評分表(Conduct)。 (3) 建立4組檢視表view_曠缺總時數、view_全體曠缺總時數、view_扣分成績、view_操行成績單,計算操行成績。每曠課1節扣1分;每事假12節扣1分;公假、病假不扣分。操行成績=導師評分-扣分。 (4) 檢視表view_操行成績單,列出成績單內容。 (5) 設計查詢應用程式Server_QueryTable.java、Client_QueryTable.java,於Client端讀取檢視表view_操行成績單之內容。

145 17-2資料庫建立 (Establish Database)
如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

146 17-3 資料表建立/輸入程式 (Establish/Input Programs)
如16-3節,設計Server/Client資料表建立/輸入程式,從Client端經網路對Server端的資料庫建立資料表、輸入資料。 參考範例89

147 17-4 資料表建立(Establish Tables)
最精簡的學生操行成績系統至少需要有3組資料表:(1)學生基礎資料表(Student)、(2)曠缺課記錄表(Record)、(3)導師評分表(Conduct)。當學生入學填寫基本資料時,需使用學生基礎資料表(Student);當每日登記學生曠缺時數時,需使用曠缺課記錄表(Record);當每學期導師評分時,需使用導師評分表(Conduct)。 參考第六章,於範例90、建立學生基礎資料表(Student),於範例91、建立曠缺課記錄表(Record),於範例92、建立導師評分表(Conduct)。

148 17-5 資料表輸入(Input Tables) 使用學生基礎資料表(Student) 入學時填寫基本資料;使用曠缺課記錄表(Record) 每日登記學生曠缺時數;使用導師評分表(Conduct) 每學期導師評分。 參考第七章,於範例93、輸入學生基礎資料表(Student),於範例94、輸入曠缺課記錄表(Record),於範例95、輸入導師評分表(Conduct)。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

149 17-6 成績計算(Calculate Scores)
於17-5節、我們已完成輸入學生基礎資料表(Student)、曠缺課記錄表(Record)、導師評分表(Conduct)。本節將以這3個資料表之內容,關聯建立4個檢視表計算操行成績、與列印成績單。

150 曠缺總時數 參考17-5節範例94,資料表Record記錄2003/10/01至2003/10/13學生曠缺情形,本節將以此資料建立檢視表 “view_曠缺總時數”,計算在這段期間學生之個人曠缺總時數。 參考範例96

151 全體曠缺總時數 於前節(17-6-1)、僅考量有曠缺記錄的學生資料,在檢視表view_曠缺總時數內,沒有顯示無曠缺記錄學生的資料,致無法製作全體學生之操行成績。本節建立檢視表 “view_全體曠缺總時數”,將無曠缺記錄學生之曠缺時數以0計算。 參考範例97

152 扣分成績 於前節(17-6-2節)、已計算出全體學生之個人曠缺總時數,本節將建立檢視表 “view_扣分成績” 計算扣分成績。每曠課1節扣1分;每事假12節扣1分;公假、病假不扣分。 參考範例98

153 操行成績 操行成績之計算為:“導師評分” 減去 “扣分”,亦即需要先關聯 “Conduct與view_扣分成績”,再取 “導師評分-扣分” 之值。 為了節省操作步驟,可關聯 “Student、Conduct與view_扣分成績”,建立檢視表 “view_操行成績單” 列出欄位為 “學號、姓名、家長、地址、操行成績” 之成績單,可依家長姓名與地址,將成績單寄給家長。 參考範例99

154 17-7 查詢程式(Query Programs)
本節設計Java Server/Client查詢程式,從Client端查詢Server端之資料表(Data Table) / 查詢表(Query Table)/ 檢視表(View) 內容。 參考16-8節,設計程式Server_QueryTable.java、Client_QueryTable.java,用於遠端資料表查詢。 參考範例100

155 17-8 成績查詢(Result Query) 如16-9節、成績查詢可分為靜態成績查詢(All Query)、與動態成績查詢(Select Query),前者由管理員作全體學生之成績查詢,後者由學生對個人成績作查詢。 參考範例101

156 17-9 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章學生曠缺課系統之設計步驟為: 1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立資料表Student、Record、Conduct,分別用於填寫基本資料、登記學生曠缺時數、導師評分。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、成績計算:建立檢視表view_曠缺總時數、view_全體曠缺總時數、view_扣分成績、view_操行成績單,計算操行成績。 6、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表view_操行成績單,讀取操行成績。

157 17-10 系統實例應用 當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入學生之新曠缺記錄,系統將自動整合計算出操行成績單。
當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入學生之新曠缺記錄,系統將自動整合計算出操行成績單。 參考應用範例

158 經銷公司人力成本考核系統 (Evaluation System for the Cost of Salesmen)
第十八章 經銷公司人力成本考核系統 (Evaluation System for the Cost of Salesmen)

159 18-1 簡介 一家經銷公司之榮衰,直接繫於其推銷業績成效,而業績成效,則有賴公司推銷員(Salesmen) 之努力、與能力成本(Cost)。本篇範例即是將公司推銷人員業務能力、成本、作電腦化統計及追踪,期盼隨時能對公司之推銷員作適時適地之了解,進而作聘用晉升之參考。 推銷員在公司的價值是依其能創造多少有意義的業績而定,所謂有意義的業績是 (業績金額/薪資金額) 之比例,亦即如公式 (績效比例 = 銷售盈利 / (未休假獎金 + 加班費 + 月薪資)),績效比例愈高者對公司的供獻愈大,可作為考績升遷的參考。

160 1、建立資料庫檔案Company_ch18.accdb:
(1) 本機管理員建立靜態資料表Employee(員工資料)、Product(產品資料);建立動態資料表Leave(請假記錄)、Overtime(加班時數記錄)、Sales(銷售記錄)。 (2) 由本機管理員於本機當地填寫或修改靜態資料表。 (3) 由網路管理員於網路新增或修改動態資料表。

161 2、建立計算檢視表: (1) 計算員工休假日數、及未休假獎金。 (2) 計算員工加班時數、及加班費。
(3) 計算員工銷售業績、銷售成本、銷售盈利。 (4) 計算員工績效比例。

162 3、網路查詢: (1) 網路查詢未休假獎金。 (2) 網路查詢加班費。 (3) 網路查詢績效比例。

163 18-2資料庫建立 (Establish Database)
如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

164 18-3資料表建立/輸入程式 (Establish/Input Programs)
如17-3節,設計Server/Client資料表建立/輸入程式,從Client端經網路對Server端的資料庫建立資料表、輸入資料。 參考17-3節,於範例103、設計Server_makeTable.java、Client_makeTable.java,建立/輸入資料表之Java網路程式。 參考範例103

165 18-4 靜態資料表建立(Establish Static Tables)
所謂靜態資料表,是一旦建立後,將很少再更動,亦即於久久更動時,直接到機房電腦更新即可,不必浪費網路資源。但本書宗旨是在網路遠端操作資料庫,故仍使用18-3節之Server_makeTable.java、Client_makeTable.java建立/輸入資料表,本章範例靜態資料表有:員工資料表Employee、產品資料表Product。 參考第六章,於範例104、建立員工資料表Employee,於範例105、建立產品資料表Product。

166 18-5 靜態資料表輸入(Input Static Tables)
使用員工資料表Employee填寫員工基本資料;使用產品資料表Product登記產品資料表。 參考第七章,於範例106、輸入員工資料表Employee,於範例107、輸入產品資料表Product。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

167 18-6 動態資料表建立 (Establish Dynamic Tables)
一家公司之銷售情況、人員作業,瞬息萬變,須搶時間、搶方便,故應設計為由網路上更新,本章將員工請假記錄Leave、員工加班時數記錄Overtime、員工銷售記錄Sales等列為動態資料。 與前節之靜態資料不同,一旦建立後,將很少再更動,亦即於久久更動時,直接到機房電腦更新即可,不必浪費網路資源。 參考第六章,於範例108、建立員工請假記錄Leave,於範例109、建立員工加班時數記錄Overtime,於範例110、建立員工銷售記錄Sales。

168 18-7 動態資料表輸入 (Establish Dynamic Tables)
使用員工請假記錄Leave紀錄員工請假資料;使用員工加班時數記錄Overtime紀錄員工加班資料;使用員工銷售記錄Sales紀錄員工銷售資料;。 參考第七章,於範例111、輸入員工請假記錄Leave;於範例112、輸入員工加班時數記錄Overtime;於範例113、輸入員工銷售記錄Sales。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

169 18-8 計算未休假獎金 各項基本資料檔案建置完成後,管理員即可視作業需求,於資料庫設計各類查詢表,計算需要的資料。本節將建立檢視表 “view_未休假天數”、“view_未休假獎金” 計算每位員工10月份之未他假獎金。計算公式為: 未休假天數 = 核准休假天數 – 休假天數 (如範例114,其中核准休假天數包括周六、日) 未休假獎金 = Int((目前月薪/28) * 未休假天數 + 0.5) (如範例115,取四捨五入整數值,其中設定28為每月天數) 參考範例114

170 18-9 計算加班費 本節建立檢視表 “view_加班費”,關聯資料表Employee與Overtime,計算每位員工10月份之加班費。計算公式為: 加班費 = (目前月薪資 / 224) * 1.5 * 加班時數 (如範例116,其中224為每月工作時數,計算自每日8小時乘以每月28天;其中1.5是指加班費為平日工時費之1.5倍) 參考範例116

171 18-10 計算銷售盈利 本節建立檢視表 “view_銷售業績”、“view_銷售成本”、“view_銷售盈利” 計算每位員工10月份為公司賺到的盈利。計算公式為: 銷售業績 = 單價 * 數量 (如範例117) 銷售成本 = 成本 * 數量 (如範例118) 銷售盈利 = 銷售業績 - 銷售成本 (如範例119) 參考範例117

172 18-11 計算績效比例 本節建立檢視表 “view_績效比例” 計算每位員工10月份之績效比例。計算公式為: 參考範例120
本節建立檢視表 “view_績效比例” 計算每位員工10月份之績效比例。計算公式為: 績效比例 = 銷售盈利/(未休假獎金+加班費+月薪資) (如範例120,績效比例愈高、貢獻愈大) 參考範例120

173 18-12查詢程式(Query Programs)
公司人事部門為了考核員工績效,需要查詢所有員工之績效比例;員工本身為了了解個人能力,也需要查詢個人績效比例。 本節設計Java Server/Client查詢程式,從Client端查詢Server端之資料表(Data Table) / 查詢表(Query Table)/ 檢視表(View) 內容。 參考範例121

174 18-13 網路查詢績效比例 如17-8節、本節設計Server/Client查詢程式,作靜態績效比例查詢(All Query)、與動態績效比例查詢(Select Query),前者由人事部門作全體員工之績效比例查詢,後者由員工作個人績效比例查詢。 參考範例122

175 18-14 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章經銷公司人力成本考核系統之設計步驟為: 1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立靜態資料表Employee(員工資料)、Product(產品資料);建立動態資料表Leave(請假記錄)、Overtime(加班時數記錄)、Sales(銷售記錄)。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、績效計算:(1) 計算員工休假日數、及未休假獎金。(2) 計算員工加班時數、及加班費。(3) 計算員工銷售業績、銷售成本、銷售盈利。(4) 計算員工績效比例。 6、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表view_績效比例,用以升遷考核參考。

176 18-15 系統實例應用 當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入員工之請假記錄Leave、加班時數記錄Overtime、銷售記錄Sales,系統將自動整合計算出績效比例。 參考應用範例

177 倉儲盤點系統 (Storage and Inventory System)
第十九章 倉儲盤點系統 (Storage and Inventory System)

178 19-1 簡介 本章範例為設計一倉儲貨品盤點網路電腦化系統,使用者僅需在網路上執行:(1) 在銷售上,於系統輸入賣出貨品名稱及其銷售量;(2)在補貨上,於系統輸入補充貨品名稱及其到補貨量。其他如整理、計算、統計等繁雜工作,均由系統自動處理。

179 1、建立資料庫檔案Store_ch19.accdb:
(1) 本機管理員建資料表Product(產品資料)、Sales(銷售記錄)、Arrival(補貨記錄)。 (2) 由網路管理員於網路新增或修改資料表。

180 2、設計邏輯: (1)、系統資料內容有:編號、產品名稱、基低量、高限量、實儲量、銷售量、訂貨量、存貨量。
(2)、在每一定時間期間統計各產品之銷售量。 (3)、a、存貨量 = 實儲量 – 銷售量。 b、當存貨量少於基低量時,訂補進貨。 訂貨量 = 高限量 – 存貨量。 (4)、盤點儲貨量:將上述之存貨量盤點載入儲貨量。 (5)、補貨點收入帳:運到之實際補貨量、可能與訂貨量不儘一致,故須一件一件清點入帳。 設計一應用程式執行: a、清點每項貨品之到貨量、並輸入之。 b、新實儲量 = 到貨量 + 存貨量。

181 19-2資料庫建立 (Establish Database)
如前述,本系列叢書各冊,在眾多資料庫中,選擇Access2007為範例資料庫,因其方便且功能不輸其他者,凡有Office的電腦,開機即可使用,無需另添購軟體。

182 19-3 資料表建立/輸入程式 (Establish/Input Programs)
如18-3節,設計Server/Client資料表建立/輸入程式,從Client端經網路對Server端的資料庫建立資料表、輸入資料。 參考18-3節,於範例124、設計Server_makeTable.java、Client_makeTable.java,建立/輸入資料表之Java網路程式。

183 19-4資料表建立(Establish Tables)
最精簡的倉儲盤點系統至少需要有3組資料表:(1)Product(產品資料),登錄店內現有產品之資料;(2)Sales(銷售記錄),登錄賣出產品之資料(3)Arrival(到貨記錄),登錄廠商實際送達之產品資料。 參考第六章,於範例125、建立產品資料表Product,於範例126、建立銷售記錄Sales,於範例127、建立到貨記錄Arrival。

184 19-5資料表輸入(Input Tables) 使用產品資料表Product登錄店內現有產品之資料;使用銷售記錄Sales登錄賣出產品之資料;使用到貨記錄Arrival登錄廠商實際送達之產品資料。 參考第七章,於範例128、輸入產品資料表Product,於範例129、定期輸入銷售記錄Sales,於範例130、輸入到貨記錄Arrival。 (本章範例內容部分摘錄自 “軟體應用乙級證照試題”)

185 19-6 計算存貨量 各項基本資料檔案建置完成後,管理員即可視作業需求,於資料庫設計各類查詢表,計算需要的資料。本節將建立檢視表 “view_存貨量” 計算店內貨品存量。計算公式為: 存貨量 = 實儲量 – 銷售量 (如範例131)

186 19-7 計算訂貨量 本節將建立檢視表 “view_訂貨量” 計算要求廠商之補充量,當存貨量少於基底量時,訂補進貨。計算公式為:
本節將建立檢視表 “view_訂貨量” 計算要求廠商之補充量,當存貨量少於基底量時,訂補進貨。計算公式為: 訂貨量 = 高限量 – 存貨量 (如範例132)

187 19-8 讀取訂貨單 如前節,自動建立訂貨量,廠商只需於遠端定期讀取 “view_訂貨量” 之內容,準備補充貨品送達經銷商店販賣。
如前節,自動建立訂貨量,廠商只需於遠端定期讀取 “view_訂貨量” 之內容,準備補充貨品送達經銷商店販賣。 參考範例133

188 19-9 點收補貨入帳 當廠商了解訂貨量內容之後,即可準備貨源產品送到經銷店販賣,運到之實際補貨量、可能與訂貨量不儘一致,故須一件一件清點入帳,點收入資料表Arrival。 參考範例130

189 19-10 盤點實儲量 經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為:
經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為: 新實儲量 = 到貨量 + 存貨量 (如範例132) 參考範例134

190 19-10 盤點實儲量 經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為:
經過新到貨補充後,本節將建立檢視表 “view_新實儲量” 計算店內實際儲貨量。計算公式為: 新實儲量 = 到貨量 + 存貨量 (如範例134)

191 19-11 綜合整理 本章應用範例是屬於輔助型基礎網站資料庫,重點在網路遠端作資料庫操作,用以輔助精美網頁資料庫之應用。本章倉儲盤點系統之設計步驟為: 1、建立資料庫:於本機以手動建立資料庫,並作ODBC設定。 2、設計資料表建立/輸入程式:設計Java Server/Client程式,用以遠端建立/輸入資料表。 3、建立資料表:使用項2之Java Server/Client程式,遠端建立產品資料表Product、銷售記錄Sales、到貨記錄Arrival。 4、輸入資料表:使用項2之Java Server/Client程式,遠端輸入資料表。 5、資料計算:(1)計算存貨量、(2)計算訂貨量、(3)登錄到貨量、(4)計算實儲量。 6、設計查詢程式:設計Java Server/Client程式,用以遠端查詢檢視表view_訂貨量,用以提供補貨資料。

192 19-12 系統實例應用 當本章系統建置完成後,本節將以實例導引使用此系統。只要輸入銷售記錄Sales,系統將自動整合計算出訂貨單。
參考應用範例


Download ppt "Network Database Programming"

Similar presentations


Ads by Google