- 相關(guān)推薦
局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)
摘 要
本文結(jié)合日常圖書(shū)查詢(xún)系統(tǒng)的實(shí)際需要,通過(guò)對(duì)C/S模式、PowerBuilder6.5開(kāi)發(fā)工具、數(shù)據(jù)庫(kù)以
及SQL語(yǔ)言的深入學(xué)習(xí)及實(shí)踐,主要完成了局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)的需求分析、數(shù)據(jù)庫(kù)設(shè)計(jì)、應(yīng)
用程序設(shè)計(jì)的工作。
首先,在緒論部分介紹了局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)的應(yīng)用背景、開(kāi)發(fā)環(huán)境以及選用的開(kāi)發(fā)工具與
數(shù)據(jù)庫(kù)的關(guān)系,闡明了局域網(wǎng)的概念。并對(duì)數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、DBMS進(jìn)行了介紹。
第二章的開(kāi)始介紹了關(guān)系型數(shù)據(jù)庫(kù)的基本概念,著重說(shuō)明了幾個(gè)關(guān)鍵概念的定義;然后對(duì)SQL語(yǔ)言
作了一個(gè)介紹說(shuō)明;最后通過(guò)兩個(gè)例子介紹了PB6.5用PowerScript語(yǔ)言調(diào)用SQL的方式。
第三章從特點(diǎn)和功能入手,介紹了開(kāi)發(fā)工具PowerBuilder6.5;并且介紹了C/S模式的概念、特點(diǎn)
以及C/S模式與開(kāi)發(fā)工具PowerBuilder6.5的聯(lián)系;在這個(gè)章節(jié)的最后簡(jiǎn)單介紹了PB6.5對(duì)數(shù)據(jù)庫(kù)的
操作。
第四章用軟件工程的方法分析了局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng),對(duì)整個(gè)系統(tǒng)進(jìn)行了需求分析、功能模
塊劃分,并通過(guò)ER圖對(duì)數(shù)據(jù)庫(kù)進(jìn)行概念設(shè)計(jì)、用Microsoft Access對(duì)數(shù)據(jù)庫(kù)進(jìn)行邏輯設(shè)計(jì)。
第五章是對(duì)局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)的具體設(shè)計(jì)。描述了整個(gè)系統(tǒng)詳細(xì)的功能模塊劃分,描述了
登錄模塊、模糊(分類(lèi))查詢(xún)、多條件(組合)查詢(xún)、數(shù)據(jù)編輯更新模塊以及數(shù)據(jù)維護(hù)模塊的實(shí)
現(xiàn)過(guò)程,并對(duì)設(shè)計(jì)源代碼進(jìn)行了注釋分析。
設(shè)計(jì)充分利用PowerBuilder6.5的PowerScript語(yǔ)言對(duì)SQL語(yǔ)言的操作特性,靈活運(yùn)用數(shù)據(jù)窗口技術(shù)
、以及PB的控件技術(shù)等,提高了程序設(shè)計(jì)質(zhì)量。
關(guān)鍵詞:C/S結(jié)構(gòu),局域網(wǎng),數(shù)據(jù)庫(kù),SQL語(yǔ)言,PowerBuilder6.5
目 錄
摘 要 ………………………………………………………………………………… I
第一章 緒 論 ……………………………………………………………………… 1
§1.1 數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)簡(jiǎn)介 ………………………………………………… 1
§1.2 局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)……………………………………………………3
§1.3本文所作工作 …………………………………………………………… 4
第二章 數(shù)據(jù)庫(kù)理論基礎(chǔ) …………………………………………………………… 6
§2.1 關(guān)系型數(shù)據(jù) ……………………………………………………………… 6
§2.2 SQL語(yǔ)言介紹 ……………………………………………………………… 9
§2.3 PB6.5對(duì)數(shù)據(jù)庫(kù)的操作 ………………………………………………………11
第三章 PB 6.5及其數(shù)據(jù)庫(kù)編程……………………………………………………… 13
§3.1開(kāi)發(fā)工具PowerBuilder6.5……………………………………………………13
§3.2 PowerBuilder與Client/Server體系結(jié)構(gòu)………………………………………16
§3.3 PowerBuilder6.5數(shù)據(jù)庫(kù)編程 ……………………………………………… 18
第四章 局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)設(shè)計(jì)分析 …………………………………………21
§4.1 應(yīng)用需求分析 ……………………………………………………………… 22
§4.2 系統(tǒng)功能模塊劃分 ………………………………………………………… 23
§4.3 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì) …………………………………………………………… 24
第五章 局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)應(yīng)用程序設(shè)計(jì) …………………………………29
§5.1 系統(tǒng)模塊組成 ………………………………………………………… 29
§5.2登錄模塊的實(shí)現(xiàn)……………………………………………………… 30
§5.3查詢(xún)模塊的實(shí)現(xiàn) …………………………………………………………… 33
5.3.1模糊(分類(lèi))查詢(xún)的實(shí)現(xiàn) ………………………………………………39
5.3.2組合(條件)查詢(xún)的實(shí)現(xiàn) ………………………………………………44
5.3.3更新打印模塊的實(shí)現(xiàn) ………………………………………………… 51
§5.4 數(shù)據(jù)維護(hù)模塊的實(shí)現(xiàn)…………………………………………………………56
第六章 結(jié)束語(yǔ) ……………………………………………………………………… 63
致 謝 ………………………………………………………………………………… 64
參考書(shū)目 ……………………………………………………………………………… 65
第一章 緒 論
§1.1 數(shù)據(jù)庫(kù)技術(shù)
數(shù)據(jù)庫(kù)技術(shù)作為數(shù)據(jù)管理技術(shù),是計(jì)算機(jī)軟件領(lǐng)域的一個(gè)重要分支,產(chǎn)生于60年代末,F(xiàn)已
形成相當(dāng)規(guī)模的理論體系和實(shí)用技術(shù)。優(yōu)秀的數(shù)據(jù)庫(kù)設(shè)計(jì)是應(yīng)用成功的基石。萬(wàn)萬(wàn)丈高樓平地起
,數(shù)據(jù)庫(kù)設(shè)計(jì)如同高樓的基石,是開(kāi)發(fā)高品質(zhì)應(yīng)用的前提。
1.1.1 數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)
數(shù)據(jù)的體系結(jié)構(gòu)分成三級(jí):內(nèi)部級(jí)(Internal),概念級(jí)(Conceptual)和外部級(jí)(External)。這
個(gè)三級(jí)結(jié)構(gòu)有時(shí)也稱(chēng)為“三級(jí)模式結(jié)構(gòu)”。
l 外部級(jí):最接近用戶(hù),是單個(gè)用戶(hù)所能看到的數(shù)據(jù)特性。單個(gè)用戶(hù)使用的數(shù)據(jù)視圖的描述稱(chēng)為
“外模式”。
l 概念級(jí):涉及到所有用戶(hù)的數(shù)據(jù)定義、是全局的數(shù)據(jù)視圖。全局視圖的描述稱(chēng)為“概念模式”
。
l 內(nèi)部級(jí):最接近于物理存儲(chǔ)設(shè)備,涉及到實(shí)際數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)物理存儲(chǔ)數(shù)據(jù)視圖的描述稱(chēng)為“
內(nèi)模式”。
數(shù)據(jù)庫(kù)的三級(jí)模式結(jié)構(gòu)是數(shù)據(jù)的三個(gè)抽象級(jí)別。它把數(shù)據(jù)的具體組織留給DBMS
去做,用戶(hù)只要抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的表示和存儲(chǔ),這樣就減輕了用戶(hù)
使用系統(tǒng)的負(fù)擔(dān)。
1.1.2 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是指數(shù)據(jù)庫(kù)系統(tǒng)中管理數(shù)據(jù)的軟件系統(tǒng)。DBMS是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成
部分。對(duì)數(shù)據(jù)庫(kù)的一切操作,包括定義、查詢(xún)、更新及各種控制,都是通過(guò)DBMS進(jìn)行的。
在不同的計(jì)算機(jī)系統(tǒng)中,由于缺乏統(tǒng)一的標(biāo)準(zhǔn),即使同種數(shù)據(jù)模型的DBMS,它們?cè)谟脩?hù)接口、系
統(tǒng)功能方面也常常是不相同的。
用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,是由DBMS把操作從應(yīng)用程序帶到外部級(jí)、概念級(jí)、再導(dǎo)向內(nèi)部級(jí),進(jìn)而
操作存儲(chǔ)器中的數(shù)據(jù)。DBMS的主要目標(biāo),
是使數(shù)據(jù)作為一種可管理的資源處理。
DBMS的主要功能為:
l 數(shù)據(jù)庫(kù)定義功能:DBMS提供數(shù)據(jù)定義語(yǔ)言(DDL)定義數(shù)據(jù)庫(kù)的三級(jí)結(jié)構(gòu),包括外模式、概念模
式、內(nèi)模式及基相互之間的映象,定義數(shù)據(jù)的完整性、安全控制等約束。因此,在DBMS中應(yīng)包括
DDL的編譯程序。
l 數(shù)據(jù)庫(kù)的操縱功能:DBMS提供數(shù)據(jù)操縱語(yǔ)言(DML)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作;镜臄(shù)據(jù)操
作分成兩類(lèi)四種:
² 檢索(查詢(xún))
² 更新(插入、刪除、修改)
l 數(shù)據(jù)庫(kù)的保護(hù)功能:數(shù)據(jù)庫(kù)中的數(shù)據(jù)是信息社會(huì)的戰(zhàn)略資源,對(duì)數(shù)據(jù)的保護(hù)是至關(guān)重要的大事
。DBMS對(duì)數(shù)據(jù)庫(kù)的保護(hù)主要通過(guò)四個(gè)方面實(shí)現(xiàn):
² 數(shù)據(jù)庫(kù)的恢復(fù):在數(shù)據(jù)庫(kù)被破壞或數(shù)據(jù)不正確時(shí),系統(tǒng)有能力把數(shù)據(jù)庫(kù)恢復(fù)到正確的狀態(tài)。
² 數(shù)據(jù)庫(kù)的并發(fā)控制:DBMS的并發(fā)控制子系統(tǒng)能防止錯(cuò)誤發(fā)生,正確處理好多用戶(hù)、多任務(wù)環(huán)境
下的并發(fā)操作。
² 數(shù)據(jù)庫(kù)的完整性控制:保證數(shù)據(jù)庫(kù)中數(shù)據(jù)及語(yǔ)義的正確性和有效性,防止任何對(duì)數(shù)據(jù)造成錯(cuò)誤
的操作。
² 數(shù)據(jù)庫(kù)的安全性控制:防止未經(jīng)授權(quán)的用戶(hù)蓄謀或無(wú)意地存取數(shù)據(jù)庫(kù)中的數(shù)據(jù),以免數(shù)據(jù)的泄
露、更改或破壞。
² 數(shù)據(jù)庫(kù)的存儲(chǔ)管理:把各種DML語(yǔ)句轉(zhuǎn)換成低層的文件系統(tǒng)命令,起到數(shù)據(jù)的存儲(chǔ)、檢索和更新
的作用。
² 數(shù)據(jù)庫(kù)的維護(hù)功能:它有許多實(shí)用程序提供給數(shù)據(jù)庫(kù)管理員:
Ø 數(shù)據(jù)裝載程序
Ø 備份程序
Ø 文件重組織程序
Ø 性能監(jiān)控程序
² 數(shù)據(jù)字典:數(shù)據(jù)庫(kù)系統(tǒng)中存放三級(jí)結(jié)構(gòu)定義的數(shù)據(jù)庫(kù)稱(chēng)為數(shù)據(jù)字典(DD)。對(duì)數(shù)據(jù)庫(kù)的操作都
要通過(guò)訪問(wèn)DD才能實(shí)現(xiàn),通常DD中還存放數(shù)據(jù)庫(kù)運(yùn)行時(shí)的統(tǒng)計(jì)信息。
1.1.3 PowerBuilder與數(shù)據(jù)庫(kù)
n PowerBuilder與數(shù)據(jù)庫(kù)是“配合”與“協(xié)調(diào)”的關(guān)系
PowerBuilder是客戶(hù)/服務(wù)器體系結(jié)構(gòu)下客戶(hù)端的開(kāi)發(fā)工具,用于開(kāi)發(fā)客戶(hù)應(yīng)用程序。這個(gè)程序首
先建立一個(gè)與數(shù)據(jù)庫(kù)的通信渠道,然后將用戶(hù)的需求以某種方式傳送給數(shù)據(jù)庫(kù)服務(wù)器。在應(yīng)用程
序接收到數(shù)據(jù)庫(kù)服務(wù)器返回的數(shù)據(jù)后,它分析返回的數(shù)據(jù)并呈現(xiàn)給用戶(hù)。因此我們說(shuō),客戶(hù)應(yīng)用
程序只完成請(qǐng)求和表現(xiàn)數(shù)據(jù)的工作,是用戶(hù)操作計(jì)算機(jī)的人機(jī)界面,大多數(shù)數(shù)據(jù)處理是由服務(wù)器
完成的。
數(shù)據(jù)庫(kù)數(shù)據(jù)器是一個(gè)存取數(shù)據(jù)和管理數(shù)據(jù)的軟件,它針對(duì)客戶(hù)的請(qǐng)求為客戶(hù)提供數(shù)據(jù)服務(wù)。這些
服務(wù)包括數(shù)據(jù)插入、修改和查詢(xún)等。客戶(hù)對(duì)數(shù)據(jù)庫(kù)服務(wù)器提出請(qǐng)求用的語(yǔ)言是SQL(Strucrured
Query Language)。SQL是大多數(shù)數(shù)據(jù)庫(kù)服務(wù)器使用的查詢(xún)語(yǔ)言。
因此我們說(shuō),PowerBuilder與數(shù)據(jù)庫(kù)的關(guān)系是“配合”與“協(xié)調(diào)”的關(guān)系。PowerBuilder完成數(shù)
據(jù)請(qǐng)求、數(shù)據(jù)表現(xiàn)、菜單、界面等表象方面的工作,而數(shù)據(jù)庫(kù)服務(wù)器完成數(shù)據(jù)庫(kù)的存儲(chǔ)管理、并
發(fā)控制、事務(wù)管理、完整性維護(hù)、查詢(xún)優(yōu)化等工作。
§1.2 局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)
1.2.1 局域網(wǎng)(LAN)
計(jì)算機(jī)網(wǎng)絡(luò)是指將多臺(tái)具有獨(dú)立功能的計(jì)算機(jī),通過(guò)通信線路和通信設(shè)備連接起來(lái),在網(wǎng)絡(luò)軟件
的支持下實(shí)現(xiàn)數(shù)據(jù)通信和資源共享的計(jì)算機(jī)系統(tǒng)。
計(jì)算機(jī)網(wǎng)絡(luò)的規(guī)模有大有小,大的可以覆蓋全球,小的僅局限于一個(gè)辦公室。現(xiàn)在一般按照網(wǎng)絡(luò)
覆蓋的地理范圍將計(jì)算機(jī)網(wǎng)絡(luò)分為三類(lèi):局域網(wǎng)(LAN)、城域網(wǎng)(MAN)、廣域網(wǎng)(WAN)。
局域網(wǎng)是覆蓋范圍在10公里以?xún)?nèi)的計(jì)算機(jī)網(wǎng)絡(luò)。局域網(wǎng)傳輸速度快,一般局限在一個(gè)單位內(nèi)部,
例如一所學(xué);蛞患移髽I(yè)。
1.2.2 應(yīng)用程序開(kāi)發(fā)背景
一個(gè)數(shù)十人的科研或開(kāi)發(fā)小組,搜集了上千冊(cè)有用的圖書(shū)資料,其中有一部分分布在個(gè)人手中,
為了方便大家查閱,需要對(duì)每本書(shū)的狀態(tài)進(jìn)行跟蹤,另新進(jìn)和丟失的圖書(shū)資料必須得到及時(shí)的反
映。
1.2.3 系統(tǒng)功能
l 圖書(shū)分類(lèi)查詢(xún),多條件查詢(xún),模糊查詢(xún)
l 用戶(hù)必須登錄方能執(zhí)行各種操作,允許用戶(hù)在客戶(hù)機(jī)或?yàn)g覽器修改,添加
刪除圖書(shū)資料,實(shí)行松散管理,這建立在用戶(hù)高度自覺(jué)的基礎(chǔ)之上,當(dāng)然也可由管理員在服務(wù)器
上直接對(duì)數(shù)據(jù)庫(kù)操作。
l 能將查詢(xún)結(jié)果生成報(bào)表,并打印輸出。
1.2.4 系統(tǒng)運(yùn)行環(huán)境
該系統(tǒng)采用Client/Server模式進(jìn)行設(shè)計(jì):局域網(wǎng)中有一臺(tái)服務(wù)器,其上運(yùn)行服務(wù)器程序,操作系
統(tǒng)為windows2000 server,客戶(hù)機(jī)操作為Windows98,其上運(yùn)行客戶(hù)端程序。
1.2.5 系統(tǒng)開(kāi)發(fā)工具
該系統(tǒng)采用PowerBuilder6.5進(jìn)行開(kāi)發(fā),數(shù)據(jù)庫(kù)服務(wù)器端為SQL Anywhere5.0 Server;客戶(hù)端則
為SQL Anywhere client,整個(gè)系統(tǒng)在SQL Anywhere Local端調(diào)試完成。
§1.3 本文所作工作
首先,在緒論部分介紹了局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)的應(yīng)用背景、開(kāi)發(fā)環(huán)境以及選用的開(kāi)發(fā)工具與
數(shù)據(jù)庫(kù)的關(guān)系,闡明了局域網(wǎng)的概念。并對(duì)數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)、DBMS進(jìn)行了介紹。
第二章的開(kāi)始介紹了關(guān)系型數(shù)據(jù)庫(kù)的基本概念,著重說(shuō)明了幾個(gè)關(guān)鍵概念的定義;然后對(duì)SQL語(yǔ)言
作了一個(gè)介紹說(shuō)明;最后通過(guò)兩個(gè)例子介紹了PB6.5用PowerScript語(yǔ)言調(diào)用SQL的方式。
第三章從特點(diǎn)和功能入手,介紹了開(kāi)發(fā)工具PowerBuilder6.5;并且介紹了C/S模式的概念、特點(diǎn)
以及C/S模式與開(kāi)發(fā)工具PowerBuilder6.5的聯(lián)系;在這個(gè)章節(jié)的最后簡(jiǎn)單介紹了PB6.5對(duì)數(shù)據(jù)庫(kù)的
操作。
第四章用軟件工程的方法分析了局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng),對(duì)整個(gè)系統(tǒng)進(jìn)行了需求分析、功能模
塊劃分,并通過(guò)ER圖對(duì)數(shù)據(jù)庫(kù)進(jìn)行概念設(shè)計(jì)、用Microsoft Access對(duì)數(shù)據(jù)庫(kù)進(jìn)行邏輯設(shè)計(jì)。
第五章是對(duì)局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)的具體設(shè)計(jì)。描述了整個(gè)系統(tǒng)詳細(xì)的功能模塊劃分,描述了
登錄模塊、模糊(分類(lèi))查詢(xún)、多條件(組合)查詢(xún)、數(shù)據(jù)編輯更新模塊以及數(shù)據(jù)維護(hù)模塊的實(shí)
現(xiàn)過(guò)程,并對(duì)設(shè)計(jì)源代碼進(jìn)行了注釋分析。
最后,在結(jié)束語(yǔ)的總結(jié)部分指出了系統(tǒng)的亮點(diǎn)以及不足之處。簡(jiǎn)單介紹了自己開(kāi)發(fā)過(guò)程中的體會(huì)
與心得:在摸索中實(shí)踐,在實(shí)踐中摸索。
第二章 數(shù)據(jù)庫(kù)理論基礎(chǔ)
§2.1 關(guān)系型數(shù)據(jù)庫(kù)
2.1.1 關(guān)系模型的基本概念
用二維表格結(jié)構(gòu)表示實(shí)體集,外鍵表示實(shí)體間聯(lián)系的數(shù)據(jù)模型稱(chēng)為關(guān)系模型。
1. 二維表格
表2-1是一張職工登記表,這是二維表格
工號(hào) 姓名 年齡 性別 工資
0001 Zhang 26 男 1000
0002 Li 25 女 1500
0003 Liu 29 男 1000
0004 Wang 22 女 1500
表2-1 二維表格實(shí)例
為簡(jiǎn)單起見(jiàn),對(duì)表格數(shù)學(xué)化,用字母表示表格的內(nèi)容。表2-1可用圖2-1表示:
A B C D E
A1 A2A3 A4 B1B2B3B4 C1C2C3C4 D1D2D3D4 E1 E2E3E4
2. 鍵(KEY)
鍵由一個(gè)或幾個(gè)屬性組成,在實(shí)際使用中,有下列幾種鍵:
1) 超鍵(Super Key):在關(guān)系中能惟一標(biāo)識(shí)元組的屬性集稱(chēng)為關(guān)系模式的超鍵。
2) 候選鍵(Candidate Key):不含有多余屬性的超鍵稱(chēng)為候選鍵。也就是在候選鍵中,若要再刪
除屬性,就不是鍵了。
3) 主鍵:(Primary Key):用戶(hù)選作元組標(biāo)識(shí)的一個(gè)侯選鍵稱(chēng)為主鍵。一般,如不加說(shuō)明,則鍵
是指主鍵。
3. 關(guān)系的定義和性質(zhì)
我們可以用集合的觀點(diǎn)定義關(guān)系。關(guān)系是一個(gè)元數(shù)為K(K>=1)的元組的集合。
把關(guān)系看成是一個(gè)集合,集合中的元素是元組,每個(gè)元組的屬性個(gè)數(shù)應(yīng)相同。在關(guān)系模型中,對(duì)
關(guān)系作了下列規(guī)范性限制:
1) 關(guān)系中每一個(gè)屬性值都是不可分解的。
2) 關(guān)系中允許出現(xiàn)相同的元組(沒(méi)有重復(fù)元組)
3) 由于關(guān)系是一個(gè)集合,因此不考慮元組間的順序,即沒(méi)有行序。
4) 元組中,屬性在理論上也是無(wú)序的,但在使用時(shí)按習(xí)慣考慮列的順序。
2.1.2數(shù)據(jù)庫(kù)的設(shè)計(jì)理論
關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)理論主要包括三個(gè)方面的內(nèi)容:數(shù)據(jù)依賴(lài)、范式,模式設(shè)計(jì)方法。其中數(shù)據(jù)依
賴(lài)起著核心的作用。
1. 函數(shù)依賴(lài)(Functional dependency , FD)的定義
設(shè)R(U)是一個(gè)關(guān)系模式,U是R的屬性集合,X和Y是U的子集。對(duì)于R(U)的任何一個(gè)可能的關(guān)系r,
如果r中不存在兩個(gè)元組,它們?cè)赬上的屬性值相同,而在Y上的屬性值不同,則稱(chēng)“Y函數(shù)依賴(lài)于X
” ,記作X→Y。如果X→Y,并且對(duì)于X的任一真子集X ’,都有Y 不函數(shù)依賴(lài)于X ’,則稱(chēng)“Y完
全函數(shù)依賴(lài)于X” ,記作X f Y 。若X→Y,但Y不完全函數(shù)依賴(lài)于X,則稱(chēng)“Y部分函數(shù)依賴(lài)于X”
,記作X P Y 。如果X→Y,Y→Z,且Y≮ X, X不函數(shù)依賴(lài)于Y,則稱(chēng)“Z傳遞函數(shù)依賴(lài)于X”。
2. 范式
在對(duì)表的形式進(jìn)行了規(guī)范化定義后,數(shù)據(jù)結(jié)構(gòu)還有五種規(guī)范化定義,定名為規(guī)范化模式,稱(chēng)為范
式。在這五種范式中,一般只用前三種,對(duì)于常用系統(tǒng)就足夠了。而且這五種范式是“向上兼容
”的,即滿足第五范式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)滿足一、二、三、四范式,滿足第四范式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)
滿足第一、二、三范式,……,依此類(lèi)推。
第一范式(first normal form,簡(jiǎn)稱(chēng)1st NF)就是指在同一表中沒(méi)有重復(fù)項(xiàng)出現(xiàn),如果有則應(yīng)將重
復(fù)項(xiàng)去掉。這個(gè)去掉重復(fù)項(xiàng)的過(guò)程就稱(chēng)之為規(guī)范化處理。在本文所討論的開(kāi)發(fā)方法里,1st NF實(shí)
際上是沒(méi)有什么意義的。因?yàn)槲覀儼匆?guī)范化建立的指標(biāo)體系和表的過(guò)程都自動(dòng)保證了所有表都滿
足1st NF。
第二范式(second normal form,簡(jiǎn)稱(chēng) 2nd NF)是指每個(gè)表必須有一個(gè)(而且僅一個(gè))數(shù)據(jù)元素為主
關(guān)鍵字(primary key),其它數(shù)據(jù)元素與主關(guān)鍵字一一對(duì)應(yīng)。例如,在圖l9.7中如果我們
將合同號(hào)
定義為主關(guān)鍵字(其它數(shù)據(jù)元素中的記錄數(shù)據(jù)都有可能重名,故不能作為主關(guān)鍵字),故只要知道
了一個(gè)合同記錄的合同號(hào),就可以唯一地在同一行中找到該合同的任何一項(xiàng)具體信息。通常我們
稱(chēng)這種關(guān)系為函數(shù)依賴(lài)(functional depEndence)關(guān)系。即表中其它數(shù)據(jù)元素都依賴(lài)于主關(guān)鍵字,
或稱(chēng)該數(shù)據(jù)元素唯一地被主關(guān)鍵字所標(biāo)識(shí)。
第三范式(third normal form,簡(jiǎn)稱(chēng) 3rd NF)就是指表中的所有數(shù)據(jù)元素不但要能夠唯一地被主
關(guān)鍵字所標(biāo)識(shí),而且它們之間還必須相互獨(dú)立,不存在其它的函數(shù)關(guān)系。也就是說(shuō)對(duì)于一個(gè)滿足
了 2nd NF的數(shù)據(jù)結(jié)構(gòu)來(lái)說(shuō),表中有可能存在某些數(shù)據(jù)元素依賴(lài)于其它非關(guān)鍵宇數(shù)據(jù)元素的現(xiàn)象,
必須加以消除。
為防止數(shù)據(jù)庫(kù)出現(xiàn)更新異常、插入異常、刪除異常、數(shù)據(jù)冗余太大等現(xiàn)象,關(guān)系型數(shù)據(jù)庫(kù)要盡量
按關(guān)系規(guī)范化要求進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)。下面以教務(wù)管理信息系統(tǒng)為例來(lái)進(jìn)行分析。
3. 模式設(shè)計(jì)方法
一個(gè)好的模式設(shè)計(jì)方法應(yīng)符合下列三條原則:
l 表達(dá)性:涉及到兩個(gè)數(shù)據(jù)庫(kù)模式的等價(jià)性問(wèn)題,即數(shù)據(jù)等價(jià)和依賴(lài)等價(jià),分別用無(wú)損聯(lián)接和保
持函數(shù)依賴(lài)來(lái)衡量。
l 分離性:是指屬性間的“獨(dú)立關(guān)系”應(yīng)該用不同的關(guān)系模式表達(dá)。獨(dú)立聯(lián)系是我們所考慮的“
基本信息單位”。實(shí)際上分離就是清除存儲(chǔ)異常和數(shù)據(jù)冗余現(xiàn)象。如果能達(dá)到這個(gè)目的,就分離
。分離的基準(zhǔn)就是一系列范式,分離與依賴(lài)等價(jià)有時(shí)是不可兼容的。
l 最小冗余性:要求在分解后的數(shù)據(jù)庫(kù)能表達(dá)原來(lái)數(shù)據(jù)庫(kù)的所有信息這個(gè)前提下實(shí)現(xiàn)。目的就是
節(jié)省存儲(chǔ)空間,提高對(duì)關(guān)系的操作效率,清除不必要的冗余。但要注意,在實(shí)際使用中,并不一
定要達(dá)到最小宙余。因?yàn)橛袝r(shí)帶點(diǎn)冗余對(duì)于查詢(xún)處理是有好處的。
關(guān)系模式的方法基本上可以分為分解與合成兩大類(lèi)。分解型算法要求輸入一個(gè)
初始模式集和依賴(lài)集,而結(jié)果滿足數(shù)據(jù)等價(jià)要求。對(duì)于合成型算法只要求輸入初始依賴(lài)集,結(jié)果
滿足依賴(lài)等要求。但它們依據(jù)的基本思想是共同的,即獨(dú)立的聯(lián)系獨(dú)立表示。
§2.2 SQL語(yǔ)言介紹
SQL(Structured Query Language)即“結(jié)構(gòu)式查詢(xún)語(yǔ)言”。SQL雖然名為查詢(xún)語(yǔ)
言,但實(shí)際上具有定義、查詢(xún)、更新和控制等多種功能。由于它使用方便、功能豐富、語(yǔ)言簡(jiǎn)單
易學(xué),很快得到應(yīng)用和推廣。從20世紀(jì)70年代末起,在推出的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)產(chǎn)品ORACLE、SQL/
DS、DB2、SYBASE上實(shí)現(xiàn)了SQL語(yǔ)言。很快,SQL語(yǔ)言被整個(gè)計(jì)算機(jī)界認(rèn)可。1987年6月,國(guó)際標(biāo)準(zhǔn)
化組織(ISO)采納為國(guó)際標(biāo)準(zhǔn)。隨后,ISO對(duì)標(biāo)準(zhǔn)進(jìn)行了大量的修改和擴(kuò)充。在1992年推出了新
的標(biāo)準(zhǔn)-SQL2。SQL的標(biāo)準(zhǔn)化工作還在繼續(xù),新的標(biāo)準(zhǔn)已被命名為SQL3,將包括許多新的數(shù)據(jù)庫(kù)概
念,正在不征求意見(jiàn)和進(jìn)行修改
這里將簡(jiǎn)單介紹基于SQL89和SQL2的語(yǔ)言使用概貌:
2.2.1 SQL的組成
SQL主要分成四個(gè)部分:
1)數(shù)據(jù)定義:這一部分也稱(chēng)為“SQL DDL”,用于定義SQL模式、基本表、視圖和索引。
2)數(shù)據(jù)操縱:這一部分也稱(chēng)為“SQL DML”。它分為數(shù)據(jù)查詢(xún)和數(shù)據(jù)更新兩類(lèi)。其中數(shù)據(jù)更新又
分成插入、刪除、和修改三種操作。
3)數(shù)據(jù)控制:這一部分包括對(duì)基本表和視圖的授權(quán),完整性規(guī)則的描述,事務(wù)控制等內(nèi)容。
4)嵌入式SQL的使用規(guī)定:這一部分內(nèi)容涉及到SQL語(yǔ)句嵌入在宿主語(yǔ)言程序中使用的規(guī)則。
2.2.2 SQL的數(shù)據(jù)查詢(xún)
n SELECT語(yǔ)句的語(yǔ)法
SELECT 目標(biāo)表的列名或列表達(dá)式序列
FROM 基本表和(或)視圖序列
[WHERE行條件表達(dá)式]
[GROUP BY列名序列
[HAVING組條件表達(dá)式]]
[ORDER BY列名[ASC|DESC]…]
句法中[]表示該成分可有,也可無(wú)。
整個(gè)語(yǔ)句的執(zhí)行過(guò)程如下:
a) 讀取FROM子句中基本表、視圖的數(shù)據(jù),執(zhí)行笛卡爾積操作。
b) 讀取滿足WHERE子句中給出的條件表達(dá)式的元組。
c) 按GROUP子句中指定列的值分組,同時(shí)提取滿足HAVING子句中組條件表達(dá)式的那些組。
d) 按SELECT子句中給出的列名或列表達(dá)式求值輸出。
e) ORDER子句對(duì)輸出的目標(biāo)表進(jìn)行排序,按附加說(shuō)明ASC升序排列,或按DESC降序排列。
SELECT語(yǔ)句中,WHERE子句稱(chēng)為“行條件子句”,GROUP子句稱(chēng)為“分組
子句”,HAVING子句稱(chēng)為“組條件子句”,ORDER子句稱(chēng)為“排序子句”。
2.2.3 SQL的數(shù)據(jù)更新
SQL的數(shù)據(jù)更新包括數(shù)據(jù)插入、刪除和修改等三種操作
1)數(shù)據(jù)插入
a) 元組值的插入
INSERT INTO 基本表名(列名表)
VALUES(元組值)
或者 INSERT INTO 基本表名(列名表)
(TABLE(元組值),
。ㄔM值),
……)
前一種格式只能插入一個(gè)元組,后一種格式可以插入多個(gè)元組。
2)數(shù)據(jù)刪除
SQL的刪除操作是指從基本表刪除元組,其語(yǔ)法如下:
DELETE FROM 基本表名
[WHERE條件表達(dá)式]
其語(yǔ)義是從基本表中刪除滿足條件表達(dá)式的元組。
3)數(shù)據(jù)修改
當(dāng)需要修改基本表中元組的某些列值時(shí),可以用UPDATE語(yǔ)句實(shí)現(xiàn),其句法如下:
UPDATE 基本表名
SET 列名=值表達(dá)式[,列名=值表達(dá)式…]
[WHERE條件表達(dá)式]
其語(yǔ)義是:修改基本表中滿足條件表達(dá)式的那些元組中的列值,需修改的列值在SET子句中指出。
§2.3 PB6.5對(duì)數(shù)據(jù)庫(kù)的操作
PowerBuilder對(duì)數(shù)據(jù)庫(kù)的操作即可以通過(guò)數(shù)據(jù)窗口完成(本質(zhì)上是數(shù)據(jù)窗口把在屏幕上對(duì)數(shù)據(jù)
庫(kù)的操作轉(zhuǎn)化成SQL語(yǔ)句),又可以在PowerScript語(yǔ)言中直接調(diào)用SQL或存儲(chǔ)過(guò)程(本質(zhì)上仍是SQL
語(yǔ)句)完成。下面通過(guò)列舉兩個(gè)簡(jiǎn)單實(shí)例來(lái)描述在PowerScript程序調(diào)用SQL的方式:
1、SELECT語(yǔ)句查詢(xún)返回一行
如果SQL SELECT語(yǔ)句返回的結(jié)果只有一行,可以在PowerScript中書(shū)寫(xiě)以下的SQL語(yǔ)句:
SELECT 列名1,列名2,列名3,…
INTO:變量1,:變量2,:變量3…
FROM 表名1,表名2,表名3,…
WHERE…
其中,“變量1”,“變量2”和“變量3”等都是PowerScript語(yǔ)言的變量。該語(yǔ)句的作用是把數(shù)
據(jù)庫(kù)表的“列名1”,“列名2”和“列名3”等列的值從數(shù)據(jù)庫(kù)中取出,然后放入對(duì)應(yīng)的“變量1
”,“變量2”和“變量3”等變量中。例如:
String name, extrace
SELECT name,extract INTO : name , : extrace from auths
Where author_code=’A00001’;
該語(yǔ)句僅僅適合于查詢(xún)到一條記錄的情況。如果查詢(xún)到的記錄是多條,則要用下面的方法。
2、查詢(xún)多行
SELECT是描述型語(yǔ)言,它面向的是集合,是一組記錄。而PowerScript語(yǔ)言卻是面向過(guò)程的,它要
一條條地接收并處理記錄。PowerScript通過(guò)描述型光標(biāo)(CURSOR)在這組記錄上游動(dòng)的方法,給
Script語(yǔ)句逐個(gè)地傳送記錄,建立了集合與記錄間的內(nèi)在聯(lián)系。請(qǐng)看下例:
String name
String V1=’A%’
DECLARE CURSOR FOR file://定義光標(biāo),光標(biāo)名為C1
SELECT name FROM auths file://光標(biāo)對(duì)應(yīng)的SELECT語(yǔ)句
WHERE author_code like :V1; file://SELECT語(yǔ)句中用到了變量V1
OPEN C1; // 打開(kāi)光標(biāo),此時(shí)執(zhí)行此光標(biāo)對(duì)應(yīng)的SQL SELECT語(yǔ)句。
Lab1:
FETCH C1 INTO :name; file://取記錄,光標(biāo)下移一條
If SQLCA.SQLCode=0 then file://取記錄成功
Goto lab1 file://如果成功取出記錄,則取下一條
End if
打開(kāi)光標(biāo)的時(shí)候,變量V1被其值“A%”替換,因此最后執(zhí)行的SQL SELECT語(yǔ)句為:
SELECT name FROM auths
WHERE author_code like ‘A%’
執(zhí)行完這條語(yǔ)句后,把光標(biāo)C1定位到了查詢(xún)出的第一條記錄上。每執(zhí)行一次語(yǔ)句:
FECTCH C1 INTO。簄ame ;
則取出一條記錄送給變量name,然后光標(biāo)移到下一條記錄。如果想控制查詢(xún)結(jié)果的次序,必須在
SELECT語(yǔ)句中用ORDER BY子句,否則,沒(méi)有其它的辦法。我們不可能一下子把光標(biāo)定位在某條記
錄上,只能從第一條開(kāi)始,一個(gè)個(gè)地移。
第三章 PB6.5及其數(shù)據(jù)庫(kù)編程
§3.1 開(kāi)發(fā)工具PowerBuilder6.5
3.1.1 PowerBuilder6.5特點(diǎn)及功能
要適應(yīng)企業(yè)環(huán)境不斷變化的需求,成功地開(kāi)發(fā)出高質(zhì)量的應(yīng)用系統(tǒng),必須采用先進(jìn)的應(yīng)用開(kāi)發(fā)工
具。這對(duì)于減輕應(yīng)用開(kāi)發(fā)人員的開(kāi)發(fā)負(fù)擔(dān),提高開(kāi)發(fā)速度和質(zhì)量都有十分重要的意義。Sybase公
司推出的PowerBUilder6.0/6.5是用于Client/Server、Web及組件開(kāi)發(fā)的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)工具。它
占全球開(kāi)發(fā)工具市場(chǎng)近50%,是當(dāng)前最優(yōu)秀的開(kāi)發(fā)工具之一。它具有以下優(yōu)異的功能和特點(diǎn):
1、內(nèi)置的關(guān)系數(shù)據(jù)庫(kù)
PowerBuilder本身帶有一套數(shù)據(jù)庫(kù)系統(tǒng)Sybase SQL Anywhere。這樣做的好處是, PowerBuilder
可以脫離網(wǎng)絡(luò)數(shù)據(jù)庫(kù)服務(wù)器獨(dú)立運(yùn)行,從而在開(kāi)發(fā)階段脫離網(wǎng)絡(luò)服務(wù)器上的數(shù)據(jù)庫(kù)。當(dāng)然,利用
這一功能也可以開(kāi)發(fā)和調(diào)試單用戶(hù)的獨(dú)立的數(shù)據(jù)庫(kù)應(yīng)用。下圖顯示了內(nèi)置數(shù)據(jù)庫(kù)的工作原理:
如果沒(méi)有內(nèi)置的數(shù)據(jù)庫(kù)Sybase SQL Anywhere,開(kāi)發(fā)時(shí)則不能脫離網(wǎng)絡(luò)服務(wù)器上的數(shù)據(jù)庫(kù)(如圖3
-2所示):
2、數(shù)據(jù)窗口(Datawindow)對(duì)象
PowerBuilder擁有數(shù)據(jù)窗口這個(gè)具有專(zhuān)利技術(shù)的智能對(duì)象,利用該對(duì)象可以操作關(guān)系數(shù)據(jù)庫(kù)的數(shù)
據(jù)而無(wú)需編寫(xiě)SQL語(yǔ)句。用戶(hù)可以查詢(xún)、修改、插入、刪除、瀏覽、打印、以多種文件格式打開(kāi)和
存儲(chǔ)數(shù)據(jù),或在數(shù)據(jù)窗口中直接定義功能按鈕實(shí)現(xiàn)預(yù)定義的系統(tǒng)功能,如插入、刪除數(shù)據(jù)的操作
。它還支持?jǐn)?shù)據(jù)庫(kù)事務(wù)管理和并發(fā)控制等機(jī)制。其工作機(jī)理如下圖所示:
3、豐富的數(shù)據(jù)窗口數(shù)據(jù)源和多種樣式的數(shù)據(jù)顯示格式
數(shù)據(jù)窗口可以用來(lái)維護(hù)數(shù)據(jù)和顯示數(shù)據(jù),可定義多種顯示風(fēng)格和數(shù)據(jù)顯示格式;并且還可以與
TreeView控制、ListView控制配合使用,創(chuàng)建出更豐富的數(shù)據(jù)顯示格式
4、支持多種商業(yè)圖形,包括多種類(lèi)型的二維和三維的圖形
5、支持組件的開(kāi)發(fā)和調(diào)用
用PowerBuilder開(kāi)發(fā)的組件,可以在其它應(yīng)用中調(diào)用,可以由多種事務(wù)管理服務(wù)器管理。
6、具有面向?qū)ο蟮奶卣?br />PowerBuilder采用了面向?qū)ο蟮拈_(kāi)方式,這可以使系統(tǒng)開(kāi)發(fā)人員在無(wú)需精通專(zhuān)用語(yǔ)言的情況下就
可以迅速轉(zhuǎn)向面向?qū)ο蟮拈_(kāi)發(fā)。PowerBuilder應(yīng)用是由一系列對(duì)象組成的,包括窗口、菜單、函
數(shù)、數(shù)據(jù)窗口和各種控制等對(duì)象,它支持對(duì)象的繼承、封裝和多態(tài)性。
7、有機(jī)結(jié)合的集成開(kāi)發(fā)環(huán)境
8、完全支持Windows的窗口信息和控制
9、強(qiáng)有力的PowerScript編程語(yǔ)言
它能使開(kāi)發(fā)人員很容易地將簡(jiǎn)單或復(fù)雜的事務(wù)邏輯與應(yīng)用相配合。該語(yǔ)言還有幾百個(gè)函數(shù)用于操
縱對(duì)象、處理數(shù)字、文本、字符串、日期和應(yīng)用分布,進(jìn)行文件處理、報(bào)表打印,用DDE和OLE 2
.0進(jìn)行程序之間的通信,直接調(diào)用SQL語(yǔ)句操縱數(shù)據(jù)庫(kù)等等。
10、PowerBuilder提供了多種流行軟件的接口庫(kù)
Netware Library
Pen Computing Library
Lotus Notes Library
Microsoft MAPI
11、PowerBuilder支持多種平臺(tái)
目前,PowerBuilder能夠在Microsoft Windows 3.X、Windows 95Windows NTAlpha/IntelApple
Mac Sun Saloris IBM AIX HP Unix等多種平臺(tái)上開(kāi)發(fā)和運(yùn)行應(yīng)用程序,并能夠不加改動(dòng)地應(yīng)用于
其它平臺(tái)上。
12、支持Internet/Intranet下的Web應(yīng)用開(kāi)發(fā)
13、支持團(tuán)體開(kāi)發(fā)
14、對(duì)多種數(shù)據(jù)庫(kù)的支持
PowerBuilder幾乎支持所有的數(shù)據(jù)庫(kù),它提供了到多種數(shù)據(jù)庫(kù)的專(zhuān)用接口和ODBC接口。
§3.2 PowerBuilder與Client/Server體系結(jié)構(gòu)
3.2.1 Client/Server模式
在C/S結(jié)構(gòu)中,存在著幾個(gè)非常重要的基本概念,它們是:主機(jī)、終端、客戶(hù)機(jī)、工作站和服務(wù)器
。在分析C/S網(wǎng)絡(luò)結(jié)構(gòu)之前,必須搞清楚它們之間的區(qū)別。
最早的計(jì)算機(jī)網(wǎng)絡(luò)是伴隨著主機(jī)(Host)和終端(Terminal)這兩個(gè)概念的出現(xiàn)而產(chǎn)生的。當(dāng)時(shí)的
主機(jī)通常是指具有中央處理單元(CPU)的大型機(jī)或功能較強(qiáng)的小型機(jī),而終端則是指計(jì)算機(jī)的輸
入輸出設(shè)備。終端沒(méi)有自己的CPU,當(dāng)然也沒(méi)有自己的內(nèi)存,其主要功能是將鍵盤(pán)輸入的請(qǐng)求數(shù)據(jù)
發(fā)往主機(jī)并將主機(jī)的運(yùn)算結(jié)果顯示出來(lái)。主機(jī)和終端共同構(gòu)成了集中式系統(tǒng)結(jié)構(gòu)。在這種應(yīng)用系
統(tǒng)中,幾乎所有的工作都是由主機(jī)來(lái)完成,終端僅僅作為一種輸入輸出設(shè)備,因此系統(tǒng)負(fù)荷重、
效率低、擴(kuò)充性差。
之后隨著計(jì)算機(jī)網(wǎng)絡(luò)結(jié)構(gòu)的細(xì)化,不同的計(jì)算機(jī)開(kāi)始在網(wǎng)絡(luò)中擔(dān)負(fù)不同的任務(wù),于是出現(xiàn)了文件
服務(wù)器/網(wǎng)絡(luò)工作站(F/W)式結(jié)構(gòu)的模型。其中,工作站(Workstation)和服務(wù)器(Server)都
是獨(dú)立的計(jì)算機(jī)。當(dāng)一臺(tái)連入網(wǎng)絡(luò)的計(jì)算機(jī)向其它計(jì)算機(jī)(工作站)提供各種網(wǎng)絡(luò)服務(wù)(如數(shù)據(jù)
、文件的共享)時(shí),它就被叫做服務(wù)器。而那些用于訪問(wèn)服務(wù)器資料的計(jì)算機(jī)則被叫做工作站。
在F/W結(jié)構(gòu)中,所有實(shí)際的數(shù)據(jù)處理工作仍在運(yùn)行數(shù)據(jù)庫(kù)應(yīng)用程序的PC工作站上完成,因此不論文
件服務(wù)器的性能有多高,其整體網(wǎng)絡(luò)性能都將受到PC機(jī)能力的限制。
客戶(hù)機(jī)(Client)是伴隨C/S數(shù)據(jù)訪問(wèn)的興起而被提出來(lái)的,在一般人的理解中它和F/W概念沒(méi)有
本質(zhì)的區(qū)別。但是,嚴(yán)格說(shuō)來(lái),C/S模型并不是從物理分布的角度來(lái)定義的。它既包括具體的網(wǎng)絡(luò)
結(jié)構(gòu)設(shè)計(jì),又包括軟件的運(yùn)行和組織,所體現(xiàn)的是一種網(wǎng)絡(luò)數(shù)據(jù)的訪問(wèn)方式。這里的客戶(hù)機(jī)和服
務(wù)器不僅指承擔(dān)不同任務(wù)的計(jì)算機(jī)本身,而且包括主機(jī)上運(yùn)行的客戶(hù)端和服務(wù)器端的軟件環(huán)境。
它們的區(qū)別,是相對(duì)于各自在網(wǎng)絡(luò)數(shù)據(jù)庫(kù)訪問(wèn)中所處的地位或?qū)崿F(xiàn)的功能而言的。
理解了以上的基本概念,才可以更好地理解C/S結(jié)構(gòu)的實(shí)質(zhì)和運(yùn)行方式:所謂C/S結(jié)構(gòu),是將數(shù)據(jù)
存取與應(yīng)用程序分離開(kāi)來(lái),把一個(gè)軟件系統(tǒng)或應(yīng)用系統(tǒng)按功能分成若干個(gè)部分,再將這些軟件的
組成部分按其不同的角色分成Client軟件和Server軟件,分別放置在客戶(hù)機(jī)和服務(wù)器上?蛻(hù)機(jī)
程序負(fù)責(zé)用戶(hù)交互界面、數(shù)據(jù)表示及應(yīng)用處理邏輯等應(yīng)用部分,而服務(wù)器端則負(fù)責(zé)數(shù)據(jù)存取管理
、完整性控制及并發(fā)控制等數(shù)據(jù)庫(kù)管理部分?蛻(hù)機(jī)程序應(yīng)用通過(guò)SQL語(yǔ)句訪問(wèn)數(shù)據(jù)庫(kù),相應(yīng)的
SQL語(yǔ)句經(jīng)網(wǎng)絡(luò)傳輸?shù)椒⻊?wù)器端,由服務(wù)器端的數(shù)據(jù)庫(kù)服務(wù)器解釋執(zhí)行這些SQL語(yǔ)句,執(zhí)行后的結(jié)
果數(shù)據(jù)送回客戶(hù)機(jī)。
3.2.2 Client/Server體系結(jié)構(gòu)的優(yōu)缺點(diǎn)
我們看到,客戶(hù)/服務(wù)器體系結(jié)構(gòu)有以下優(yōu)點(diǎn):
l 應(yīng)用邏輯與數(shù)據(jù)實(shí)現(xiàn)分離,實(shí)現(xiàn)了在網(wǎng)絡(luò)上的負(fù)載均衡;
l 充分利用了網(wǎng)絡(luò)服務(wù)器的處理能力?蛻(hù)中需將請(qǐng)求送數(shù)據(jù)庫(kù)服務(wù)器,數(shù)據(jù)查詢(xún)工作由服務(wù)器
來(lái)承擔(dān),服務(wù)器的能力可以得到充分的發(fā)揮。
但是它也有以下一些缺點(diǎn):
l 由于計(jì)算機(jī)技術(shù)的快速進(jìn)步和企業(yè)需求變化的加快,企業(yè)面臨的硬件、網(wǎng)絡(luò)操作系統(tǒng)、數(shù)據(jù)庫(kù)
系統(tǒng)、開(kāi)發(fā)工具、應(yīng)用系統(tǒng)的升級(jí)周期越來(lái)越短,因此“維護(hù)”客戶(hù)服務(wù)器的費(fèi)用就變得越來(lái)越
高昂。
l 快速升級(jí)的硬件、網(wǎng)絡(luò)操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、開(kāi)發(fā)工具使企業(yè)的技術(shù)人員失去了方向:不斷
地消化新技術(shù),卻無(wú)瑕顧及企業(yè)要解決的問(wèn)題
l 在客戶(hù)端,必須安裝操作系統(tǒng)(一般為Windows95/NT)、網(wǎng)絡(luò)軟件、特定的中間件(Sybasse
Net-Library)以及應(yīng)用軟件系統(tǒng)才能工作,因此應(yīng)用系統(tǒng)的安裝、升級(jí)和維護(hù)通常需要專(zhuān)業(yè)人員
才能用勝任,且必須各站點(diǎn)逐個(gè)安裝,從而使客戶(hù)端的維護(hù)費(fèi)用變得也很高昂。對(duì)主機(jī)系統(tǒng)來(lái)說(shuō)
,這一點(diǎn)要優(yōu)越的多,只需要在主機(jī)上安裝一次即可。
3.2.3 PowerBuilder是客戶(hù)/服務(wù)器體系結(jié)構(gòu)下客戶(hù)端的開(kāi)發(fā)工具
前面已提到,PowerBuilder是客戶(hù)/服務(wù)器體系結(jié)構(gòu)下開(kāi)發(fā)客戶(hù)程序用的開(kāi)發(fā)工具,用
>PowerBuilder開(kāi)發(fā)出的程序可以存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。下圖表示了PowerBuilder與數(shù)據(jù)庫(kù)配合工
作的方式。
我們看到,PowerBuilder作為客戶(hù)端的應(yīng)用開(kāi)發(fā)工具,主要完成的是表示邏輯方面的工作,例如
,菜單、錄入界面。而數(shù)據(jù)庫(kù)服務(wù)器管理的是事務(wù)邏輯和數(shù)據(jù)存取方面的工作。因此,
PowerBuilder開(kāi)發(fā)工作應(yīng)分為兩部分,一部分是前臺(tái)表示邏輯方面的工作,另一部分是數(shù)據(jù)庫(kù)后
臺(tái)方面的設(shè)計(jì)工作(如數(shù)據(jù)庫(kù)觸發(fā)器、存儲(chǔ)過(guò)程和視圖等的設(shè)計(jì))。一個(gè)好的應(yīng)用系統(tǒng),前臺(tái)開(kāi)
發(fā)與后設(shè)計(jì)應(yīng)是有機(jī)結(jié)合、合理分布的;良好的后臺(tái)設(shè)計(jì)可以降低前臺(tái)的開(kāi)工作量,提高系統(tǒng)的
運(yùn)行效率。
§3.3 PowerBuilder6.5數(shù)據(jù)庫(kù)編程
PowerBuilder與數(shù)據(jù)庫(kù)的關(guān)系是“配合”與“協(xié)調(diào)”的關(guān)系。PowerBuilder完成數(shù)據(jù)請(qǐng)求、數(shù)據(jù)
表現(xiàn)、菜單、界面等表象方面的工作,而數(shù)據(jù)庫(kù)服務(wù)器完成數(shù)據(jù)庫(kù)數(shù)據(jù)的存儲(chǔ)管理、安全管理、
并發(fā)控制、事務(wù)管理、完整性維護(hù)、查詢(xún)優(yōu)化等工作。
PowerBuilder在操作數(shù)據(jù)庫(kù)時(shí)與以下幾方面有關(guān):
1、在數(shù)據(jù)庫(kù)畫(huà)筆中定義數(shù)據(jù)庫(kù)表和視圖
l 定義表的結(jié)構(gòu)
l 表中列的擴(kuò)展屬性
² 定義表中列的顯示風(fēng)格
² 定義表中列的編輯屏蔽
² 定義表中列的校驗(yàn)
l 定義表的主鍵
l 定義表的外部鍵
l 定義表的索引
PowerBuilder有五個(gè)系統(tǒng)表,這五個(gè)系統(tǒng)表是PowerBuilder初次連接到數(shù)據(jù)庫(kù)時(shí)系統(tǒng)自動(dòng)建立的
。下表給出了這個(gè)系統(tǒng)表的表名和它們的作用
PowerBuilder系統(tǒng)表 用途
PBCATTBL 存放表或視圖,表或視圖中列的缺省字體。
PBCATCOL 存放列用到的顯示風(fēng)格名、校驗(yàn)規(guī)則名和編輯風(fēng)格名;列的標(biāo)題、列的標(biāo)簽、字體的大
小寫(xiě),字體的對(duì)齊方式。
PBCATFMT 列的顯示風(fēng)格定義。
PBCATVLD 列的校驗(yàn)規(guī)則定義。
PBCATEDT 列的編輯風(fēng)格定義。
表3-1 PowerBuilder系統(tǒng)表
2、在數(shù)據(jù)庫(kù)畫(huà)筆中在圖形方式下操作數(shù)據(jù)庫(kù)
這些操作包括:
l 插入記錄
l 修改記錄
l 刪除記錄
l 查詢(xún)記錄
l 把查詢(xún)出的記錄存入文件
l 把表或視圖的定義轉(zhuǎn)變成建表的SQL語(yǔ)名
這些功能是給開(kāi)發(fā)人員和管理人員提供的。
3、在數(shù)據(jù)庫(kù)畫(huà)筆中用SQL語(yǔ)句執(zhí)行平臺(tái)管理操作數(shù)據(jù)庫(kù)
l 生成數(shù)據(jù)庫(kù)
l 管理數(shù)據(jù)庫(kù)
l 維護(hù)數(shù)據(jù)
在這里創(chuàng)建的表和規(guī)則不會(huì)記錄在PowerBuilder系統(tǒng)表中
4、在查詢(xún)畫(huà)筆中定義查詢(xún)對(duì)象
如果一個(gè)查詢(xún)動(dòng)作要多次使用,還可以用PowerBuilder的查詢(xún)畫(huà)表生成查詢(xún)對(duì)象這個(gè)查詢(xún)對(duì)象不
能由數(shù)據(jù)庫(kù)畫(huà)表調(diào)用,它只能由查詢(xún)畫(huà)表本身調(diào)用執(zhí)行。在建立數(shù)據(jù)窗口時(shí),數(shù)據(jù)源也可以做在
查詢(xún)對(duì)象之上。
事實(shí)上,查詢(xún)對(duì)象就是寫(xiě)好了的SQL語(yǔ)句,它存在PowerBuilder的pbl文件中,在使用的時(shí)候調(diào)用
即可。
5、用數(shù)據(jù)管道在不同數(shù)據(jù)庫(kù)之間轉(zhuǎn)換數(shù)據(jù)
數(shù)據(jù)管道允許把一個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)(一個(gè)或多個(gè)表中的全部或部分行)轉(zhuǎn)入到
另一個(gè)數(shù)據(jù)庫(kù)的一個(gè)表中(這個(gè)表可以存在或不存在),從而可以使數(shù)據(jù)在不同數(shù)據(jù)庫(kù)之間相互
復(fù)制。
6、用數(shù)據(jù)窗口操作數(shù)據(jù)庫(kù)
Datawindow是PowerBuilder操作數(shù)據(jù)庫(kù)的重要的手段,通過(guò)數(shù)據(jù)窗口可以查
修改、插入和刪除數(shù)據(jù)庫(kù)的數(shù)據(jù)。PowerBuilder數(shù)據(jù)窗口操作數(shù)據(jù)庫(kù)的能力非常強(qiáng),是
PowerBuilder的精華所在。
l 數(shù)據(jù)窗口的數(shù)據(jù)源可以是:
² 表或視圖
² 多表連接
² 查詢(xún)對(duì)象
² 外部數(shù)據(jù)源
² 存儲(chǔ)過(guò)程
l 數(shù)據(jù)窗口列數(shù)據(jù)的顯示風(fēng)格
l 數(shù)據(jù)窗口列的編輯屏蔽
l 數(shù)據(jù)窗口列的校驗(yàn)
7、PowerScript直接調(diào)用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)
PowerBuilder對(duì)數(shù)據(jù)庫(kù)的操作即可以通過(guò)數(shù)據(jù)窗口完成(本質(zhì)上是數(shù)據(jù)窗口屏幕上對(duì)數(shù)據(jù)庫(kù)的操作
轉(zhuǎn)化成SQL語(yǔ)句),又可以在PowerScript語(yǔ)言中直接調(diào)用SQL或存儲(chǔ)過(guò)程(本質(zhì)上仍是SQL語(yǔ)句)完成
。詳細(xì)操作在第*個(gè)章節(jié)已經(jīng)介紹。
第四章 局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)設(shè)計(jì)分析
根據(jù)數(shù)據(jù)庫(kù)系統(tǒng)生存期的設(shè)計(jì)方法,從數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)和開(kāi)發(fā)的全過(guò)程來(lái)考慮,將數(shù)據(jù)庫(kù)應(yīng)用系
統(tǒng)設(shè)計(jì)分為以下幾個(gè)階段(見(jiàn)圖4-1)
1)規(guī)劃;
2)需求分析;
3)概念設(shè)計(jì);
4)邏輯設(shè)計(jì)
5)物理設(shè)計(jì)
§4.1 應(yīng)用需求分析
要設(shè)計(jì)一個(gè)良好的局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng),就必須首先明確該應(yīng)用環(huán)境對(duì)系統(tǒng)的要求。局域網(wǎng)
圖書(shū)資料查詢(xún)系統(tǒng)的應(yīng)用背景為:一個(gè)數(shù)十人的科研或開(kāi)發(fā)小組,搜集了上千冊(cè)有用的圖書(shū)資料
,其中有一部分分布在個(gè)人手中,為了方便大家查閱,需要對(duì)每本書(shū)的狀態(tài)進(jìn)行跟蹤,另新進(jìn)和
丟失的圖書(shū)資料必須得到及時(shí)的反映。因此,該系統(tǒng)需滿足以下幾方面需求:
l 用戶(hù)的管理:必須具有使用權(quán)限的用戶(hù)才能成功登錄到系統(tǒng)中來(lái)。所謂用戶(hù)權(quán)限在這里并不要
求有功能上具體的劃分,集中實(shí)行松散管理,這建立在用戶(hù)高度自覺(jué)的基礎(chǔ)上。所以,在這里只
需給每個(gè)需要使用系統(tǒng)的人一個(gè)用戶(hù)名和密碼,即可登錄系統(tǒng)進(jìn)行各種操作。新的用戶(hù)需要取得
管理員的許可將其加入系統(tǒng),加入系統(tǒng)的用戶(hù)可以對(duì)自己的用戶(hù)密碼進(jìn)行修改。
l 查詢(xún)功能:系統(tǒng)需要提供幾種不同方式的查詢(xún)手段,以實(shí)現(xiàn)靈活方便地管理整個(gè)系統(tǒng)。
² 圖書(shū)分類(lèi)查詢(xún):一本圖書(shū)包括書(shū)名、出版社、作者、保管人等多個(gè)信息,這就要求系統(tǒng)能按照
不同的信息類(lèi)別對(duì)圖書(shū)進(jìn)行查詢(xún)。比如說(shuō),按書(shū)名查詢(xún)、按作者查詢(xún)等。選定需要的查詢(xún)信息類(lèi)
別,再輸入想查詢(xún)的內(nèi)容即可查詢(xún)到相關(guān)的圖書(shū)信息。
² 多條件查詢(xún):很多時(shí)候,用戶(hù)需要了解的信息不僅僅局限于一個(gè)條件,比方說(shuō)想同時(shí)查詢(xún)書(shū)名
為“數(shù)據(jù)庫(kù)原理”但出版社僅為“經(jīng)濟(jì)科學(xué)出版社”的圖書(shū)信息時(shí),單純的分類(lèi)查詢(xún)就不能滿足
用戶(hù)的需要,這時(shí)就要用到多條件查詢(xún)。也就是說(shuō),多條件查詢(xún)不僅可以實(shí)現(xiàn)單個(gè)的分類(lèi)查詢(xún),
還可以實(shí)現(xiàn)多條分類(lèi)查詢(xún)的組合查詢(xún)。每個(gè)查詢(xún)條件之間用“并且”或“或者”的關(guān)系關(guān)聯(lián)起來(lái)
組成完整的查詢(xún)條件。
² 模糊查詢(xún):對(duì)于用戶(hù)來(lái)說(shuō)并不一定完全記得某本圖書(shū)準(zhǔn)確的名稱(chēng),類(lèi)似,對(duì)于作者、出版社等
等信息來(lái)說(shuō),很多時(shí)候用戶(hù)只是記得一些相關(guān)的信息而不是一字不差的準(zhǔn)確信息。這個(gè)時(shí)候就要
用到模糊查詢(xún)。用戶(hù)輸入查詢(xún)內(nèi)容后,系統(tǒng)將會(huì)把包含查詢(xún)內(nèi)容的(注意:并不是精確的等于查詢(xún)
內(nèi)容)所有相關(guān)圖書(shū)信息顯示出來(lái),以使用戶(hù)得到準(zhǔn)確的、自己真正需要的信息內(nèi)容。
l 更新與編輯:
² 更新:系統(tǒng)允許用戶(hù)對(duì)查詢(xún)到的內(nèi)容進(jìn)行修改并且存盤(pán)。
² 編輯:系統(tǒng)允許用戶(hù)對(duì)現(xiàn)庫(kù)進(jìn)行插入、刪除的操作,保證現(xiàn)庫(kù)的真實(shí)性與實(shí)時(shí)性。
l 打印輸出:系統(tǒng)可以將用戶(hù)查詢(xún)到的內(nèi)容動(dòng)態(tài)地生成報(bào)表,并打印輸出。
§4.2 系統(tǒng)功能模塊劃分
局域網(wǎng)圖書(shū)圖書(shū)資料查詢(xún)系統(tǒng)功能劃分模塊圖如下:
§4.3 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
4.3.1 概念設(shè)計(jì)
概念設(shè)計(jì)的目標(biāo)是產(chǎn)生反映局域網(wǎng)圖書(shū)資料查詢(xún)系統(tǒng)需求的數(shù)據(jù)庫(kù)概念結(jié)構(gòu),即概念模式。概念
模式是獨(dú)立于數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu),獨(dú)立于支持?jǐn)?shù)據(jù)庫(kù)的DBMS,不依賴(lài)于計(jì)算機(jī)系統(tǒng)的。
l ER模型
ER模型是對(duì)現(xiàn)實(shí)世界的一種抽象。它的主要成分是實(shí)體、聯(lián)系和屬性。使
用這三種成分,我們可以建立許多應(yīng)用環(huán)境的ER模型。
l ER模型的操作
在利用ER模型進(jìn)行數(shù)據(jù)庫(kù)概念設(shè)計(jì)的過(guò)程中,常常需要對(duì)ER圖進(jìn)行種種
變換。這些變換又稱(chēng)為ER模型的操作,包括實(shí)體類(lèi)型、聯(lián)系類(lèi)型和屬性的分裂、合并和增刪等等
。
l 利用ER方法的數(shù)據(jù)庫(kù)概念設(shè)計(jì)
利用ER方法進(jìn)行數(shù)據(jù)庫(kù)的概念設(shè)計(jì),可以分成三步進(jìn)行:首先設(shè)計(jì)局部ER
模式,然后把各局部ER模式綜合成一個(gè)全局ER模式,最后對(duì)全局ER模式進(jìn)行優(yōu)化,得到最終
的ER模式,即概念模式。
1. 設(shè)計(jì)局部的ER模式
通常,一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)都是為多個(gè)不同用戶(hù)服務(wù)的。各個(gè)用戶(hù)對(duì)數(shù)據(jù)的觀點(diǎn)可能不一樣,信息處
理需求也可能不同。在設(shè)計(jì)數(shù)據(jù)庫(kù)概念結(jié)構(gòu)時(shí),為了更好地模擬現(xiàn)實(shí)世界,一個(gè)有效的策略是“
分而治之”,即先分別考慮各個(gè)用戶(hù)的信息需求,形成局部概念結(jié)構(gòu),然后再綜合成全局結(jié)構(gòu)。
在ER方法中,局部概念結(jié)構(gòu)又稱(chēng)為局部ER模式,其圖形表示稱(chēng)為ER圖。
實(shí)體和屬性的定義如下:
圖書(shū)(資料編號(hào),資料名稱(chēng),作者,出版社,出版日期,ISBN,資料類(lèi)別,購(gòu)買(mǎi)日期,保管人,
備注)
用戶(hù)(編號(hào),用戶(hù)代碼,用戶(hù)姓名,登錄口令,使用權(quán)限,查詢(xún)顯示項(xiàng),用戶(hù)顯示頭像)
資料類(lèi)別(資料編號(hào),資料類(lèi)別)
出版社(出版社編號(hào),出版社)
2. 聯(lián)系定義:
ER模型的“聯(lián)系”用于刻畫(huà)實(shí)體之間的關(guān)聯(lián)。一種完整的方式是對(duì)局部結(jié)構(gòu)中任意兩個(gè)實(shí)體類(lèi)型
,依據(jù)需求分析的結(jié)果,考察局部結(jié)構(gòu)中任意兩個(gè)實(shí)體類(lèi)型之間是否存在聯(lián)系。若有聯(lián)系,進(jìn)一
步確定是1:N,M:N,還是1:1等。還要考察一個(gè)實(shí)體類(lèi)型內(nèi)部是否存在聯(lián)系,兩個(gè)實(shí)體類(lèi)型之間是
否存在聯(lián)系,多個(gè)實(shí)體類(lèi)型之間是否存在聯(lián)系,等等。聯(lián)系定義如圖4-5所示。解釋如下:
l 一個(gè)用戶(hù)可以保管多本圖書(shū)資料,而一本圖書(shū)資料只能由一個(gè)用戶(hù)保管;
l 一個(gè)資料類(lèi)別可以對(duì)應(yīng)多本圖書(shū),而一本圖書(shū)只對(duì)應(yīng)一個(gè)資料類(lèi)別;
l 一本圖書(shū)由一個(gè)出版社出版,而一個(gè)出版社可以出版多種圖書(shū)。
3. 設(shè)計(jì)全局ER模式
所有局部ER模式都設(shè)計(jì)好了后,接下來(lái)就是把它們綜合成單一的全局概念結(jié)構(gòu)。全局概念結(jié)構(gòu)不
僅要支持所有局部ER模式,而且必須合理地表示一個(gè)完整、一致的數(shù)據(jù)庫(kù)概念結(jié)構(gòu)。
1)確定公共實(shí)體類(lèi)型
為了給多個(gè)局部ER模式的合并提供開(kāi)始合并的基礎(chǔ),首先要確定各局部結(jié)構(gòu)中的公共實(shí)體類(lèi)型。
在這一步中我們僅根據(jù)實(shí)體類(lèi)型名和鍵枕認(rèn)定公共實(shí)體類(lèi)型。一般把同名實(shí)體類(lèi)型作為公共實(shí)體
類(lèi)型的一類(lèi)候選,把具有相同鍵的實(shí)體類(lèi)型作為公共實(shí)體類(lèi)型的另一類(lèi)候選。
2)局部ER模式的合并
合并的原則是:首先進(jìn)行兩兩合并;先和合并那些現(xiàn)實(shí)世界中有聯(lián)系的局部結(jié)構(gòu);合并從公共實(shí)
體類(lèi)型開(kāi)始,最后再加入獨(dú)立的局部結(jié)構(gòu)。
>3)消除沖突
沖突分為三類(lèi):屬性沖突、結(jié)構(gòu)沖突、命名沖突。
設(shè)計(jì)全局ER模式的目的不在于把若干局部ER模式形式上合并為一個(gè)ER模式,而在于消除沖突,使
之成為能夠被所有用戶(hù)共同理解和接受的同一的概念模型。
3)全局ER模式的優(yōu)化
在得到全局ER模式后,為了提高數(shù)據(jù)庫(kù)系統(tǒng)的效率,還應(yīng)進(jìn)一步依據(jù)處理需求對(duì)ER模式進(jìn)行優(yōu)化
。一個(gè)好的全局ER模式,除能準(zhǔn)確、全面地反映用戶(hù)功能需求外,還應(yīng)滿足下列條件:實(shí)體類(lèi)型
的個(gè)數(shù)要盡可能的少;實(shí)體類(lèi)型所含屬性個(gè)數(shù)盡可能少;實(shí)體類(lèi)型間聯(lián)系無(wú)冗余。
4.3.2 邏輯設(shè)計(jì)
由于概念設(shè)計(jì)的結(jié)果是ER圖,DBMS一般采用關(guān)系型,因此數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)過(guò)程就是把ER圖轉(zhuǎn)化
為關(guān)系模式的過(guò)程。由于關(guān)系模型古有的優(yōu)點(diǎn),邏輯設(shè)計(jì)可以充分運(yùn)用關(guān)系數(shù)據(jù)庫(kù)規(guī)范化理論,
使設(shè)計(jì)過(guò)程形式化地進(jìn)行。設(shè)計(jì)結(jié)果是一組關(guān)系模式的定義。
1)導(dǎo)出初始關(guān)系模式
圖4-5 關(guān)系模式集
2)關(guān)系子模式
子模式是用戶(hù)所用到的那部分?jǐn)?shù)據(jù)的描述。除了指出用戶(hù)用到的數(shù)據(jù)外,還應(yīng)指出數(shù)據(jù)與概念模
式中相應(yīng)數(shù)據(jù)的聯(lián)系,即指出概念模式與子模式之間的對(duì)應(yīng)性。
圖書(shū)信息子模式((編號(hào)#,資料名稱(chēng),作者,出版社,出版日期,ISBN,資料類(lèi)別,購(gòu)買(mǎi)日期
,保管人,備注)用戶(hù)信息子模式(編號(hào),用戶(hù)代碼,用戶(hù)姓名,登錄口令,使用權(quán)限,查詢(xún)顯
示項(xiàng),用戶(hù)顯示頭像)
圖4-6 部分子模式
4.3.3 數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
我們選用Microsoft Office中的Access數(shù)據(jù)庫(kù)來(lái)進(jìn)行數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)。首先創(chuàng)建四個(gè)基本數(shù)據(jù)
庫(kù)表如如4-1-4-5所示,然后建立各個(gè)表之間的聯(lián)系,如圖4-8所示。
第五章 局域圖書(shū)資料查詢(xún)系統(tǒng)應(yīng)用程序設(shè)計(jì)
§5.1 系統(tǒng)模塊組成
§5.2 登錄模塊實(shí)現(xiàn)
圖5-2 登錄模塊圖
該窗口所含的控件信息如下:
風(fēng) 格 控件名 說(shuō) 明
用戶(hù)名 Single line edit Sle_1 ------
口令 Single line edit Sle_1 Propeties:passwd
登錄日期 Edit Mask Em_1 mask type:datamm/dd/yyyy
表5-1 登錄模塊控件信息表
控件:Sle_1 事件(event):Modified Script of modified:
string input_code,namesetfocus() file://將光標(biāo)定位在該控件
input_code=string(this.text) file://接收用戶(hù)輸入的值,并賦值給變量select name into
:name from keeperwhere id=:input_code or pym=:input_code;//從用戶(hù)表里查找滿足輸入條件
的記錄if sqlca.sqlcode=0 then this.Text=name setfocus(sle_2) file://查找成功,則光
標(biāo)跳轉(zhuǎn)到“口令”控件else if sqlca.sqlcode=100 then messagebox("提示!",& "對(duì)不起,
用戶(hù)不存在!",& StopSign!) return 1 file://查找不到符合條件的記錄則提示 else
messagebox("錯(cuò)誤!",& "error:"+string(sqlca.sqldbcode)& +"information:"+sqlca.
sqlerrtext) file://SQL出錯(cuò)提示 end ifend if
控件:Sle_2 事件(event):Modified Script of modified:
string input_passwd,passwd,droitinput_passwd=RightTrim(this.text)//去掉輸入值右邊的空
格select passwd into :passwdfrom keeperwhere name=:sle_1.text;passwd=RightTrim(
passwd);//從用戶(hù)表中校驗(yàn)口令的正確性if sqlca.sqlcode=0 then if input_passwd <>
passwd then messagebox('口令錯(cuò)誤','對(duì)不起,請(qǐng)重新輸入',stopsign!); sle_2.
SelectText(1, Len(sle_2.Text)) this.Clear()//口令錯(cuò)誤則清除輸入內(nèi)容 setfocus
(sle_2) elseif input_passwd=passwd then user=righttrim(sle_1.text) select droit
into :droit from keeper
where name=:user;//口令正確將用戶(hù)操作權(quán)限賦值給變量
open(main)//打開(kāi)程序主窗口 close(w_login)//關(guān)閉登錄窗口 end ifelseif
sqlca.sqlcode=100 then messagebox('提示!','無(wú)數(shù)據(jù)',Stopsign!) return 1else
messagebox("錯(cuò)誤!",& "error:"+string(sqlca.sqldbcode)& +"information:"+sqlca.
sqlerrtext) file://SQL出錯(cuò)提示end if
在登錄模塊中,用戶(hù)可輸入自己的編號(hào)或編碼來(lái)登錄系統(tǒng)。系統(tǒng)會(huì)根據(jù)用戶(hù)輸入的編號(hào)或編碼值
來(lái)自動(dòng)給出確實(shí)已存在庫(kù)中的用戶(hù)中文名,若查找不到庫(kù)中相匹配的記錄則提示出錯(cuò)或重輸。若
用戶(hù)存在,則提示輸入口令,口令正確則會(huì)順利進(jìn)入該系統(tǒng)主界面。
§5.3 查詢(xún)模塊的實(shí)現(xiàn)
圖5-3 查詢(xún)窗口
該窗口(w_main)控件列表如下:
風(fēng) 格 控件名 說(shuō) 明
顯示項(xiàng) Group Box gb_1 ------
資料名稱(chēng) Check Box cbx_1 Checked:true
作者 Check Box cbx_2 Checked:true
出版社 Check Box cbx_3 Checked:true
出版日期 Check Box cbx_4 Checked:false
類(lèi)別 Check Box cbx_5 Checked:true
購(gòu)買(mǎi)日期 Check Box cbx_6 Checked:false
ISBN Check Box cbx_7 Checked:false
保管人 Check Box cbx_8 Checked:true
備注 Check Box cbx_9 Checked:false
全選 Check Box cbx_10 選擇全部顯示項(xiàng)
檢索 Picture Box pb_1 模糊查詢(xún)檢索
插入 Picture Box pb_2 插入一條記錄
刪除 Picture Box pb_3 刪除一條記錄
檢索 Picture Box pb_4 組合查詢(xún)檢索
全部記錄 Picture Box pb_5 檢索全部記錄
退出 Picture Box pb_6 退出查詢(xún)界面
修改 Picture Box pb_7 進(jìn)入編輯模式
插入 Picture Box pb_8 插入一條查詢(xún)條件
刪除 Picture Box pb_9 刪除一條查詢(xún)條件
存盤(pán) Picture Box pb_10 修改后的數(shù)據(jù)存盤(pán)
打印 Picture Box pb_11 打印查詢(xún)結(jié)果報(bào)表
存為默認(rèn)顯示項(xiàng) Picture Box pb_12 將顯示項(xiàng)存為當(dāng)前用戶(hù)默認(rèn)
------ Single line edit sle_1 查詢(xún)內(nèi)容輸入(字符型)
------ Edit mask em_1 查詢(xún)內(nèi)容輸入(日期型)
------ Static text st_1 顯示當(dāng)前用戶(hù)名
------ Picture P_1 修改按鈕裝飾
------ Picture P_2 Gb_1顯示裝飾
------ Picture P_3 顯示當(dāng)前用戶(hù)頭像
------ Drop down list box ddlb_1 查詢(xún)項(xiàng)選擇
------ Drop down list box ddlb_2 查詢(xún)操作符選擇
------ Tab control tab_1 共有三個(gè)tabpage頁(yè)tabpage1:模糊查詢(xún)tabpage2:組合查詢(xún)tabpage3:
更新打印
------ Datawindows control dw_1 對(duì)應(yīng)數(shù)據(jù)窗口d_information圖書(shū)信息檢索
------ Datawindows control dw_2 對(duì)應(yīng)數(shù)據(jù)窗口d_query_condition查詢(xún)條件檢索
Command button Cb_2 模糊查詢(xún)操作符英-中轉(zhuǎn)換
表5-2 查詢(xún)模塊控件信息表
控件:w_main 事件(event):open Script of open
string mode,p,xs,headboolean xs_item[10]integer idw_1.settransobject(sqlca)dw_1.
Retrieve()//打開(kāi)窗口顯示全部記錄sj_check=0//為檢索窗口排序變量賦初值st_1.text=user//
在查詢(xún)窗口右上角顯示當(dāng)前用戶(hù)名SELECT "keeper"."display_item", "keeper"."
head_picture" INTO :xs, :head FROM "keeper" WHERE "keeper"."name" = :user;
//從用戶(hù)表中讀出當(dāng)前用戶(hù)的頭像值及顯示像值并分別賦值給變量 file://有頭像的用戶(hù)則顯示
在查詢(xún)窗口右上角if isnull(head) thenp_3.visible=false else p_3.picturename=
headend if ////將當(dāng)前用戶(hù)查詢(xún)顯示項(xiàng)變量讀出并賦值給每個(gè)查詢(xún)顯示控件for i=1 to 8 if
Mid (xs, i, 1)='0' then xs_item[i]=false else xs_item[i]=true end ifend for////給每
個(gè)對(duì)應(yīng)的CHECKBOX賦值,確實(shí)是勾還是叉cbx_2.checked = xs_item[1]cbx_3.checked =
xs_item[2]cbx_4.checked = xs_item[3]cbx_5.checked = xs_item[4]cbx_6.che