![Delphi數(shù)據(jù)庫(kù)編程課件_第1頁(yè)](http://file4.renrendoc.com/view/f4702a2d77a6f3f0f701eeb9fbc337c7/f4702a2d77a6f3f0f701eeb9fbc337c71.gif)
![Delphi數(shù)據(jù)庫(kù)編程課件_第2頁(yè)](http://file4.renrendoc.com/view/f4702a2d77a6f3f0f701eeb9fbc337c7/f4702a2d77a6f3f0f701eeb9fbc337c72.gif)
![Delphi數(shù)據(jù)庫(kù)編程課件_第3頁(yè)](http://file4.renrendoc.com/view/f4702a2d77a6f3f0f701eeb9fbc337c7/f4702a2d77a6f3f0f701eeb9fbc337c73.gif)
![Delphi數(shù)據(jù)庫(kù)編程課件_第4頁(yè)](http://file4.renrendoc.com/view/f4702a2d77a6f3f0f701eeb9fbc337c7/f4702a2d77a6f3f0f701eeb9fbc337c74.gif)
![Delphi數(shù)據(jù)庫(kù)編程課件_第5頁(yè)](http://file4.renrendoc.com/view/f4702a2d77a6f3f0f701eeb9fbc337c7/f4702a2d77a6f3f0f701eeb9fbc337c75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)系統(tǒng)導(dǎo)論
1.1數(shù)據(jù)處理概念
1.1.1數(shù)據(jù)與信息
1.?dāng)?shù)據(jù)
數(shù)據(jù)是指描述事物的符號(hào),可以有多種形式。數(shù)字、文字、圖形、圖像和聲音等都是數(shù)據(jù)。
2.信息
信息是現(xiàn)實(shí)世界中的各種事物、事物的特征及其聯(lián)系等在人腦中的反映,是經(jīng)過(guò)處理、加工提煉而用于決策制定或其他應(yīng)用活動(dòng)的數(shù)據(jù)。
3.?dāng)?shù)據(jù)與信息的關(guān)系信息和數(shù)據(jù)是兩個(gè)既有聯(lián)系又有區(qū)別的概念,數(shù)據(jù)是信息的載體,信息是數(shù)據(jù)的內(nèi)涵。同一信息可以有不同的數(shù)據(jù)表示形式,而同一數(shù)據(jù)也可能有不同的解釋。
1.1.2數(shù)據(jù)處理與數(shù)據(jù)管理
從已知的、原始的或雜亂無(wú)章中的數(shù)據(jù)中推導(dǎo)出對(duì)人們有用的數(shù)據(jù)或信息的過(guò)程稱為數(shù)據(jù)處理
數(shù)據(jù)管理是指數(shù)據(jù)的收集、整理、組織、存儲(chǔ)、查詢和傳送等各種操作,是數(shù)據(jù)處理的基本環(huán)節(jié),是任何數(shù)據(jù)處理任務(wù)的共性部分。數(shù)據(jù)庫(kù)技術(shù)就是一門(mén)數(shù)據(jù)管理技術(shù)。
1.2數(shù)據(jù)管理技術(shù)的發(fā)展
用計(jì)算機(jī)進(jìn)行數(shù)據(jù)管理由來(lái)已久,其發(fā)展經(jīng)歷了三個(gè)階段:(1)人工管理階段
人工管理方式由于程序和數(shù)據(jù)文件基本上是綁在一起的,故數(shù)據(jù)的獨(dú)立性差,無(wú)法實(shí)現(xiàn)數(shù)據(jù)共享,數(shù)據(jù)冗余度(同樣的數(shù)據(jù)出現(xiàn)多次稱為冗余)大。
應(yīng)用程序1應(yīng)用程序2應(yīng)用程序N數(shù)據(jù)文件1數(shù)據(jù)文件2數(shù)據(jù)文件N…………
人工管理方式
(2)文件管理階段文件管理階段的主要特點(diǎn)可概括為如下幾點(diǎn):(1)輔助存儲(chǔ)器成為計(jì)算機(jī)系統(tǒng)不可缺少的組成部分,用來(lái)存放數(shù)據(jù)文件。(2)出現(xiàn)了文件管理系統(tǒng)。(3)數(shù)據(jù)文件可能重復(fù)利用,不再與某個(gè)應(yīng)用程序綁在一起。文件管理階段的缺點(diǎn):程序和文件相互依存、數(shù)據(jù)冗余大、數(shù)據(jù)的不一致性以及不能反映企業(yè)間的業(yè)務(wù)聯(lián)系。
應(yīng)用程序1應(yīng)用程序2應(yīng)用程序N數(shù)據(jù)文件1數(shù)據(jù)文件2數(shù)據(jù)文件N文件管理系統(tǒng)…………文件管理方式
(3)數(shù)據(jù)庫(kù)管理階段與數(shù)據(jù)的文件管理方式相比,數(shù)據(jù)庫(kù)技術(shù)有如下主要特點(diǎn):
1.?dāng)?shù)據(jù)共享性
2.具有較高的數(shù)據(jù)與程序的獨(dú)立性
3.便于對(duì)數(shù)據(jù)實(shí)行集中統(tǒng)一的控制
應(yīng)用程序1應(yīng)用程序2應(yīng)用程序N邏輯文件1邏輯文件2邏輯性1邏輯文件N用戶1用戶2DBMS用戶NDB………………
數(shù)據(jù)庫(kù)管理方式
1.3數(shù)據(jù)模型
1.3.1信息世界的術(shù)語(yǔ)
1.實(shí)體:實(shí)體是指客觀存在并可相互區(qū)分的事物,不但指人和物,而且事件、抽象的狀態(tài)和概念也可以看作實(shí)體。
2.屬性:是實(shí)體所具有的某一特征,一個(gè)實(shí)體可由若干屬性來(lái)刻畫(huà)。
3.實(shí)體集:具有相同類特征的實(shí)體集合稱為實(shí)體集。
4.聯(lián)系:根據(jù)聯(lián)系的特點(diǎn)可將其分成三種基本類型:1對(duì)1的聯(lián)系,1對(duì)多的聯(lián)系,多對(duì)多的聯(lián)系。
5.關(guān)鍵字
6.值域:實(shí)體屬性的取值范圍。
1.3.2三大數(shù)據(jù)模型
1.層次模型
層次模型是指滿足下列條件的基本層次聯(lián)系的集合:(1)有且僅有一個(gè)節(jié)點(diǎn)無(wú)父結(jié)點(diǎn),此結(jié)點(diǎn)稱為根結(jié)點(diǎn);(2)根結(jié)點(diǎn)以外的其它結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。
學(xué)院系部研究所班級(jí)教研室處科研究室層次模式示意圖
2.網(wǎng)狀模型
網(wǎng)狀模型具有以下特點(diǎn):(1)可以有一個(gè)以上結(jié)點(diǎn)無(wú)父點(diǎn)(2)至少有一個(gè)結(jié)點(diǎn)具有一個(gè)多于一個(gè)的父結(jié)點(diǎn)。
ABBABCABCDABBABCABCD
圖狀模型示意圖
3.關(guān)系模型關(guān)系數(shù)據(jù)模型是三大經(jīng)典模型中最晚發(fā)展有一種,是相對(duì)建模能力最強(qiáng)的一種,也是目前使用得最多的一種模型。關(guān)系應(yīng)具有以下性質(zhì):(1)關(guān)系中不允許有相同的屬性名;(2)每一列的數(shù)據(jù)類型必須相同,且取自于同一個(gè)域;(3)不允許有相同的元組;(4)行的順序和列的順序可以任意排列;(5)關(guān)系的任何一個(gè)屬性都必須是不可再分的元素;(6)關(guān)系的結(jié)構(gòu)相對(duì)固定,但元組的值與數(shù)目是隨時(shí)間的推移而經(jīng)常變化的。
1.3.3數(shù)據(jù)模型的三要素
數(shù)據(jù)模型通常由下列三個(gè)部分組成:
1.?dāng)?shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是所研究對(duì)象的類型的集合,這些對(duì)象是數(shù)據(jù)庫(kù)的組成成分。一般可以分為兩類:一類是與數(shù)據(jù)類型、內(nèi)容有關(guān)的對(duì)象,另一類是與數(shù)據(jù)之間聯(lián)系有關(guān)的對(duì)象。
2.?dāng)?shù)據(jù)操作數(shù)據(jù)操作是指對(duì)數(shù)據(jù)模型中各種對(duì)象型的實(shí)例所允許執(zhí)行的操作,包括操作及有關(guān)的操作規(guī)則。數(shù)據(jù)結(jié)構(gòu)是對(duì)系統(tǒng)靜態(tài)特性的描述,數(shù)據(jù)操作是對(duì)系統(tǒng)動(dòng)態(tài)特性的描述。
3.?dāng)?shù)據(jù)的完整性約束條件:數(shù)據(jù)的完整性約束條件是完整性規(guī)則的集合。
1.4數(shù)據(jù)庫(kù)系統(tǒng)體系結(jié)構(gòu)
應(yīng)用程序1UWA1應(yīng)用程序2UWA2應(yīng)用程序3UWA3外模式A外模式B模式外模式\模式映射外模式\模式映射內(nèi)模式模式/內(nèi)模式映射DBMS…………DBDB
數(shù)據(jù)庫(kù)的三級(jí)體系結(jié)構(gòu)
SPARC結(jié)構(gòu)對(duì)數(shù)據(jù)庫(kù)的組織從內(nèi)到外分三個(gè)層次描述,分別稱為內(nèi)模式、模式和外模式,三個(gè)模式反映了看待數(shù)據(jù)庫(kù)的三種不同數(shù)據(jù)觀點(diǎn)。SPARC結(jié)構(gòu)如圖:SPARC結(jié)構(gòu)對(duì)數(shù)據(jù)庫(kù)的組織從內(nèi)到外分三個(gè)層次描述,分別稱為:(1)模式(2)內(nèi)模式(3)外模式在三個(gè)模式之間存在著兩種映射:模式/外模式映射;模式/
模式映射采用映射技術(shù)還有以下好處:(1)保證了數(shù)據(jù)共享;(2)有利于數(shù)據(jù)的安全保密;(3)方便用戶使用數(shù)據(jù)庫(kù)。
1.5數(shù)據(jù)庫(kù)系統(tǒng)組成
基本計(jì)算機(jī)系統(tǒng)
數(shù)據(jù)庫(kù)(DB)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)數(shù)據(jù)庫(kù)應(yīng)用程序數(shù)據(jù)庫(kù)管理員(DBA)
1.6數(shù)據(jù)庫(kù)管理系統(tǒng)的組成
一般來(lái)說(shuō)DBMS由下列三類軟件組成:
(1)語(yǔ)言
1.程序設(shè)計(jì)語(yǔ)言
2.定義和操作數(shù)據(jù)庫(kù)的語(yǔ)言
(1)數(shù)據(jù)描述語(yǔ)言(DDL)(2)數(shù)據(jù)操縱/查詢語(yǔ)言(DML)(2)控制數(shù)據(jù)庫(kù)運(yùn)行的程序(3)數(shù)據(jù)庫(kù)維護(hù)程序
1.7客戶/服務(wù)器數(shù)據(jù)庫(kù)系統(tǒng)概述
按照當(dāng)前流行的程序設(shè)計(jì)方法,可以將數(shù)據(jù)庫(kù)應(yīng)用程序分為兩類:
(1)兩層結(jié)構(gòu)的客戶/服務(wù)器(C/S)數(shù)據(jù)庫(kù)應(yīng)用程序。數(shù)據(jù)庫(kù)服務(wù)器DB客戶機(jī)1客戶機(jī)2……客戶機(jī)n第一層第二層(2)三層C/S結(jié)構(gòu)
數(shù)據(jù)庫(kù)服務(wù)器DB客戶機(jī)1客戶機(jī)2……客戶機(jī)n第一層第二層應(yīng)用服務(wù)器第三層小結(jié)
本課主要講解了與數(shù)據(jù)庫(kù)有關(guān)的基本概念,包括數(shù)據(jù)處理與數(shù)據(jù)管理技術(shù)的發(fā)展、數(shù)據(jù)模型的基本概念、數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)、數(shù)組庫(kù)系統(tǒng)的組成以及數(shù)據(jù)庫(kù)管理系統(tǒng)的組成等,最后還介紹了客戶/服務(wù)器結(jié)構(gòu)的數(shù)據(jù)庫(kù)系統(tǒng)的構(gòu)成。
關(guān)系數(shù)據(jù)庫(kù)基本理論
2.1關(guān)系數(shù)據(jù)庫(kù)的基本概念
2.1.1
關(guān)系與關(guān)系模式
在關(guān)系模型中,實(shí)體和實(shí)體之間的聯(lián)系都由單一的數(shù)據(jù)結(jié)構(gòu)——關(guān)系來(lái)描述,關(guān)系型數(shù)據(jù)庫(kù)都是由一張或多張相關(guān)聯(lián)的表(關(guān)系)組成。對(duì)關(guān)系數(shù)據(jù)庫(kù)中每一關(guān)系的結(jié)構(gòu)的描述,稱為該關(guān)系的關(guān)系模式,也就是一個(gè)關(guān)系的型。2.1.2關(guān)系數(shù)據(jù)庫(kù)與關(guān)系數(shù)據(jù)庫(kù)模式
關(guān)系數(shù)據(jù)庫(kù)模式中所有的關(guān)系模式的具體關(guān)系的集合稱之為關(guān)系數(shù)據(jù)庫(kù)。圖示
2.1.3視圖
視圖通常是由關(guān)系數(shù)據(jù)庫(kù)模式的某個(gè)關(guān)系中滿足用戶給定條件的若干屬性列或元組組成,也可以是對(duì)若干個(gè)不同關(guān)系進(jìn)行關(guān)系運(yùn)算的結(jié)果,它反映的是局部邏輯結(jié)構(gòu)。
教師編號(hào)姓名性別學(xué)位工作日期單位職稱0001王寧軍男學(xué)士94/07/15計(jì)算機(jī)講師1006陳平男碩士72/09/01力學(xué)副教授2008周華俊女碩士95/08/01電子電工講師
教師信息表
課號(hào)課名班級(jí)學(xué)時(shí)教師編號(hào)00001C語(yǔ)言程序97計(jì)算機(jī)40000100003匯編語(yǔ)言97計(jì)算機(jī)70000110002工程力學(xué)96工民建80100610006基礎(chǔ)力學(xué)98建工80100620004模擬電路97無(wú)線電通信702008
授課信息表
2.1.4關(guān)鍵字
1.超關(guān)鍵字
2.候選關(guān)鍵字
3.主關(guān)鍵字
4.外部關(guān)鍵字
5.主屬性和非主屬性
基表1基表2基表3基表4視圖1視圖2視圖3視圖與表的關(guān)系示意圖
2.2關(guān)系的完整性
關(guān)系的完整性包括三類:
(1)實(shí)體完整性實(shí)體完整性是指在關(guān)系中的任何一個(gè)元組,主關(guān)鍵字值的任一分量都不允許為空。
(2)參照完整性
(3)用戶定義完整性由用戶針對(duì)數(shù)據(jù)的具體語(yǔ)義約束條件,來(lái)定義的完整性,稱用戶自定義完整性。如人的年齡可以規(guī)定在0~150之間取值,考試成績(jī)只能在0~100之間等。
2.3關(guān)系的數(shù)學(xué)定義
2.3.1一個(gè)日常生活中的關(guān)系
某小區(qū)有2名男同志和3名女同志,把男人看成一個(gè)集合M,把女人看成一個(gè)集合W,如下:
M={趙和平,李振華};
W={李小麗,張小琴,王麗婭}。若M集合和W集合存在著夫妻關(guān)系,則可能的夫妻關(guān)系如下:
{(趙和平,李小麗),(趙和平,張小琴),(趙和平,王麗婭),(李振華,李小麗),(李振華,張小琴),(李振華,王麗婭)}
在數(shù)學(xué)上把這種由兩個(gè)或多個(gè)集合中的值的所有可能組合稱“笛卡爾積”,本題的“笛卡爾積”可記為:M×W。
2.3.2關(guān)系的數(shù)學(xué)定義
1.域域(Domain)是值的集合。如:{1到100之間的整數(shù)},{男,女},{Mary,Tom}等都是域。域中元素的個(gè)數(shù)稱為域的基數(shù),如有下列集合:D1={王小平,張亞,李軍},表示單位人員的集合;D2={教授,副教授,講師,助教},表示職稱的集合;D3={35,27,18},表示工齡的集合。其中D1的基數(shù)是3,D2的基數(shù)是4,D3的基數(shù)是3。2.笛卡爾積
給定一組域,,…,,這些域中可以有相同的域,則,,…,的笛卡爾積為:
××…×={(,,…,)|∈,i=1,2,…,n}其中每一個(gè)元素(,,…,)稱為一個(gè)元組,元素中的每一個(gè)稱為分量。當(dāng)n的值為1時(shí)稱為單元組,當(dāng)n的值為2時(shí),稱為二元組,以此類推。若(i=1,2,…,n)的基數(shù)是,則笛卡爾積××…×的基數(shù)M為:3.關(guān)系
【例】教師關(guān)系例。有以下三個(gè)域:D1={張正義,姚小麗},教師姓名集合;D2={男,女},教師性別集合;D3={21,24},教師年齡集合。求D1×D2×D3
。
解:笛卡爾××的值可用左表表示:實(shí)際的教師信息可能如右表
D1D2D3張正義男21張正義男24張正義女21張正義女24姚小麗男21姚小麗男24姚小麗女21姚小麗女24D1D2D3張正義男21姚小麗女242.4關(guān)系代數(shù)
2.4.1傳統(tǒng)的集合運(yùn)算
1.并運(yùn)算(UNION)
2.交運(yùn)算(INTERSECTION)
3.差運(yùn)算(DIFFERENCE)
4.關(guān)系的笛卡爾積
2.4.2專門(mén)的關(guān)系運(yùn)算
1.選擇(SELECT)運(yùn)算
2.投影(PROJECTION)運(yùn)算
3.聯(lián)接運(yùn)算(JOIN)
(1)內(nèi)部聯(lián)接(InnerJoin)
(2)自然聯(lián)接運(yùn)算(Naturaljoin)
(3)左外聯(lián)接(Leftouterjoin)
(4)右外聯(lián)接(Rightouterjoin)
(5)全外聯(lián)接(Fullouterjoin)
2.5關(guān)系的規(guī)范化
2.5.1存儲(chǔ)異常
【例】某校教務(wù)部要建立一個(gè)數(shù)據(jù)庫(kù)來(lái)描述教師與教研室的情況,面臨的對(duì)象有:教師編號(hào)(TNO)、教師姓名(TNAME)、教師主講的課程名(KNAME)、教師主講課程的次數(shù)(KTIME)、教研室代號(hào)(JNO)、教研室主任(JMN)等。通過(guò)分析可知上述對(duì)象之間有如下對(duì)應(yīng)關(guān)系:(1)一個(gè)教研室有若干教師,但一個(gè)教師只屬于一個(gè)教研室;(2)一個(gè)教研室只有一個(gè)主任;(3)一名教師可以主講多門(mén)課程,每門(mén)課程可由多名教師主講;(4)每名教師主講每門(mén)課程有一定的次數(shù)。根據(jù)上述分析,我們可以考慮以下兩種數(shù)據(jù)庫(kù)模式的選擇方案。方案1:采用一個(gè)總的關(guān)系模式:方案2:采用三個(gè)關(guān)系模式:
2.5.2函數(shù)依賴的基本概念
1.函數(shù)依賴函數(shù)依賴根據(jù)其性質(zhì)可分為完全函數(shù)依賴、部分函數(shù)依賴和傳遞函數(shù)依賴。2.完全函數(shù)依賴設(shè)R為任一給定關(guān)系,X,Y為其屬性或?qū)傩越M,若X
Y,且對(duì)X中的任何真子集X
都有XY,則稱Y完全函數(shù)依賴于X。記作:3.部分函數(shù)依賴設(shè)R為任一給定關(guān)系,X,Y為其屬性或?qū)傩越M,若X
Y,且在X中存在一個(gè)真子集X
,滿足X
Y,則稱Y部分函數(shù)依賴于X。記作:
4.傳遞函數(shù)依賴
設(shè)R為任一給定關(guān)系,X,Y,Z為其不同屬性子集,若X
Y,YX,Y
Z,則稱Z傳遞函數(shù)依賴于X,
2.5.3關(guān)系規(guī)范化的過(guò)程
1.第一范式任給關(guān)系R,如果R中每一屬性的值域中的每一個(gè)值都是不可分解的,則R為第一范式,記作R∈1NF。
教師編號(hào)所教課程0001程序設(shè)計(jì)0002程序設(shè)計(jì),操作系統(tǒng)非規(guī)范化關(guān)系
教師編號(hào)所教課程0001程序設(shè)計(jì)0002程序設(shè)計(jì)0002操作系統(tǒng)規(guī)范化的關(guān)系
2.第二范式任給關(guān)系R,若R∈1NF,且其所有非主屬性都完全函數(shù)依賴于關(guān)鍵字,則R為第二范式,記作R∈2NF。3.第三范式任給關(guān)系R,若R∈2NF,且它的每一個(gè)非主屬性都不傳遞依賴于主關(guān)鍵字,則R屬性第三范式,記作R∈3NF。4.BCNF范式
BCNF(BoyceCoddNormalForm)是Boyce與Codd為解決3NF有時(shí)出現(xiàn)的插入與刪除操作異常問(wèn)題而提出的
2.5.4關(guān)系分解的正確性
把組合屬性分解為不可再分的屬性非規(guī)范化關(guān)系1NF2NF3NFBCNF消去非主屬性對(duì)主關(guān)鍵字的部分函數(shù)依賴消去非主屬性對(duì)主關(guān)鍵字的傳遞函數(shù)依賴消去所有部分函數(shù)依賴,包括主屬性對(duì)候選關(guān)鍵字的部分函數(shù)依賴使每一個(gè)決定因素都包含候選碼
關(guān)系分解的過(guò)程
通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明關(guān)系分解的正確性。
在某學(xué)校中,一個(gè)學(xué)生(學(xué)號(hào)屬性名為S#)只在一個(gè)系(系號(hào)屬性名為DEPT)學(xué)習(xí),一個(gè)系只有一名系主任(姓名屬性名為MN),下表是該學(xué)校的一個(gè)實(shí)際關(guān)系,其關(guān)系模式為R(S#,DEPT,MN)。可見(jiàn)在該關(guān)系中,MN傳遞函數(shù)依賴于S#,故需對(duì)之進(jìn)行關(guān)系分解。可有三種方法:
S#DEPTMNS1D1張五S2D1張五S3D2李四S4D3王一1.分解成三個(gè)關(guān)系:R1(S#),R2(DEPT),R3(MN)
S#S1S2S3S4關(guān)系R1
DEPTD1D2D3
關(guān)系R2
MN張五李四王一關(guān)系R3
2.分解成兩個(gè)關(guān)系:R1(S#,DEPT),R2(S#,MN)
S#DEPTS1D1S2D1S3D2S4D3關(guān)系R1
S#MNS1張五S1張五S2李四S3王三關(guān)系R2
3.分解成兩個(gè)關(guān)系:R1(S#,DEPT)和R2(DEPT,MN)
S#DEPTS1D1S2D1S3D2S4D3
關(guān)系R1
DEPTMNS1張五S2李四S3王三
關(guān)系R2
小結(jié)
本課主要講解關(guān)系數(shù)據(jù)庫(kù)的理論基礎(chǔ),為進(jìn)一步深入學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)的原理與應(yīng)用打下基礎(chǔ)。本課在討論關(guān)系數(shù)據(jù)庫(kù)的基本概念的基礎(chǔ)上,探討了關(guān)系的數(shù)字定義、關(guān)系的完整性、關(guān)系代數(shù)的一些基本操作、函數(shù)依賴與關(guān)系的規(guī)范化等學(xué)習(xí)關(guān)系數(shù)據(jù)庫(kù)必須要了解的理論基礎(chǔ)。關(guān)系代數(shù)與關(guān)系的規(guī)范化是本章的重點(diǎn)。
實(shí)體聯(lián)系模型(E-R模型)
3.1E—R模型
3.1.1三個(gè)世界
事物類事物性質(zhì)實(shí)體集實(shí)體屬性文件記錄數(shù)據(jù)項(xiàng)現(xiàn)實(shí)世界信息世界數(shù)據(jù)世界3.1.2E-R模型的組成要素及表示方法
1.E-R圖的組成要素及其畫(huà)法2.實(shí)體間不同聯(lián)系情況的E-R圖表示法【例
】?jī)蓚€(gè)實(shí)體集之間的一對(duì)一的聯(lián)系的繪制方法。假設(shè)某學(xué)院有若干個(gè)系,每個(gè)系只有一個(gè)主任。則主任和系之間是一對(duì)一的關(guān)系。主任和系的屬性分別如下:主任——編號(hào),姓名,年齡,學(xué)歷;系——系編號(hào),系名,主任和系之間是一個(gè)管理關(guān)系
實(shí)體名聯(lián)系名屬性名實(shí)體表示屬性表示聯(lián)系表示解:描述主任和系之間的E-R圖可如下圖:
1主任系管理1姓名年齡學(xué)歷編號(hào)系編號(hào)系名任職時(shí)間【例
】?jī)蓚€(gè)實(shí)體集之間的一對(duì)多的聯(lián)系的繪制方法。假設(shè)在某倉(cāng)庫(kù)管理系統(tǒng)中,有兩個(gè)實(shí)體集:倉(cāng)庫(kù)和商品。倉(cāng)庫(kù)用來(lái)存放商品,且規(guī)定一類商品只能存放在一個(gè)倉(cāng)庫(kù)中,一個(gè)倉(cāng)庫(kù)可以存放多件商品。倉(cāng)庫(kù)和商品之間是一對(duì)多的聯(lián)系。倉(cāng)庫(kù)和商品的屬性分別如下:倉(cāng)庫(kù)——倉(cāng)庫(kù)號(hào),地點(diǎn),面積聯(lián)單
商品——商品號(hào),商品名,價(jià)格在存放聯(lián)系中要反映出存放商品的數(shù)量。
解:描述倉(cāng)庫(kù)和商品之間的E-R圖可如下圖所示
1倉(cāng)庫(kù)商品存放n地點(diǎn)面積倉(cāng)庫(kù)號(hào)商品號(hào)價(jià)格數(shù)量商品名【例】?jī)蓚€(gè)實(shí)體集之間的多對(duì)多的聯(lián)系的繪制方法。
假設(shè)在某教務(wù)管理系統(tǒng)中,一個(gè)教師可以上多門(mén)課,一門(mén)課也可以由多個(gè)老師去上。教師和課程之間是多對(duì)多的聯(lián)系。教師和課程可用以下屬性來(lái)描述:教師——教師號(hào),教師名,職稱
課程——課程號(hào),課程名,班級(jí)在“講授”聯(lián)系中應(yīng)能反映出教師的授課質(zhì)量。
解:描述教師和課程之間的E-R圖可如下圖所示。
m教師課程講授n教師名職稱教師號(hào)課程號(hào)班級(jí)質(zhì)量課程名3.2E—R圖的設(shè)計(jì)方法
E-R圖通常都應(yīng)經(jīng)過(guò)以下兩個(gè)階段:
(1)針對(duì)每一用戶畫(huà)出該用戶信息的局部E—R圖,確定該用戶視圖的實(shí)體、屬性和聯(lián)系。需注意的是:能作為屬性的就不要作為實(shí)體,這有利于E—R圖的簡(jiǎn)化。
(2)綜合局部E—R圖,生成總體E—R圖。在綜合過(guò)程中,同名實(shí)體只能出現(xiàn)一次,還要去掉不必要的聯(lián)系,以便消除冗余。一般來(lái)說(shuō),從總體E—R圖必須能導(dǎo)出原來(lái)的所有局部視圖,包括實(shí)體、屬性和聯(lián)系。
【例
】某學(xué)校管理系統(tǒng)中有三個(gè)部門(mén):后勤部、學(xué)生處和財(cái)務(wù)處。后勤部用來(lái)管理學(xué)生的住宿;教務(wù)處用來(lái)管理學(xué)生選課和教師任課;財(cái)務(wù)處用來(lái)管理發(fā)放教師的工資。
后勤部涉及到的實(shí)體及實(shí)體之間的聯(lián)系如下:
學(xué)生:屬性有學(xué)號(hào)、姓名、性別、年齡、專業(yè)和入學(xué)時(shí)間宿舍:樓號(hào)、房間、檔次學(xué)生與宿舍的聯(lián)系是一個(gè)學(xué)生只能住在一個(gè)宿舍,一個(gè)宿舍能住多個(gè)學(xué)生,學(xué)生住宿要交租金。教務(wù)處涉及到的實(shí)體及實(shí)體之間的聯(lián)系如下:學(xué)生:屬性有學(xué)號(hào)、姓名、性別、年齡、專業(yè)和入學(xué)時(shí)間教師:屬性有教師號(hào)、姓名、性別、職稱、專業(yè)課程:屬性有課程號(hào)、課程名、學(xué)時(shí)數(shù)、專業(yè)各實(shí)體關(guān)系描述如下:一個(gè)學(xué)生可以選多門(mén)課,一門(mén)課可以由多個(gè)學(xué)生選修;一個(gè)教師可以教多門(mén)課,一門(mén)課也可以由多個(gè)老師教;學(xué)生選修某門(mén)課有一個(gè)成績(jī);教師教某門(mén)課有一個(gè)質(zhì)量評(píng)價(jià)。
財(cái)務(wù)處涉及到的實(shí)體及實(shí)體之間的聯(lián)系如下:
教師:屬性有教師號(hào)、姓名、性別、職稱、專業(yè)工資:屬性有基本工資、加班工資、扣稅、工資編號(hào)教師和工資的聯(lián)系是:一個(gè)教師只能領(lǐng)一份工資,一份工資只能由一個(gè)教師領(lǐng),領(lǐng)工資時(shí)應(yīng)注明是某月工資。解:先根據(jù)題意設(shè)計(jì)出各部門(mén)的局部E-R圖
n學(xué)生宿舍住1租金學(xué)生姓名專業(yè)學(xué)號(hào)宿舍樓號(hào)檔次年齡性別入學(xué)時(shí)間房間號(hào)(a)后勤部的局部E-R圖
教師姓名職稱教師號(hào)課程課程號(hào)學(xué)時(shí)數(shù)課程名性別專業(yè)專業(yè)m教師課程講授n質(zhì)量學(xué)生選修mn成績(jī)(b)教務(wù)處的局部E-R圖(學(xué)生同(a)圖)
工資扣稅基本工資加班工資工資編號(hào)工資教師領(lǐng)11月份1m學(xué)生住宿舍n1教師課程選修mn講授n領(lǐng)工資1(c)財(cái)務(wù)處的局部E-R圖(教師同(b)圖)
某學(xué)校管理系統(tǒng)的全局E-R圖
3.3E—R模型到關(guān)系模型的轉(zhuǎn)換
把E-R圖轉(zhuǎn)換為關(guān)系模型可遵循如下原則
:
(1)對(duì)于E—R圖中每個(gè)實(shí)體集,都應(yīng)轉(zhuǎn)換為一個(gè)關(guān)系,該關(guān)系應(yīng)包括對(duì)應(yīng)實(shí)體的全部屬性,并應(yīng)根據(jù)關(guān)系所表達(dá)的語(yǔ)義確定哪個(gè)屬性或哪幾個(gè)屬性組作為“主關(guān)鍵字”,主關(guān)鍵字用來(lái)標(biāo)識(shí)實(shí)體。(2)對(duì)于E—R圖中的聯(lián)系,情況比較復(fù)雜,要根據(jù)實(shí)體聯(lián)系方式的不同,采取不同的手段加以實(shí)現(xiàn)。下面著重討論聯(lián)系的轉(zhuǎn)換方法。
3.3.1兩實(shí)體集間1:n聯(lián)系
兩實(shí)體集間1:n聯(lián)系,可將“一方”實(shí)體的主關(guān)鍵字納入“n方”實(shí)體集對(duì)應(yīng)的關(guān)系中作為“外部關(guān)鍵字”,同時(shí)把聯(lián)系的屬性也一并納入“n方”對(duì)應(yīng)的關(guān)系中。3.3.2兩實(shí)體集間m:n聯(lián)系對(duì)于兩實(shí)體集間m:n聯(lián)系,必須對(duì)“聯(lián)系”單獨(dú)建立一個(gè)關(guān)系,用來(lái)聯(lián)系雙方實(shí)體集。該關(guān)系的屬性中至少要包括被它所聯(lián)系的雙方實(shí)體集的“主關(guān)鍵字”,并且如果聯(lián)系有屬性,也要?dú)w入這個(gè)關(guān)系中。
3.3.3兩實(shí)體集間的1:1的聯(lián)系
假設(shè)A實(shí)體集與B實(shí)體集是1:1的聯(lián)系,聯(lián)系的轉(zhuǎn)換有三種方法:
①把A實(shí)體集的主關(guān)鍵字加入到B實(shí)體集對(duì)應(yīng)的關(guān)系中,如果聯(lián)系有屬性也一并加入;
②把B實(shí)體集的主關(guān)鍵字加入到A實(shí)體集對(duì)應(yīng)的關(guān)系中,如果聯(lián)系有屬性也一并加入;
③建立第三個(gè)關(guān)系,關(guān)系中包含兩個(gè)實(shí)體集的主關(guān)鍵字,如果聯(lián)系有屬性也一并加入。
小結(jié)
把現(xiàn)實(shí)世界轉(zhuǎn)換成為計(jì)算機(jī)能夠處理的數(shù)據(jù)世界,需經(jīng)過(guò)兩個(gè)階段:第一個(gè)階段需使用概念模型把現(xiàn)實(shí)世界抽象成信息世界,第二階段是使用實(shí)施模型把信息世界轉(zhuǎn)換為數(shù)據(jù)世界。最常用的概念模型為E-R模型,E-R模型的三個(gè)基本要素是實(shí)體、屬性和聯(lián)系。設(shè)計(jì)E-R圖一般經(jīng)過(guò)兩個(gè)步驟,第一步是抽象出各部門(mén)的局部E-R圖,第二步是把局部E-R圖組合成全局E-R圖。E-R圖只是信息的一種抽象表示,還需把它轉(zhuǎn)化成相應(yīng)的實(shí)施數(shù)據(jù)模型才能轉(zhuǎn)化為數(shù)據(jù)庫(kù)中的數(shù)據(jù)。把E-R圖轉(zhuǎn)化為關(guān)系模型,不但要把實(shí)體轉(zhuǎn)化成關(guān)系,而且在關(guān)系中還應(yīng)反映出E-R圖中各實(shí)體集之間的聯(lián)系。
數(shù)據(jù)庫(kù)設(shè)計(jì)
4.1數(shù)據(jù)庫(kù)設(shè)計(jì)概述
4.1.1數(shù)據(jù)庫(kù)設(shè)計(jì)的目標(biāo)數(shù)據(jù)庫(kù)設(shè)計(jì)有兩個(gè)最重要的目標(biāo):滿足應(yīng)用功能需求和良好的數(shù)據(jù)庫(kù)性能。滿足應(yīng)用功能需求,主要是指把用戶當(dāng)前應(yīng)用以及可預(yù)知的將來(lái)應(yīng)用所需要的數(shù)據(jù)及其聯(lián)系能全部準(zhǔn)確地存放于數(shù)據(jù)庫(kù)之中,并能根據(jù)用戶的需要對(duì)數(shù)據(jù)進(jìn)行規(guī)定的合理的增、刪、改、顯示等操作。良好的數(shù)據(jù)庫(kù)性能,主要是指數(shù)據(jù)庫(kù)應(yīng)具有良好的存儲(chǔ)結(jié)構(gòu)、良好的數(shù)據(jù)共享性、良好的數(shù)據(jù)完整性、良好的數(shù)據(jù)一致性及良好的安全保密性能等。
4.1.2數(shù)據(jù)庫(kù)設(shè)計(jì)的內(nèi)容
1.?dāng)?shù)據(jù)庫(kù)的結(jié)構(gòu)特性設(shè)計(jì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)特性設(shè)計(jì)是確定數(shù)據(jù)庫(kù)的框架和數(shù)據(jù)結(jié)構(gòu)(邏輯結(jié)構(gòu)特征)。
2.?dāng)?shù)據(jù)庫(kù)的行為特性設(shè)計(jì)數(shù)據(jù)庫(kù)的行為特性設(shè)計(jì)是指確定數(shù)據(jù)庫(kù)用戶的行為和動(dòng)作,并根據(jù)其行為特性設(shè)計(jì)出數(shù)據(jù)庫(kù)的子模式。
3.?dāng)?shù)據(jù)庫(kù)的物理模式設(shè)計(jì)數(shù)據(jù)庫(kù)的物理模式設(shè)計(jì)要求是:根據(jù)數(shù)據(jù)庫(kù)結(jié)構(gòu)的動(dòng)態(tài)特性,在特定的RDBMS環(huán)境下,把數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)模型加以物理實(shí)現(xiàn),從而得出數(shù)據(jù)庫(kù)的存儲(chǔ)模式和存取方法。
4.1.3數(shù)據(jù)庫(kù)設(shè)計(jì)的特點(diǎn)與過(guò)程
1.?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)的特點(diǎn):數(shù)據(jù)庫(kù)設(shè)計(jì)是一種“反復(fù)探尋,逐步求精”的過(guò)程。
2.?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)的過(guò)程
如下圖
單位或組織數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)數(shù)據(jù)庫(kù)的行為設(shè)計(jì)分析用戶需求E-R模型設(shè)計(jì)邏輯模式設(shè)計(jì)分析用戶需求模塊功能說(shuō)明編寫(xiě)程序代碼存儲(chǔ)結(jié)構(gòu)的選擇屬性的確定索引的確定數(shù)據(jù)庫(kù)的物理設(shè)計(jì)加載實(shí)驗(yàn)數(shù)據(jù)并調(diào)試運(yùn)行應(yīng)用程序的調(diào)試、運(yùn)行與維護(hù)滿意?不是加載數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行與維護(hù)不4.2數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)
4.2.1數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)的步驟邏輯設(shè)計(jì)階段的目標(biāo)是產(chǎn)生合理的數(shù)據(jù)庫(kù)模式,可分為三個(gè)階段:分別是收集和分析用戶需求、概念模式設(shè)計(jì)和邏輯模式設(shè)J計(jì)。第一階段主要分成四個(gè)步驟,分別如下:第一步:分析用戶活動(dòng),產(chǎn)生“用戶活動(dòng)圖”。第二步:確定系統(tǒng)范圍,產(chǎn)生“系統(tǒng)范圍圖”。第三步:分析用戶活動(dòng)所涉及到的數(shù)據(jù),產(chǎn)生“數(shù)據(jù)流圖”。第四步:分析系統(tǒng)數(shù)據(jù),產(chǎn)生數(shù)據(jù)字典。第二階段可分為兩個(gè)步驟,分別如下:第一步:根據(jù)局部E-R模型,產(chǎn)生局部“E-R模型”。第二步:對(duì)局部E-R模型進(jìn)行綜合,產(chǎn)生總體E-R模型,并建立“總體E-R圖”。第三階段也可分成兩個(gè)步驟,分別如下:第一步:把總體E-R圖轉(zhuǎn)換成模式。第二步:對(duì)模式進(jìn)行優(yōu)化,產(chǎn)生符合要求的合理最優(yōu)的模式。
4.2.2收集和分析用戶需求
通過(guò)一個(gè)醫(yī)院信息管理系統(tǒng)來(lái)說(shuō)明這四個(gè)步驟應(yīng)完成的功能。
【例】某醫(yī)院信息管理系統(tǒng)要完成以下功能:
辦理病歷(第一次來(lái)院治病時(shí)辦理病歷);查詢藥品情況(根據(jù)要求查詢某種類或全部藥品信息);病人項(xiàng)目入庫(kù)(病人所用藥、所做檢查等治療信息存入到指定的數(shù)據(jù)庫(kù)中);催交欠費(fèi)(根據(jù)病人項(xiàng)目計(jì)算出總費(fèi)用,減去預(yù)交費(fèi)用,若超過(guò)某一限度則催交欠費(fèi))。
1.分析用戶活動(dòng)
接受申請(qǐng)病人數(shù)據(jù)存檔打印病歷封面接受申請(qǐng)查藥品信息打印藥品目錄清單接受申請(qǐng)項(xiàng)目信息的錄入與保存打印項(xiàng)目信息接受申請(qǐng)查項(xiàng)目信息計(jì)算逾期項(xiàng)目與費(fèi)用并打印辦理病歷藥品查詢項(xiàng)目入庫(kù)催交欠費(fèi)發(fā)給病人發(fā)給查詢?nèi)私唤o病人交給病人用戶醫(yī)院的業(yè)務(wù)流程所得到的“用戶活動(dòng)圖”
2.確定系統(tǒng)范圍
上圖中虛線框內(nèi)的部分屬于系統(tǒng)范圍,而框外部分則需人工處理。
3.分析用戶活動(dòng)所涉及到的數(shù)據(jù)
(1)數(shù)據(jù)流圖(DFD)的概念數(shù)據(jù)流圖是一種能全面描述系統(tǒng)邏輯模型的主要工具,它可以用少數(shù)幾種符號(hào)綜合地反映出數(shù)據(jù)在系統(tǒng)中的流動(dòng)、存儲(chǔ)和處理情況。(2)數(shù)據(jù)流圖的特征
抽象性——數(shù)據(jù)流圖完全舍去了具體的物質(zhì),只剩下數(shù)據(jù)的流動(dòng)、加工處理和存儲(chǔ)。概括性——數(shù)據(jù)流圖可以把系統(tǒng)中的不同業(yè)務(wù)處理過(guò)程聯(lián)系起來(lái),形成一個(gè)整體。(3)數(shù)據(jù)流圖的組成
畫(huà)數(shù)據(jù)流圖應(yīng)注意以下幾點(diǎn):數(shù)據(jù)流圖中反映的是數(shù)據(jù)流而不是控制流,這是與一般程序流程圖的最大不同之處;在對(duì)數(shù)據(jù)流圖中各個(gè)成份命名時(shí),應(yīng)該體現(xiàn)命名的含義;流入文件或流出文件的數(shù)據(jù)流不必命名,因?yàn)槲募旧硪呀?jīng)表示了數(shù)據(jù)內(nèi)容;源點(diǎn)和終點(diǎn)不是必須的,因?yàn)樗鼈兪菍儆谙到y(tǒng)之外的事物,但畫(huà)出源點(diǎn)和終點(diǎn)有助于理解數(shù)據(jù)流的來(lái)龍去脈。
SD1P1D2F1P2D3EF2(4)數(shù)據(jù)流圖的畫(huà)法
一般地說(shuō),畫(huà)數(shù)據(jù)流圖應(yīng)遵循“由外向內(nèi),逐步細(xì)化”的原則。逐步細(xì)化是指:逐一描述系統(tǒng)內(nèi)部數(shù)據(jù)流,一般從每個(gè)業(yè)務(wù)的輸入端開(kāi)始向輸出端推進(jìn),每當(dāng)經(jīng)過(guò)使數(shù)據(jù)流的組成或數(shù)值發(fā)生變化的地方,就用一個(gè)“加工”將其連接起來(lái),這個(gè)“加工”正是實(shí)現(xiàn)這一數(shù)據(jù)變化的。注意,不要把相互無(wú)關(guān)的數(shù)據(jù)畫(huà)成一個(gè)數(shù)據(jù)流,也不要把作為一個(gè)處理單位的數(shù)據(jù)畫(huà)成二個(gè)數(shù)據(jù)流。如果牽涉到文件,則應(yīng)表示出“文件”與“加工”的讀寫(xiě)關(guān)系。
4.分析系統(tǒng)數(shù)據(jù)
(1)數(shù)據(jù)字典的概念數(shù)據(jù)流圖表達(dá)了數(shù)據(jù)和處理的關(guān)系,數(shù)據(jù)字典則是系統(tǒng)中各類數(shù)據(jù)描述的集合,是進(jìn)行數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的結(jié)果。數(shù)據(jù)字典是關(guān)于數(shù)據(jù)庫(kù)中數(shù)據(jù)的描述,通常稱“元數(shù)據(jù)”,元數(shù)據(jù)不是數(shù)據(jù)本身。數(shù)據(jù)字典在數(shù)據(jù)庫(kù)設(shè)計(jì)中占有非常重要的地位,是概念模式設(shè)計(jì)、邏輯模式設(shè)計(jì)和物理設(shè)計(jì)的主要依據(jù)。(2)通過(guò)數(shù)據(jù)流圖構(gòu)成數(shù)據(jù)字典數(shù)據(jù)字典是對(duì)數(shù)據(jù)流圖中的四個(gè)成份進(jìn)行描述的產(chǎn)物,它和數(shù)據(jù)流圖共同構(gòu)成“系統(tǒng)說(shuō)明書(shū)”。
①數(shù)據(jù)流的描述
②文件的描述
③數(shù)據(jù)項(xiàng)的描述
④加工的描述
4.2.3概念模型設(shè)計(jì)(E-R圖設(shè)計(jì))
1.局部E-R模型的設(shè)計(jì)局部E-R模型設(shè)計(jì)的任務(wù)是根據(jù)需求上一步驟產(chǎn)生的各個(gè)功能模塊的數(shù)據(jù)流圖和數(shù)據(jù)字典中的相關(guān)數(shù)據(jù),設(shè)計(jì)出各個(gè)功能模塊的局部E—R圖。
數(shù)據(jù)抽象、設(shè)計(jì)局部E-R圖對(duì)局部E-R圖集成,生成總體E-R圖用戶滿意NY概念模型的設(shè)計(jì)步驟
2.總體E-R模型的設(shè)計(jì)
局部E-R圖之間的沖突主要有3類:屬性沖突、命名沖突和結(jié)構(gòu)沖突。(1)屬性沖突
①屬性域沖突,即屬性值的類型、取值范圍不同。
②屬性取值單位沖突。(2)命名沖突
①同名異義沖突,即不同意義的對(duì)象在不同的部門(mén)的局部E-R圖中具有相同的名字。
②異名同義沖突,即意義相同的對(duì)象在不同的部門(mén)的局部E-R圖中具有不同的名字。(3)結(jié)構(gòu)沖突
①同一對(duì)象在不同的應(yīng)用中具有不同的抽象。
②同一實(shí)體在不同的局部E-R圖中的屬性組成不一致,即包含的屬性個(gè)數(shù)和屬性排列次序不完全相同。
③實(shí)體之間的聯(lián)系在不同的局部E—R圖中呈現(xiàn)不同的類型。這類沖突的解決方法是根據(jù)應(yīng)用的語(yǔ)義對(duì)實(shí)體聯(lián)系的類型進(jìn)行綜合或調(diào)整。
4.2.4邏輯模式設(shè)計(jì)
邏輯模式設(shè)計(jì)的實(shí)質(zhì)是把E-R圖轉(zhuǎn)換為具體的DBMS支持的數(shù)據(jù)模型。把E-R圖轉(zhuǎn)換為關(guān)系模型的方法,通常分兩步進(jìn)行:初步設(shè)計(jì)和優(yōu)化設(shè)計(jì)。1.初步設(shè)計(jì)——把E-R圖轉(zhuǎn)換為關(guān)系模型具體的轉(zhuǎn)換方法請(qǐng)參見(jiàn)3.3節(jié)。2.優(yōu)化設(shè)計(jì)——對(duì)模式進(jìn)行調(diào)整和改善所謂優(yōu)化,就是從提高效率的角度出發(fā),對(duì)模式結(jié)構(gòu)作進(jìn)一步的凋整和改良。優(yōu)化是在性能預(yù)測(cè)的基礎(chǔ)上進(jìn)行的,一般用三方面指標(biāo)來(lái)衡量:(1)單位時(shí)間內(nèi)所訪問(wèn)的邏輯記錄個(gè)數(shù)要少;(2)單位時(shí)間內(nèi)數(shù)據(jù)傳送量要少;(3)系統(tǒng)占用的存儲(chǔ)空間盡量要少?!纠恳樵儾∪诵畔r(shí),經(jīng)常按住院病人和門(mén)診病人分類查詢,為改善性能,使得單位時(shí)間內(nèi)訪問(wèn)邏輯記錄的個(gè)數(shù)盡量少,請(qǐng)給出一種分解方法。原來(lái)的病人關(guān)系為:病人(病歷號(hào)、姓名、性別、年齡、職業(yè)、通信地址、電話號(hào)碼、是否醫(yī)保)可對(duì)其進(jìn)行水平分解,使其成為兩個(gè)關(guān)系住院病人(病歷號(hào)、姓名、性別、年齡、職業(yè)、通信地址、電話號(hào)碼、是否醫(yī)保)門(mén)診病人(病歷號(hào)、姓名、性別、年齡、職業(yè)、通信地址、電話號(hào)碼、是否醫(yī)保)4.3數(shù)據(jù)庫(kù)物理設(shè)計(jì)
4.3.1存儲(chǔ)結(jié)構(gòu)的選擇選擇何種存儲(chǔ)結(jié)構(gòu),與選定的DBMS類型有關(guān),對(duì)于層次式或網(wǎng)狀式DBMS,存儲(chǔ)結(jié)構(gòu)的選擇與應(yīng)用有密切關(guān)系。對(duì)于關(guān)系式數(shù)據(jù)庫(kù),用戶能夠干預(yù)的事情很少,最多只能選定索引方法或給出輔助索引,以便在程序中可以按倒排文件方式查詢數(shù)據(jù),而存取路徑是由系統(tǒng)安排的。4.3.2屬性的存儲(chǔ)類型的確定不同DBMS系統(tǒng)的數(shù)據(jù)類型稍微有點(diǎn)區(qū)別,因此需要針對(duì)不同的DBMS來(lái)確定每個(gè)屬性的存儲(chǔ)類型。數(shù)據(jù)庫(kù)管理系統(tǒng)提供的數(shù)據(jù)庫(kù)設(shè)計(jì)工具就具有設(shè)計(jì)屬性的存儲(chǔ)類型的功能,如VisualFoxPro提供的“表設(shè)計(jì)器”,VisualBasic提供的“可視化數(shù)據(jù)管理器”,Delphi提供的“DataBaseDesktop”等。4.3.3表的索引結(jié)構(gòu)的確定
4.3.4存取路徑的確定
4.4數(shù)據(jù)庫(kù)的實(shí)現(xiàn)、運(yùn)行與維護(hù)
4.4.1數(shù)據(jù)庫(kù)的實(shí)現(xiàn)該階段主要完成以下三項(xiàng)工作:(1)建立實(shí)際數(shù)據(jù)庫(kù)結(jié)構(gòu)。(2)裝入試驗(yàn)數(shù)據(jù)對(duì)應(yīng)用程序進(jìn)行調(diào)試。(3)裝入實(shí)際數(shù)據(jù),進(jìn)入試運(yùn)行狀態(tài)。4.4.2數(shù)據(jù)庫(kù)的運(yùn)行與維護(hù)運(yùn)行維護(hù)階段的主要任務(wù)如下:(1)對(duì)日常數(shù)據(jù)庫(kù)操作進(jìn)行維護(hù)(2)維護(hù)數(shù)據(jù)庫(kù)的結(jié)構(gòu)(3)維護(hù)數(shù)據(jù)庫(kù)的安全性與完整性(4)監(jiān)測(cè)并改善數(shù)據(jù)庫(kù)運(yùn)行性能(5)根據(jù)用戶要求對(duì)數(shù)據(jù)庫(kù)現(xiàn)有功能進(jìn)行擴(kuò)充(6)及時(shí)改正運(yùn)行中發(fā)現(xiàn)的系統(tǒng)錯(cuò)誤
4.5編寫(xiě)技術(shù)文檔
4.5.1編寫(xiě)系統(tǒng)說(shuō)明書(shū)系統(tǒng)說(shuō)明書(shū)主要由數(shù)據(jù)流圖和數(shù)據(jù)字典組成。它用來(lái)表達(dá)用戶對(duì)系統(tǒng)的要求,軟件人員根據(jù)“系統(tǒng)說(shuō)明書(shū)”進(jìn)行數(shù)據(jù)庫(kù)的構(gòu)造和應(yīng)用程序的設(shè)計(jì)。
4.5.2編寫(xiě)技術(shù)說(shuō)明書(shū)技術(shù)說(shuō)明書(shū)主要包括如下內(nèi)容:
(1)用戶活動(dòng)圖、數(shù)據(jù)流圖和數(shù)據(jù)字典。(2)局部E-R圖和總體E-R圖。(3)對(duì)于層次和網(wǎng)狀數(shù)據(jù)類型應(yīng)指出各種記錄型及其聯(lián)系,指出關(guān)鍵字。對(duì)于關(guān)系數(shù)據(jù)類型,應(yīng)指出關(guān)系模式、關(guān)系模式之間的聯(lián)系、關(guān)系的關(guān)鍵字。(4)在數(shù)據(jù)庫(kù)設(shè)計(jì)階段產(chǎn)生的每個(gè)表格的名稱、字段的屬性、索引的名稱和索引字段(或索引表達(dá)式)(5)應(yīng)用程序的總體結(jié)構(gòu)框圖,各主要模塊的流程圖,詳細(xì)的程序代碼。小結(jié)
本章主要介紹數(shù)據(jù)庫(kù)系統(tǒng)的開(kāi)發(fā)過(guò)程,對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的開(kāi)發(fā)過(guò)程中的每個(gè)階段進(jìn)行了詳盡的闡述。數(shù)據(jù)庫(kù)設(shè)計(jì)包括三個(gè)部分的內(nèi)容,分別是結(jié)構(gòu)特性的設(shè)計(jì)、行為特性的設(shè)計(jì)和數(shù)據(jù)庫(kù)的物理模式設(shè)計(jì)。數(shù)據(jù)庫(kù)的開(kāi)發(fā)過(guò)程基本上可分成三個(gè)階段,分別是邏輯設(shè)計(jì)階段、物理設(shè)計(jì)階段、數(shù)據(jù)庫(kù)的運(yùn)行與調(diào)試及維護(hù)階段。在邏輯設(shè)計(jì)階段主要是分析用戶需求,產(chǎn)生用戶活動(dòng)圖,根據(jù)用戶活動(dòng)圖設(shè)計(jì)出數(shù)據(jù)流圖和數(shù)據(jù)字典,最后根據(jù)數(shù)據(jù)流圖和數(shù)據(jù)字典設(shè)計(jì)出數(shù)據(jù)庫(kù)模式。物理設(shè)計(jì)階段的任務(wù)主要是確定數(shù)據(jù)的物理結(jié)構(gòu)、屬性的類型、索引等。數(shù)據(jù)庫(kù)的運(yùn)行與調(diào)試及維護(hù)階段的主要任務(wù)是對(duì)數(shù)據(jù)庫(kù)進(jìn)行維護(hù),使數(shù)據(jù)庫(kù)運(yùn)行良好。數(shù)據(jù)庫(kù)系統(tǒng)作為軟件產(chǎn)品提交時(shí)還必須提交相應(yīng)的文檔資料,文檔資料主要包括系統(tǒng)說(shuō)明書(shū)、技術(shù)說(shuō)明書(shū)和使用說(shuō)明書(shū)。
Delphi7與數(shù)據(jù)庫(kù)
6.1Delphi7支持的數(shù)據(jù)庫(kù)種類
6.1.1Delphi7訪問(wèn)數(shù)據(jù)庫(kù)的基本方法
6.1.2Delphi7支持的數(shù)據(jù)庫(kù)類型
Delphi7所支持的數(shù)據(jù)庫(kù)類型主要有以下幾種:(1)dBase數(shù)據(jù)庫(kù)(.DBF)(2)Paradox數(shù)據(jù)庫(kù)(3)ASCII碼文件(.TXT)(4)本地InterBase服務(wù)器(.GDB)(5)Access數(shù)據(jù)庫(kù)(.MDB)(6)各種數(shù)據(jù)庫(kù)服務(wù)器(7)可以通過(guò)ODBC與其他數(shù)據(jù)庫(kù)建立連接
6.2利用Delphi7開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的模式
6.2.1利用Delphi7開(kāi)發(fā)單層數(shù)據(jù)庫(kù)應(yīng)用程序的方法
在不使用BDE與BDE數(shù)據(jù)集,也不使用IAppServer接口的情況下,直接用數(shù)據(jù)庫(kù)文件作為數(shù)據(jù)源,在數(shù)據(jù)控制組件的配合下進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序的開(kāi)發(fā),稱為基于文件的單層數(shù)據(jù)庫(kù)應(yīng)用程序
6.2.2利用Delphi7開(kāi)發(fā)兩層數(shù)據(jù)庫(kù)應(yīng)用程序的方法
1.基于BDE的兩層數(shù)據(jù)庫(kù)應(yīng)用程序
2.基于ADO的兩層數(shù)據(jù)庫(kù)應(yīng)用程序
6.2.3利用Delphi7開(kāi)發(fā)多層數(shù)據(jù)庫(kù)應(yīng)用程序的方法
1.基于DataSnap技術(shù)的多層數(shù)據(jù)庫(kù)應(yīng)用程序
DataSnap技術(shù)原先稱MIDAS技術(shù),該結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用程序與兩層結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用程序相比,多了一個(gè)應(yīng)用服務(wù)器,與數(shù)據(jù)訪問(wèn)有關(guān)的功能以數(shù)據(jù)提供者(Providers)的身份運(yùn)行在應(yīng)用服務(wù)器上。2.邏輯三層結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用程序
6.3ODBC的概念和配置ODBC數(shù)據(jù)源的方法
6.3.1ODBC的概念從物理上看,ODBC實(shí)際上由五個(gè)層次組成:
(1)數(shù)據(jù)源名
(2)應(yīng)用程序
(3)ODBC管理器(Administrator)
(4)驅(qū)動(dòng)程序管理器(DriverManager)
(5)ODBCAPI
(6)數(shù)據(jù)源
6.3.2DSN的概念
DSN可分成如下3種
:
系統(tǒng)DSN(SystemDSN):這種DSN可以被登錄到系統(tǒng)中的所有用戶使用。用戶DSN(UserDSN):這種DSN是為特定用戶建立的,只能被建立它的用戶使用。文檔DSN(FileDSN):用于文檔的DSN。
6.3.3Access數(shù)據(jù)庫(kù)的系統(tǒng)DSN的配置
為前面建立的“教學(xué)”數(shù)據(jù)庫(kù)建立一個(gè)系統(tǒng)DSN,DSN名為“jiaoxue”,使用的操作系統(tǒng)為WindowsXP,具體步驟如下
:
1.打開(kāi)ODBC數(shù)據(jù)源管理器
2.選擇數(shù)據(jù)源類型并添加數(shù)據(jù)源
3.選擇驅(qū)動(dòng)數(shù)據(jù)源的驅(qū)動(dòng)程序
4.設(shè)置數(shù)據(jù)源參數(shù)
5.完成
6.3.4SQLServer數(shù)據(jù)庫(kù)的系統(tǒng)DSN的配置
為SQLServer2000自帶的數(shù)據(jù)庫(kù)Pubs建立一個(gè)系統(tǒng)DSN,名為“SQLPubs”,使用的操作系統(tǒng)為WindowsXP,步驟如下:
1.方法同Access數(shù)據(jù)源名的配置
2.方法同Access數(shù)據(jù)源名的配置
3.選擇驅(qū)動(dòng)數(shù)據(jù)源的驅(qū)動(dòng)程序
4.為數(shù)據(jù)源命名并選擇SQL服務(wù)器
5.設(shè)置登錄ID和密碼
6.選擇數(shù)據(jù)庫(kù)
7.測(cè)試數(shù)據(jù)源
8.完成
6.4使用DatabaseDesktop進(jìn)行數(shù)據(jù)庫(kù)管理
6.4.1DatabaseDesktop的作用
1.創(chuàng)建和維護(hù)數(shù)據(jù)庫(kù)
DatabaseDesktop應(yīng)用程序可以直接創(chuàng)建和維護(hù)Paradox數(shù)據(jù)庫(kù),但不僅是用于創(chuàng)建Paradox表,幾乎當(dāng)前所有格式的數(shù)據(jù)庫(kù)表均可以通過(guò)它來(lái)創(chuàng)建。
2.維護(hù)數(shù)據(jù)庫(kù)別名
在DatabaseDesktop應(yīng)用程序中,可以實(shí)現(xiàn)別名的創(chuàng)建和刪除等操作。
3.創(chuàng)建SQL文件和執(zhí)行SQL命令
6.4.2DatabaseDesktop的工作目錄和私有目錄的設(shè)定
通過(guò)把D:\ZP子目錄設(shè)為工作目錄來(lái)說(shuō)明工作目錄的設(shè)定方法,具體步驟如下:
(1)執(zhí)行【Tools】→【DatabaseDesktop】命令,啟動(dòng)DatabaseDesktop應(yīng)用程序。(2)執(zhí)行【File】→【W(wǎng)orkingDirectory】命令,出現(xiàn)【SetWorkingDirectory】對(duì)話框。在【W(wǎng)orkingDirectory】文本框中可以輸入工作目錄名,也可以通過(guò)單擊【browse】按鈕,在【DirecoryBrower】對(duì)話框中選擇相應(yīng)目錄“D:\ZP”,單擊【OK】按鈕。也可以通過(guò)別名來(lái)選擇工作目錄。
6.4.3數(shù)據(jù)庫(kù)別名的建立
數(shù)據(jù)庫(kù)別名有兩種:公共別名(PublicAlias)和項(xiàng)目別名(ProiectAlias)。通過(guò)為子目錄“D:\Delphi\JWGL”建立一個(gè)公共數(shù)據(jù)庫(kù)別名JWGL來(lái)說(shuō)明數(shù)據(jù)庫(kù)別名的創(chuàng)建方法。創(chuàng)建步驟如下:(1)在DatabaseDesktop應(yīng)用程序中執(zhí)行【Tools】→【AliasManager】命令,出現(xiàn)【AliasManager】對(duì)話框。
(2)單擊【New】按鈕以創(chuàng)建數(shù)據(jù)庫(kù)別名。在【Databasealias】列表框中輸入“JWGL”,在【Drivertype】列表框中選擇【STANDARD】類型,此時(shí)將出現(xiàn)一個(gè)PATH文本框,在該文本框中輸入路徑“d:\Delphi\JWGL”,或單擊【Browse】按鈕,在彈出的【DirectoryBrowser】對(duì)話框中找到所需要的目錄“d:\Delphi\JWGL”,然后單擊【OK】按鈕,退出【DirectoryBrowser】。
(3)單擊【AliasManager】對(duì)話框上的【OK】按鈕,系統(tǒng)將彈出對(duì)話框,詢問(wèn)用戶是否將數(shù)據(jù)庫(kù)別名保存到BDE配置文件IDAPI32.CFG中,單擊【是】按鈕即可。
6.4.4數(shù)據(jù)庫(kù)表的建立
Delphi的本地?cái)?shù)據(jù)庫(kù)為dBase數(shù)據(jù)庫(kù)和Paradox數(shù)據(jù)庫(kù),利用DatabaseDesktop可以很方便地創(chuàng)建這兩類數(shù)據(jù)庫(kù)表。創(chuàng)建一個(gè)Paradox數(shù)據(jù)庫(kù)表的步驟如下
:
(1)在DatabaseDesktop應(yīng)用程序中,執(zhí)行【File】→【New】→【Table】命令,出現(xiàn)【CreateTable】對(duì)話框。在【Tabletype】列表框中可以選擇表的類型。(2)選擇默認(rèn)的類型“Paradox7”并單擊【OK】按鈕,系統(tǒng)將彈出【CreateParadox7Table】對(duì)話框。在該對(duì)話框中可以定義表的結(jié)構(gòu),即表的每個(gè)字段的字段名、字段類型、字段寬度和主鍵等,并可建立索引。
(3)在【FieldName】列輸入字段名,如“學(xué)號(hào)”,然后在【Type】列單擊鼠標(biāo)右鍵,出現(xiàn)“字段類型”下拉菜單,在該菜單中選中類型【Alpha】,然后在【Size】列的下面單擊,輸入字段寬度為“6”。關(guān)于字段類型的具體含義請(qǐng)參考有關(guān)Paradox數(shù)據(jù)庫(kù)的書(shū)籍。如果要把“學(xué)號(hào)”字段設(shè)為主鍵,可在該行的【Key】列雙擊鼠標(biāo)右鍵,將會(huì)出現(xiàn)一個(gè)“*”,代表該列是主鍵。如果要取消主鍵,可再雙擊該處,“*”號(hào)將消失。
(4)按Enter鍵把光標(biāo)移到下一行,可接著創(chuàng)建下一個(gè)字段。(5)還可以為表創(chuàng)建“輔助索引(又稱第二索引)”,方法是在圖6-29所示的對(duì)話框中,在【TableProperties】列表框中選中“SecondaryIndexes”,然后再單擊【Define】按鈕,出現(xiàn)【DefineSecondaryIndex】(定義第二索引)對(duì)話框,如圖6-32所示。在該對(duì)話框中選中需要定義的索引字段,如“姓名”,然后單擊按鈕,把選中的字段移動(dòng)到【Indexedfields:】對(duì)話框中即可。
圖6-29【CreateParadox7Table】對(duì)話框
(6)輔助索引屬性設(shè)置好后,單擊【OK】按鈕,將會(huì)出現(xiàn)
【SaveIndexAs】(保存索引)對(duì)話框,給索引取一個(gè)名字“XM”,然后單擊【OK】按鈕,索引定義完成。(7)表結(jié)構(gòu)創(chuàng)建好后,單擊【Saveas】按鈕,出現(xiàn)【SaveTableAs】(保存表)對(duì)話框??梢酝ㄟ^(guò)選中數(shù)據(jù)庫(kù)別名和選擇保存文件夾兩種方式確定數(shù)據(jù)庫(kù)表保存的位置。本題選擇保存位置為“D:\Delphi”文件夾,表名為“學(xué)生”,設(shè)置完成后單擊【保存】按鈕,表結(jié)構(gòu)將保存起來(lái),表結(jié)構(gòu)創(chuàng)建完畢。(8)數(shù)據(jù)庫(kù)表的結(jié)構(gòu)創(chuàng)建后,應(yīng)向其中輸入數(shù)據(jù)。
小結(jié)
Delphi既是一種可視化編程語(yǔ)言,又是一種數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)的利器,本章對(duì)利用Delphi進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)的相關(guān)知識(shí)進(jìn)行了一個(gè)概要性的講解。主要介紹Delphi支持的數(shù)據(jù)庫(kù)類型、使用Delphi開(kāi)發(fā)兩層和多層數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的模式、ODBC的基本概念、DSN的創(chuàng)建等內(nèi)容。最后介紹Delphi自帶的DatabaseDesktop應(yīng)用程序,著重講解使用該應(yīng)用程序創(chuàng)建和使用數(shù)據(jù)庫(kù)別名、創(chuàng)建和使用表的方法。
使用BDE組件開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序8.1使用BDE組件開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的一般方法8.1.1使用BDE組件開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序的模式
1.BDE組件
BDE組件均位于【BDE】組件頁(yè)中,其作用是與實(shí)際的物理數(shù)據(jù)庫(kù)建立聯(lián)系,從物理數(shù)據(jù)庫(kù)中提取信息,或把信息的修改存放到物理數(shù)據(jù)庫(kù)中。2.DataAccess組件
DataAccess組件位于【DataAccess】組件頁(yè)中,該類組件是連接BDE組件和數(shù)據(jù)控制組件的橋梁。3.DataControls組件
8.1.2常用的BDE組件簡(jiǎn)介
8.2TTable組件的使用
8.2.1TTable組件的常用屬性
1.DatabaseName屬性
2.TableName屬性
3.TableType屬性
4.Active屬性
5.ReadOnly屬性
6.Modified屬性
7.FieldCount屬性
8.RecordCount屬性
9.RecNo屬性
10.RecordSize屬性
11.Fields屬性
12.Bof屬性
13.Eof屬性
14.Filter屬性
15.CachedUpdates屬性
【例8-1】
顯示與TTable組件相連接的數(shù)據(jù)表的相關(guān)屬性。程序設(shè)計(jì)界面如圖8-3所示,使用TTable組件與數(shù)據(jù)表“學(xué)生”相連接。程序運(yùn)行時(shí)在ListBox1中顯示表中的所有字段名,在編輯框Edit1中顯示表名,在編輯框Edit2中顯示字段數(shù),在編輯框Edit3中顯示記錄數(shù),在編輯框Edit4中顯示記錄號(hào),在編輯框Edit5中顯示記錄長(zhǎng)度。程序運(yùn)行界面如圖8-4所示。分析:為使TTable組件與物理數(shù)據(jù)庫(kù)連接起來(lái),至少應(yīng)設(shè)置它的DatabaseName屬性和TableName屬性。為使TTable組件中的數(shù)據(jù)集能夠使用,應(yīng)把它的Active屬性設(shè)為T(mén)rue。為使程序在一開(kāi)始運(yùn)行時(shí)就能顯示出所有字段的字段名,可在窗體的OnCreate事件中使用一個(gè)循環(huán),在循環(huán)中把Fields數(shù)組的每個(gè)元素的FieldName屬性值添加到ListBox1列表框。顯示數(shù)據(jù)表的其他屬性,可通過(guò)相應(yīng)的屬性名來(lái)實(shí)現(xiàn)。
8.2.2TTable組件的常用方法
1.FieldByName方法該方法用于引用數(shù)據(jù)集中的某個(gè)字段,該方法的函數(shù)形式如下:FunctionFieldByName(ConstFieldName:string):Tfield【例8-2】
編寫(xiě)一個(gè)顯示字段名稱和選中字段的主要屬性的程序。程序的設(shè)計(jì)界面如圖8-5所示,程序的運(yùn)行界面如圖8-6所示。程序執(zhí)行時(shí),首先把當(dāng)前目錄下的學(xué)生表中的字段填充到列表框ListBox1中,當(dāng)在ListBox1中選中某字段后,該字段的相應(yīng)屬性值將顯示在對(duì)應(yīng)的編輯框中。
分析:顯示字段名的方法同例8-1。當(dāng)在ListBox1上單擊以選中某個(gè)字段時(shí),可通過(guò)TTable組件的FieldByName方法以列表框中選中的列表項(xiàng)作為參數(shù)來(lái)訪問(wèn)對(duì)應(yīng)字段的屬性。需注意的是編輯框中只能顯示字符串?dāng)?shù)據(jù),因此當(dāng)字段屬性不是字符串?dāng)?shù)據(jù)時(shí),應(yīng)把它轉(zhuǎn)換為字符串?dāng)?shù)據(jù)。2.記錄指針移動(dòng)方法
【例8-3】
編寫(xiě)一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序,用來(lái)瀏覽和維護(hù)當(dāng)前目錄下“學(xué)生表”中的數(shù)據(jù),要求程序的瀏覽和維護(hù)功能均使用組件來(lái)實(shí)現(xiàn)。程序的設(shè)計(jì)界面如圖8-7所示,程序的運(yùn)行界面如圖8-8所示。
分析:可使用TDataSource組件建立TTable組件與數(shù)據(jù)控件組件之間的聯(lián)系,使用TDBNavigator來(lái)實(shí)現(xiàn)記錄指針的移動(dòng),使用TDBEdit來(lái)顯示TTable組件數(shù)據(jù)集的當(dāng)前記錄的內(nèi)容。
【例8-4】
編寫(xiě)一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序,用來(lái)瀏覽當(dāng)前目錄下“學(xué)生表”中的數(shù)據(jù),要求記錄指針的移動(dòng)采用移動(dòng)記錄指針的方法。程序的設(shè)計(jì)界面如圖8-9所示,程序的運(yùn)行界面如圖8-10所示。程序運(yùn)行時(shí)單擊相應(yīng)的按鈕,將實(shí)現(xiàn)記錄指針的相應(yīng)移動(dòng)。分析:為使在程序運(yùn)行時(shí),單擊相應(yīng)的按鈕可實(shí)現(xiàn)記錄指針的相應(yīng)移動(dòng),應(yīng)在按鈕的OnClick事件代碼中調(diào)用相應(yīng)的記錄指針移動(dòng)方法。3.查詢記錄的相關(guān)方法
TTable組件提供了4種查詢記錄的方法
:
(1)GotoKey方法:該方法用于精確查找;(2)FindKey方法:該方法是實(shí)現(xiàn)精確查找的另一種方法,它和GotoKey一樣均是一個(gè)函數(shù)過(guò)程,格式如下:functionFindKey(constKeyValues:arrayofconst):Boole
(3)GotoNearest和FindNearest用于模糊查找。
4.數(shù)據(jù)操作相關(guān)方法
【例8-6】
編寫(xiě)一個(gè)對(duì)當(dāng)前目錄下的學(xué)生表進(jìn)行維護(hù)的程序,要求該程序能夠完成記錄的增加、插入、修改和刪除等功能,對(duì)于增加和修改功能,程序應(yīng)能提供確定和取消操作。程序的設(shè)計(jì)界面如圖8-13所示,程序的運(yùn)行界面如圖8-14所示。程序運(yùn)行時(shí),單擊相應(yīng)的按鈕將完成相應(yīng)的數(shù)據(jù)表的維護(hù)操作。分析:調(diào)用相應(yīng)的TTable組件的方法實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)操作功能。
8.2.3TTable組件的常用事件1.Before×××事件
2.After×××事件
3.On×××事件
【例8-7】
為例8-6添加一條關(guān)于刪除的參照完整性驗(yàn)證:如果必修課成績(jī)表中有當(dāng)前學(xué)生的選課,則不允許刪除當(dāng)前記錄。再給“確定”操作增加一個(gè)提示功能:當(dāng)執(zhí)行Post成功時(shí),將顯示“保存成功”的提示信息。
分析:假設(shè)Table1連接學(xué)生表,Table2連接必修課成績(jī)表,在Table1組件中執(zhí)行刪除操作發(fā)生之前,將發(fā)生BeforeDelete事件,可在該事件中根據(jù)Table1組件的當(dāng)前記錄的學(xué)號(hào)值在Table2組件中查找相應(yīng)的學(xué)號(hào),如果找到則不能刪除,系統(tǒng)可拋出一個(gè)異常來(lái)終止刪除操作。Post方法執(zhí)行成功后,將會(huì)發(fā)生AfterPost事件,可在該事件中顯示提示信息。8.3TDataSource組件的使用
TDataSource組件是使用最多的數(shù)據(jù)訪問(wèn)組件,用來(lái)連接數(shù)據(jù)集組件和數(shù)據(jù)控制組件。
TDataSource組件的屬性比較少,最重要的是DataSet屬性。該屬性指出要與哪一個(gè)數(shù)據(jù)集組件建立聯(lián)系,它的屬性值是某一個(gè)數(shù)據(jù)集組件
8.4常用數(shù)據(jù)控制組件及其使用方法
8.4.1數(shù)據(jù)控制組件的常用屬性及使用方法
1.基本屬性
(1)DataSource屬性
(2)DataField屬性
2.使用方法
(1)在界面上添加TTable組件。(2)在界面上添加一個(gè)TDataSource組件。(3)在界面上添加數(shù)據(jù)控制組件。
8.4.2常用的數(shù)據(jù)控制組件
【例8-8】
編寫(xiě)一個(gè)對(duì)學(xué)生表進(jìn)行顯示和修改的程序。程序有兩個(gè)窗體Form1和Form2,設(shè)計(jì)時(shí)的Form1和Form2如圖8-20和圖8-21所示。程序執(zhí)行時(shí),首先出現(xiàn)Form1,在Form1上的網(wǎng)格控件上雙擊,將會(huì)出現(xiàn)Form2。在Form2中將顯示雙擊的當(dāng)前記錄的值,可以對(duì)它進(jìn)行修改,修改完成后單擊“確定”按鈕將會(huì)把修改的結(jié)果存放到數(shù)據(jù)表中并返回到Form1窗口,單擊“取消”按鈕將取消用戶所做的修改操作并返回Form1窗口。分析:為使Form2中的數(shù)據(jù)控制組件能夠和Form1中數(shù)據(jù)控制組件顯示同一個(gè)數(shù)據(jù)集的內(nèi)容,應(yīng)把Form2上相應(yīng)的數(shù)據(jù)控制組件的DataSource屬性設(shè)置成與Form1上的數(shù)據(jù)控制組件使用的TDataSource組件的名稱。
【例8-9】
編寫(xiě)一個(gè)必修課成績(jī)表的輸入程序,要求輸入學(xué)號(hào)使用一個(gè)TDBLookUpComboBox組件,該組件從學(xué)生表中提取學(xué)號(hào)信息,讓用戶選擇輸入。程序的設(shè)計(jì)界面如圖8-22所示,程序的運(yùn)行界面如圖8-23所示。分析:輸入成績(jī)時(shí),學(xué)號(hào)必須是一個(gè)具體的學(xué)生的學(xué)號(hào),因此可從學(xué)生表中提取出學(xué)生學(xué)號(hào)信息供用戶選擇以減少輸入錯(cuò)誤。
【例8-10】
設(shè)計(jì)一個(gè)動(dòng)物圖片瀏覽程序,用來(lái)瀏覽數(shù)據(jù)庫(kù)別名DBDEMOS下的animals.dbf表中的BMP字段中存放的動(dòng)物照片。程序的設(shè)計(jì)界面如圖8-24所示,程序的運(yùn)行界面如圖8-25所示。分析:顯示數(shù)據(jù)庫(kù)中圖像字段的內(nèi)容,應(yīng)使用TDBImage組件。
【例8-11】
用DatabaseDesktop應(yīng)用程序創(chuàng)建一個(gè)名為RSDA的數(shù)據(jù)表,該表有4個(gè)字段:編號(hào)、姓名、性別和婚姻狀況。表的結(jié)構(gòu)如圖8-26所示。然后編寫(xiě)一個(gè)對(duì)該數(shù)據(jù)表進(jìn)行維護(hù)的數(shù)據(jù)庫(kù)應(yīng)用程序,程序的設(shè)計(jì)界面如圖8-27所示,程序的運(yùn)行界面如圖8-28所示。分析:由于性別只有兩種情況,故可用DBRadioGroup組件供用戶選擇輸入。婚姻狀況是互斥的,可通過(guò)TDBCheckBox組件來(lái)輸入或顯示。8.5主從表數(shù)據(jù)庫(kù)應(yīng)用程序的編寫(xiě)方法
【例8-12】
以DBDEMOS數(shù)據(jù)庫(kù)別名下的customer.db作為主表,以orders.db作為從表,以CustNo字段作為主從表聯(lián)系的字段建立主從表應(yīng)用程序。程序的設(shè)計(jì)界面如圖8-29所示,程序的運(yùn)行界面如圖8-30所示。程序運(yùn)行時(shí)在主表中選定一個(gè)客戶,從表將顯示相應(yīng)客戶的訂單信息。8.6通過(guò)程序創(chuàng)建數(shù)據(jù)庫(kù)表
1.FieldDefs屬性2.IndexDefs屬性3.CreateTable方法【例8-13】通過(guò)編程的方式在當(dāng)前目錄下生成一個(gè)名為RYGL的Paradox表,該表有四個(gè)字段,分別為:BH(編號(hào),字符型,8個(gè)字節(jié),必填字段)、XM(姓名,字符型,10個(gè)字節(jié),必填字段)、NL(年齡,整型)和HF(婚否,邏輯型)。同時(shí)還為該表創(chuàng)建了兩個(gè)索引,分別為BH(索引字段為BH,是主鍵索引)、XM(索引字段為XM)。并給該表添加兩條記錄,內(nèi)容為:
01001001王和平
23True01001002李小華
21False
程序的設(shè)計(jì)界面如圖8-33所示,程序的運(yùn)行界面如圖8-34所示。分析:建立數(shù)據(jù)表,首先要定義表的字段,可通過(guò)TTable組件的FieldDefs屬性的AddFieldDef屬性來(lái)實(shí)現(xiàn)。如果表有索引,還必須要定義索引,可通過(guò)TTable組件的IndexDefs屬性的AddIndexDef屬性來(lái)實(shí)現(xiàn)。字段和索引均定義好后,可通過(guò)調(diào)用TTable組件的CreateTable方法來(lái)建立表。8.7TTable組件編程綜合實(shí)例
【例8-14】使用TTable組件實(shí)現(xiàn)“圖書(shū)瀏覽與維護(hù)程序”,該程序的功能要求如下。(1)建立一個(gè)名為T(mén)SXX的表,表的結(jié)構(gòu)如圖8-35所示。
(2)按鈕的功能實(shí)現(xiàn)與狀態(tài)設(shè)置。
①如果數(shù)據(jù)表中無(wú)記錄,則除【添加】按鈕外的其他按鈕均不可
②一開(kāi)始,【確定】和【取消】按鈕不可用,單擊【添加】或【修改】按鈕后,【確定】和【取消】按鈕可用,此時(shí)其他各按鈕均不可用。當(dāng)單擊【確定】或【取消】按鈕后,這兩個(gè)按鈕不可用,其他各個(gè)按鈕均可用。
③當(dāng)記錄指針處于文件尾時(shí),【后移】和【末記錄】按鈕不能用,當(dāng)記錄指針處于【文件頭】時(shí),【前移】和【首記錄】按鈕不能用。(3)顯示各字段內(nèi)容的組件不再使用DataControls組件頁(yè)上的組件,而是使用像Tedit,TCheckBox等的一般組件。(4)查詢使用FindKey方法來(lái)實(shí)現(xiàn)。
8.8其他BDE組件
8.8.1TStoreProc組件
(1)StoredProcName屬性
(2)Params屬性
(3)ParamCount屬性
(4)Create方法
(5)ExecProc方法
8.8.2TDatabase組件1.TDatabase組件的常用屬性
(1)AliasName屬性
(2)Connected屬性
(3)
DatabaseName屬性
(4)Exclusive屬性
(5)KeepConnection屬性
2.TDatabase組件的常用事件
(1)ApplyUpdates方法
(2)Close方法
(3)Commit方法
(4)Rollback方法
(5)StartTransaction方法
小結(jié)
利用BDE組件中的TTable組件能夠快速地開(kāi)發(fā)出功能強(qiáng)大的數(shù)據(jù)庫(kù)應(yīng)用程序。TTable組件的作用主要是建立與物理表的連接,然后可通過(guò)TDataSource組件把TTable組件和數(shù)據(jù)控制組件連接起來(lái),通過(guò)數(shù)據(jù)控制組件來(lái)顯示或修改數(shù)據(jù)表的內(nèi)容。數(shù)據(jù)控制組件有很多種,每一種都有特定的功能和用途,使用它們一般都要設(shè)置它們的DataSource屬性和DataField屬性。本章詳細(xì)介紹TTable組件、TdataSource組件和常用的多種數(shù)據(jù)控制組件的屬性、方法和事件及它們的使用方法,并通過(guò)實(shí)例進(jìn)行演示講解。在此基礎(chǔ)上,本章還通過(guò)編制一個(gè)非常典型的數(shù)據(jù)庫(kù)瀏覽和維護(hù)的程序?qū)Ρ菊碌膬?nèi)容進(jìn)行綜合。本章的最后還對(duì)其他常用的BDE組件進(jìn)行簡(jiǎn)單介紹。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新型流動(dòng)人衛(wèi)激光測(cè)距儀合作協(xié)議書(shū)
- 2025年羥乙基乙二胺合作協(xié)議書(shū)
- 2025年中高檔數(shù)控機(jī)床合作協(xié)議書(shū)
- 人教版 七年級(jí)英語(yǔ)下冊(cè) UNIT 8 單元綜合測(cè)試卷(2025年春)
- 2021-2022學(xué)年河南省南陽(yáng)市唐河縣七年級(jí)(上)期中地理試卷-附答案詳解
- 中國(guó)古代文學(xué)史1考試試題及答案
- 2025年個(gè)人簽訂合同委托(2篇)
- 2025年個(gè)人門(mén)面房屋租賃合同經(jīng)典版(三篇)
- 2025年產(chǎn)品維護(hù)服務(wù)合同機(jī)器或程序(2篇)
- 2025年個(gè)人車位出租協(xié)議經(jīng)典版(三篇)
- 小學(xué)生心理健康教育學(xué)情分析
- 2024年高考語(yǔ)文一輪復(fù)習(xí):文言文文意概括簡(jiǎn)答題知識(shí)清單 (二)
- 超級(jí)大腦:孩子六維能力培養(yǎng)指南
- 縱隔腫物的護(hù)理查房
- 新能源汽車概論題庫(kù)
- 設(shè)備維保的維修成本和維護(hù)費(fèi)用
- 客運(yùn)站員工安全生產(chǎn)教育培訓(xùn)
- 口腔預(yù)防兒童宣教
- 綠城桃李春風(fēng)推廣方案
- 顱腦損傷的生物標(biāo)志物
- 2023高考語(yǔ)文實(shí)用類文本閱讀-新聞、通訊、訪談(含答案)
評(píng)論
0/150
提交評(píng)論