Delphi數(shù)據(jù)庫編程課件_第1頁
Delphi數(shù)據(jù)庫編程課件_第2頁
Delphi數(shù)據(jù)庫編程課件_第3頁
Delphi數(shù)據(jù)庫編程課件_第4頁
Delphi數(shù)據(jù)庫編程課件_第5頁
已閱讀5頁,還剩310頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)庫系統(tǒng)導(dǎo)論

1.1數(shù)據(jù)處理概念

1.1.1數(shù)據(jù)與信息

1.數(shù)據(jù)

數(shù)據(jù)是指描述事物的符號,可以有多種形式。數(shù)字、文字、圖形、圖像和聲音等都是數(shù)據(jù)。

2.信息

信息是現(xiàn)實世界中的各種事物、事物的特征及其聯(lián)系等在人腦中的反映,是經(jīng)過處理、加工提煉而用于決策制定或其他應(yīng)用活動的數(shù)據(jù)。

3.數(shù)據(jù)與信息的關(guān)系信息和數(shù)據(jù)是兩個既有聯(lián)系又有區(qū)別的概念,數(shù)據(jù)是信息的載體,信息是數(shù)據(jù)的內(nèi)涵。同一信息可以有不同的數(shù)據(jù)表示形式,而同一數(shù)據(jù)也可能有不同的解釋。

1.1.2數(shù)據(jù)處理與數(shù)據(jù)管理

從已知的、原始的或雜亂無章中的數(shù)據(jù)中推導(dǎo)出對人們有用的數(shù)據(jù)或信息的過程稱為數(shù)據(jù)處理

數(shù)據(jù)管理是指數(shù)據(jù)的收集、整理、組織、存儲、查詢和傳送等各種操作,是數(shù)據(jù)處理的基本環(huán)節(jié),是任何數(shù)據(jù)處理任務(wù)的共性部分。數(shù)據(jù)庫技術(shù)就是一門數(shù)據(jù)管理技術(shù)。

1.2數(shù)據(jù)管理技術(shù)的發(fā)展

用計算機進行數(shù)據(jù)管理由來已久,其發(fā)展經(jīng)歷了三個階段:(1)人工管理階段

人工管理方式由于程序和數(shù)據(jù)文件基本上是綁在一起的,故數(shù)據(jù)的獨立性差,無法實現(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)文件管理階段文件管理階段的主要特點可概括為如下幾點:(1)輔助存儲器成為計算機系統(tǒng)不可缺少的組成部分,用來存放數(shù)據(jù)文件。(2)出現(xiàn)了文件管理系統(tǒng)。(3)數(shù)據(jù)文件可能重復(fù)利用,不再與某個應(yīng)用程序綁在一起。文件管理階段的缺點:程序和文件相互依存、數(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ù)庫管理階段與數(shù)據(jù)的文件管理方式相比,數(shù)據(jù)庫技術(shù)有如下主要特點:

1.數(shù)據(jù)共享性

2.具有較高的數(shù)據(jù)與程序的獨立性

3.便于對數(shù)據(jù)實行集中統(tǒng)一的控制

應(yīng)用程序1應(yīng)用程序2應(yīng)用程序N邏輯文件1邏輯文件2邏輯性1邏輯文件N用戶1用戶2DBMS用戶NDB………………

數(shù)據(jù)庫管理方式

1.3數(shù)據(jù)模型

1.3.1信息世界的術(shù)語

1.實體:實體是指客觀存在并可相互區(qū)分的事物,不但指人和物,而且事件、抽象的狀態(tài)和概念也可以看作實體。

2.屬性:是實體所具有的某一特征,一個實體可由若干屬性來刻畫。

3.實體集:具有相同類特征的實體集合稱為實體集。

4.聯(lián)系:根據(jù)聯(lián)系的特點可將其分成三種基本類型:1對1的聯(lián)系,1對多的聯(lián)系,多對多的聯(lián)系。

5.關(guān)鍵字

6.值域:實體屬性的取值范圍。

1.3.2三大數(shù)據(jù)模型

1.層次模型

層次模型是指滿足下列條件的基本層次聯(lián)系的集合:(1)有且僅有一個節(jié)點無父結(jié)點,此結(jié)點稱為根結(jié)點;(2)根結(jié)點以外的其它結(jié)點有且僅有一個父結(jié)點。

學(xué)院系部研究所班級教研室處科研究室層次模式示意圖

2.網(wǎng)狀模型

網(wǎng)狀模型具有以下特點:(1)可以有一個以上結(jié)點無父點(2)至少有一個結(jié)點具有一個多于一個的父結(jié)點。

ABBABCABCDABBABCABCD

圖狀模型示意圖

3.關(guān)系模型關(guān)系數(shù)據(jù)模型是三大經(jīng)典模型中最晚發(fā)展有一種,是相對建模能力最強的一種,也是目前使用得最多的一種模型。關(guān)系應(yīng)具有以下性質(zhì):(1)關(guān)系中不允許有相同的屬性名;(2)每一列的數(shù)據(jù)類型必須相同,且取自于同一個域;(3)不允許有相同的元組;(4)行的順序和列的順序可以任意排列;(5)關(guān)系的任何一個屬性都必須是不可再分的元素;(6)關(guān)系的結(jié)構(gòu)相對固定,但元組的值與數(shù)目是隨時間的推移而經(jīng)常變化的。

1.3.3數(shù)據(jù)模型的三要素

數(shù)據(jù)模型通常由下列三個部分組成:

1.數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是所研究對象的類型的集合,這些對象是數(shù)據(jù)庫的組成成分。一般可以分為兩類:一類是與數(shù)據(jù)類型、內(nèi)容有關(guān)的對象,另一類是與數(shù)據(jù)之間聯(lián)系有關(guān)的對象。

2.數(shù)據(jù)操作數(shù)據(jù)操作是指對數(shù)據(jù)模型中各種對象型的實例所允許執(zhí)行的操作,包括操作及有關(guān)的操作規(guī)則。數(shù)據(jù)結(jié)構(gòu)是對系統(tǒng)靜態(tài)特性的描述,數(shù)據(jù)操作是對系統(tǒng)動態(tài)特性的描述。

3.數(shù)據(jù)的完整性約束條件:數(shù)據(jù)的完整性約束條件是完整性規(guī)則的集合。

1.4數(shù)據(jù)庫系統(tǒng)體系結(jié)構(gòu)

應(yīng)用程序1UWA1應(yīng)用程序2UWA2應(yīng)用程序3UWA3外模式A外模式B模式外模式\模式映射外模式\模式映射內(nèi)模式模式/內(nèi)模式映射DBMS…………DBDB

數(shù)據(jù)庫的三級體系結(jié)構(gòu)

SPARC結(jié)構(gòu)對數(shù)據(jù)庫的組織從內(nèi)到外分三個層次描述,分別稱為內(nèi)模式、模式和外模式,三個模式反映了看待數(shù)據(jù)庫的三種不同數(shù)據(jù)觀點。SPARC結(jié)構(gòu)如圖:SPARC結(jié)構(gòu)對數(shù)據(jù)庫的組織從內(nèi)到外分三個層次描述,分別稱為:(1)模式(2)內(nèi)模式(3)外模式在三個模式之間存在著兩種映射:模式/外模式映射;模式/

模式映射采用映射技術(shù)還有以下好處:(1)保證了數(shù)據(jù)共享;(2)有利于數(shù)據(jù)的安全保密;(3)方便用戶使用數(shù)據(jù)庫。

1.5數(shù)據(jù)庫系統(tǒng)組成

基本計算機系統(tǒng)

數(shù)據(jù)庫(DB)數(shù)據(jù)庫管理系統(tǒng)(DBMS)數(shù)據(jù)庫應(yīng)用程序數(shù)據(jù)庫管理員(DBA)

1.6數(shù)據(jù)庫管理系統(tǒng)的組成

一般來說DBMS由下列三類軟件組成:

(1)語言

1.程序設(shè)計語言

2.定義和操作數(shù)據(jù)庫的語言

(1)數(shù)據(jù)描述語言(DDL)(2)數(shù)據(jù)操縱/查詢語言(DML)(2)控制數(shù)據(jù)庫運行的程序(3)數(shù)據(jù)庫維護程序

1.7客戶/服務(wù)器數(shù)據(jù)庫系統(tǒng)概述

按照當前流行的程序設(shè)計方法,可以將數(shù)據(jù)庫應(yīng)用程序分為兩類:

(1)兩層結(jié)構(gòu)的客戶/服務(wù)器(C/S)數(shù)據(jù)庫應(yīng)用程序。數(shù)據(jù)庫服務(wù)器DB客戶機1客戶機2……客戶機n第一層第二層(2)三層C/S結(jié)構(gòu)

數(shù)據(jù)庫服務(wù)器DB客戶機1客戶機2……客戶機n第一層第二層應(yīng)用服務(wù)器第三層小結(jié)

本課主要講解了與數(shù)據(jù)庫有關(guān)的基本概念,包括數(shù)據(jù)處理與數(shù)據(jù)管理技術(shù)的發(fā)展、數(shù)據(jù)模型的基本概念、數(shù)據(jù)庫系統(tǒng)的體系結(jié)構(gòu)、數(shù)組庫系統(tǒng)的組成以及數(shù)據(jù)庫管理系統(tǒng)的組成等,最后還介紹了客戶/服務(wù)器結(jié)構(gòu)的數(shù)據(jù)庫系統(tǒng)的構(gòu)成。

關(guān)系數(shù)據(jù)庫基本理論

2.1關(guān)系數(shù)據(jù)庫的基本概念

2.1.1

關(guān)系與關(guān)系模式

在關(guān)系模型中,實體和實體之間的聯(lián)系都由單一的數(shù)據(jù)結(jié)構(gòu)——關(guān)系來描述,關(guān)系型數(shù)據(jù)庫都是由一張或多張相關(guān)聯(lián)的表(關(guān)系)組成。對關(guān)系數(shù)據(jù)庫中每一關(guān)系的結(jié)構(gòu)的描述,稱為該關(guān)系的關(guān)系模式,也就是一個關(guān)系的型。2.1.2關(guān)系數(shù)據(jù)庫與關(guān)系數(shù)據(jù)庫模式

關(guān)系數(shù)據(jù)庫模式中所有的關(guān)系模式的具體關(guān)系的集合稱之為關(guān)系數(shù)據(jù)庫。圖示

2.1.3視圖

視圖通常是由關(guān)系數(shù)據(jù)庫模式的某個關(guān)系中滿足用戶給定條件的若干屬性列或元組組成,也可以是對若干個不同關(guān)系進行關(guān)系運算的結(jié)果,它反映的是局部邏輯結(jié)構(gòu)。

教師編號姓名性別學(xué)位工作日期單位職稱0001王寧軍男學(xué)士94/07/15計算機講師1006陳平男碩士72/09/01力學(xué)副教授2008周華俊女碩士95/08/01電子電工講師

教師信息表

課號課名班級學(xué)時教師編號00001C語言程序97計算機40000100003匯編語言97計算機70000110002工程力學(xué)96工民建80100610006基礎(chǔ)力學(xué)98建工80100620004模擬電路97無線電通信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)實體完整性實體完整性是指在關(guān)系中的任何一個元組,主關(guān)鍵字值的任一分量都不允許為空。

(2)參照完整性

(3)用戶定義完整性由用戶針對數(shù)據(jù)的具體語義約束條件,來定義的完整性,稱用戶自定義完整性。如人的年齡可以規(guī)定在0~150之間取值,考試成績只能在0~100之間等。

2.3關(guān)系的數(shù)學(xué)定義

2.3.1一個日常生活中的關(guān)系

某小區(qū)有2名男同志和3名女同志,把男人看成一個集合M,把女人看成一個集合W,如下:

M={趙和平,李振華};

W={李小麗,張小琴,王麗婭}。若M集合和W集合存在著夫妻關(guān)系,則可能的夫妻關(guān)系如下:

{(趙和平,李小麗),(趙和平,張小琴),(趙和平,王麗婭),(李振華,李小麗),(李振華,張小琴),(李振華,王麗婭)}

在數(shù)學(xué)上把這種由兩個或多個集合中的值的所有可能組合稱“笛卡爾積”,本題的“笛卡爾積”可記為:M×W。

2.3.2關(guān)系的數(shù)學(xué)定義

1.域域(Domain)是值的集合。如:{1到100之間的整數(shù)},{男,女},{Mary,Tom}等都是域。域中元素的個數(shù)稱為域的基數(shù),如有下列集合:D1={王小平,張亞,李軍},表示單位人員的集合;D2={教授,副教授,講師,助教},表示職稱的集合;D3={35,27,18},表示工齡的集合。其中D1的基數(shù)是3,D2的基數(shù)是4,D3的基數(shù)是3。2.笛卡爾積

給定一組域,,…,,這些域中可以有相同的域,則,,…,的笛卡爾積為:

××…×={(,,…,)|∈,i=1,2,…,n}其中每一個元素(,,…,)稱為一個元組,元素中的每一個稱為分量。當n的值為1時稱為單元組,當n的值為2時,稱為二元組,以此類推。若(i=1,2,…,n)的基數(shù)是,則笛卡爾積××…×的基數(shù)M為:3.關(guān)系

【例】教師關(guān)系例。有以下三個域:D1={張正義,姚小麗},教師姓名集合;D2={男,女},教師性別集合;D3={21,24},教師年齡集合。求D1×D2×D3

。

解:笛卡爾××的值可用左表表示:實際的教師信息可能如右表

D1D2D3張正義男21張正義男24張正義女21張正義女24姚小麗男21姚小麗男24姚小麗女21姚小麗女24D1D2D3張正義男21姚小麗女242.4關(guān)系代數(shù)

2.4.1傳統(tǒng)的集合運算

1.并運算(UNION)

2.交運算(INTERSECTION)

3.差運算(DIFFERENCE)

4.關(guān)系的笛卡爾積

2.4.2專門的關(guān)系運算

1.選擇(SELECT)運算

2.投影(PROJECTION)運算

3.聯(lián)接運算(JOIN)

(1)內(nèi)部聯(lián)接(InnerJoin)

(2)自然聯(lián)接運算(Naturaljoin)

(3)左外聯(lián)接(Leftouterjoin)

(4)右外聯(lián)接(Rightouterjoin)

(5)全外聯(lián)接(Fullouterjoin)

2.5關(guān)系的規(guī)范化

2.5.1存儲異常

【例】某校教務(wù)部要建立一個數(shù)據(jù)庫來描述教師與教研室的情況,面臨的對象有:教師編號(TNO)、教師姓名(TNAME)、教師主講的課程名(KNAME)、教師主講課程的次數(shù)(KTIME)、教研室代號(JNO)、教研室主任(JMN)等。通過分析可知上述對象之間有如下對應(yīng)關(guān)系:(1)一個教研室有若干教師,但一個教師只屬于一個教研室;(2)一個教研室只有一個主任;(3)一名教師可以主講多門課程,每門課程可由多名教師主講;(4)每名教師主講每門課程有一定的次數(shù)。根據(jù)上述分析,我們可以考慮以下兩種數(shù)據(jù)庫模式的選擇方案。方案1:采用一個總的關(guān)系模式:方案2:采用三個關(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,且對X中的任何真子集X

都有XY,則稱Y完全函數(shù)依賴于X。記作:3.部分函數(shù)依賴設(shè)R為任一給定關(guān)系,X,Y為其屬性或?qū)傩越M,若X

Y,且在X中存在一個真子集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ī)范化的過程

1.第一范式任給關(guān)系R,如果R中每一屬性的值域中的每一個值都是不可分解的,則R為第一范式,記作R∈1NF。

教師編號所教課程0001程序設(shè)計0002程序設(shè)計,操作系統(tǒng)非規(guī)范化關(guān)系

教師編號所教課程0001程序設(shè)計0002程序設(shè)計0002操作系統(tǒng)規(guī)范化的關(guān)系

2.第二范式任給關(guān)系R,若R∈1NF,且其所有非主屬性都完全函數(shù)依賴于關(guān)鍵字,則R為第二范式,記作R∈2NF。3.第三范式任給關(guān)系R,若R∈2NF,且它的每一個非主屬性都不傳遞依賴于主關(guān)鍵字,則R屬性第三范式,記作R∈3NF。4.BCNF范式

BCNF(BoyceCoddNormalForm)是Boyce與Codd為解決3NF有時出現(xiàn)的插入與刪除操作異常問題而提出的

2.5.4關(guān)系分解的正確性

把組合屬性分解為不可再分的屬性非規(guī)范化關(guān)系1NF2NF3NFBCNF消去非主屬性對主關(guān)鍵字的部分函數(shù)依賴消去非主屬性對主關(guān)鍵字的傳遞函數(shù)依賴消去所有部分函數(shù)依賴,包括主屬性對候選關(guān)鍵字的部分函數(shù)依賴使每一個決定因素都包含候選碼

關(guān)系分解的過程

通過一個實例來說明關(guān)系分解的正確性。

在某學(xué)校中,一個學(xué)生(學(xué)號屬性名為S#)只在一個系(系號屬性名為DEPT)學(xué)習(xí),一個系只有一名系主任(姓名屬性名為MN),下表是該學(xué)校的一個實際關(guān)系,其關(guān)系模式為R(S#,DEPT,MN)??梢娫谠撽P(guān)系中,MN傳遞函數(shù)依賴于S#,故需對之進行關(guān)系分解??捎腥N方法:

S#DEPTMNS1D1張五S2D1張五S3D2李四S4D3王一1.分解成三個關(guān)系:R1(S#),R2(DEPT),R3(MN)

S#S1S2S3S4關(guān)系R1

DEPTD1D2D3

關(guān)系R2

MN張五李四王一關(guān)系R3

2.分解成兩個關(guān)系:R1(S#,DEPT),R2(S#,MN)

S#DEPTS1D1S2D1S3D2S4D3關(guān)系R1

S#MNS1張五S1張五S2李四S3王三關(guān)系R2

3.分解成兩個關(guān)系:R1(S#,DEPT)和R2(DEPT,MN)

S#DEPTS1D1S2D1S3D2S4D3

關(guān)系R1

DEPTMNS1張五S2李四S3王三

關(guān)系R2

小結(jié)

本課主要講解關(guān)系數(shù)據(jù)庫的理論基礎(chǔ),為進一步深入學(xué)習(xí)關(guān)系數(shù)據(jù)庫的原理與應(yīng)用打下基礎(chǔ)。本課在討論關(guān)系數(shù)據(jù)庫的基本概念的基礎(chǔ)上,探討了關(guān)系的數(shù)字定義、關(guān)系的完整性、關(guān)系代數(shù)的一些基本操作、函數(shù)依賴與關(guān)系的規(guī)范化等學(xué)習(xí)關(guān)系數(shù)據(jù)庫必須要了解的理論基礎(chǔ)。關(guān)系代數(shù)與關(guān)系的規(guī)范化是本章的重點。

實體聯(lián)系模型(E-R模型)

3.1E—R模型

3.1.1三個世界

事物類事物性質(zhì)實體集實體屬性文件記錄數(shù)據(jù)項現(xiàn)實世界信息世界數(shù)據(jù)世界3.1.2E-R模型的組成要素及表示方法

1.E-R圖的組成要素及其畫法2.實體間不同聯(lián)系情況的E-R圖表示法【例

】兩個實體集之間的一對一的聯(lián)系的繪制方法。假設(shè)某學(xué)院有若干個系,每個系只有一個主任。則主任和系之間是一對一的關(guān)系。主任和系的屬性分別如下:主任——編號,姓名,年齡,學(xué)歷;系——系編號,系名,主任和系之間是一個管理關(guān)系

實體名聯(lián)系名屬性名實體表示屬性表示聯(lián)系表示解:描述主任和系之間的E-R圖可如下圖:

1主任系管理1姓名年齡學(xué)歷編號系編號系名任職時間【例

】兩個實體集之間的一對多的聯(lián)系的繪制方法。假設(shè)在某倉庫管理系統(tǒng)中,有兩個實體集:倉庫和商品。倉庫用來存放商品,且規(guī)定一類商品只能存放在一個倉庫中,一個倉庫可以存放多件商品。倉庫和商品之間是一對多的聯(lián)系。倉庫和商品的屬性分別如下:倉庫——倉庫號,地點,面積聯(lián)單

商品——商品號,商品名,價格在存放聯(lián)系中要反映出存放商品的數(shù)量。

解:描述倉庫和商品之間的E-R圖可如下圖所示

1倉庫商品存放n地點面積倉庫號商品號價格數(shù)量商品名【例】兩個實體集之間的多對多的聯(lián)系的繪制方法。

假設(shè)在某教務(wù)管理系統(tǒng)中,一個教師可以上多門課,一門課也可以由多個老師去上。教師和課程之間是多對多的聯(lián)系。教師和課程可用以下屬性來描述:教師——教師號,教師名,職稱

課程——課程號,課程名,班級在“講授”聯(lián)系中應(yīng)能反映出教師的授課質(zhì)量。

解:描述教師和課程之間的E-R圖可如下圖所示。

m教師課程講授n教師名職稱教師號課程號班級質(zhì)量課程名3.2E—R圖的設(shè)計方法

E-R圖通常都應(yīng)經(jīng)過以下兩個階段:

(1)針對每一用戶畫出該用戶信息的局部E—R圖,確定該用戶視圖的實體、屬性和聯(lián)系。需注意的是:能作為屬性的就不要作為實體,這有利于E—R圖的簡化。

(2)綜合局部E—R圖,生成總體E—R圖。在綜合過程中,同名實體只能出現(xiàn)一次,還要去掉不必要的聯(lián)系,以便消除冗余。一般來說,從總體E—R圖必須能導(dǎo)出原來的所有局部視圖,包括實體、屬性和聯(lián)系。

【例

】某學(xué)校管理系統(tǒng)中有三個部門:后勤部、學(xué)生處和財務(wù)處。后勤部用來管理學(xué)生的住宿;教務(wù)處用來管理學(xué)生選課和教師任課;財務(wù)處用來管理發(fā)放教師的工資。

后勤部涉及到的實體及實體之間的聯(lián)系如下:

學(xué)生:屬性有學(xué)號、姓名、性別、年齡、專業(yè)和入學(xué)時間宿舍:樓號、房間、檔次學(xué)生與宿舍的聯(lián)系是一個學(xué)生只能住在一個宿舍,一個宿舍能住多個學(xué)生,學(xué)生住宿要交租金。教務(wù)處涉及到的實體及實體之間的聯(lián)系如下:學(xué)生:屬性有學(xué)號、姓名、性別、年齡、專業(yè)和入學(xué)時間教師:屬性有教師號、姓名、性別、職稱、專業(yè)課程:屬性有課程號、課程名、學(xué)時數(shù)、專業(yè)各實體關(guān)系描述如下:一個學(xué)生可以選多門課,一門課可以由多個學(xué)生選修;一個教師可以教多門課,一門課也可以由多個老師教;學(xué)生選修某門課有一個成績;教師教某門課有一個質(zhì)量評價。

財務(wù)處涉及到的實體及實體之間的聯(lián)系如下:

教師:屬性有教師號、姓名、性別、職稱、專業(yè)工資:屬性有基本工資、加班工資、扣稅、工資編號教師和工資的聯(lián)系是:一個教師只能領(lǐng)一份工資,一份工資只能由一個教師領(lǐng),領(lǐng)工資時應(yīng)注明是某月工資。解:先根據(jù)題意設(shè)計出各部門的局部E-R圖

n學(xué)生宿舍住1租金學(xué)生姓名專業(yè)學(xué)號宿舍樓號檔次年齡性別入學(xué)時間房間號(a)后勤部的局部E-R圖

教師姓名職稱教師號課程課程號學(xué)時數(shù)課程名性別專業(yè)專業(yè)m教師課程講授n質(zhì)量學(xué)生選修mn成績(b)教務(wù)處的局部E-R圖(學(xué)生同(a)圖)

工資扣稅基本工資加班工資工資編號工資教師領(lǐng)11月份1m學(xué)生住宿舍n1教師課程選修mn講授n領(lǐng)工資1(c)財務(wù)處的局部E-R圖(教師同(b)圖)

某學(xué)校管理系統(tǒng)的全局E-R圖

3.3E—R模型到關(guān)系模型的轉(zhuǎn)換

把E-R圖轉(zhuǎn)換為關(guān)系模型可遵循如下原則

:

(1)對于E—R圖中每個實體集,都應(yīng)轉(zhuǎn)換為一個關(guān)系,該關(guān)系應(yīng)包括對應(yīng)實體的全部屬性,并應(yīng)根據(jù)關(guān)系所表達的語義確定哪個屬性或哪幾個屬性組作為“主關(guān)鍵字”,主關(guān)鍵字用來標識實體。(2)對于E—R圖中的聯(lián)系,情況比較復(fù)雜,要根據(jù)實體聯(lián)系方式的不同,采取不同的手段加以實現(xiàn)。下面著重討論聯(lián)系的轉(zhuǎn)換方法。

3.3.1兩實體集間1:n聯(lián)系

兩實體集間1:n聯(lián)系,可將“一方”實體的主關(guān)鍵字納入“n方”實體集對應(yīng)的關(guān)系中作為“外部關(guān)鍵字”,同時把聯(lián)系的屬性也一并納入“n方”對應(yīng)的關(guān)系中。3.3.2兩實體集間m:n聯(lián)系對于兩實體集間m:n聯(lián)系,必須對“聯(lián)系”單獨建立一個關(guān)系,用來聯(lián)系雙方實體集。該關(guān)系的屬性中至少要包括被它所聯(lián)系的雙方實體集的“主關(guān)鍵字”,并且如果聯(lián)系有屬性,也要歸入這個關(guān)系中。

3.3.3兩實體集間的1:1的聯(lián)系

假設(shè)A實體集與B實體集是1:1的聯(lián)系,聯(lián)系的轉(zhuǎn)換有三種方法:

①把A實體集的主關(guān)鍵字加入到B實體集對應(yīng)的關(guān)系中,如果聯(lián)系有屬性也一并加入;

②把B實體集的主關(guān)鍵字加入到A實體集對應(yīng)的關(guān)系中,如果聯(lián)系有屬性也一并加入;

③建立第三個關(guān)系,關(guān)系中包含兩個實體集的主關(guān)鍵字,如果聯(lián)系有屬性也一并加入。

小結(jié)

把現(xiàn)實世界轉(zhuǎn)換成為計算機能夠處理的數(shù)據(jù)世界,需經(jīng)過兩個階段:第一個階段需使用概念模型把現(xiàn)實世界抽象成信息世界,第二階段是使用實施模型把信息世界轉(zhuǎn)換為數(shù)據(jù)世界。最常用的概念模型為E-R模型,E-R模型的三個基本要素是實體、屬性和聯(lián)系。設(shè)計E-R圖一般經(jīng)過兩個步驟,第一步是抽象出各部門的局部E-R圖,第二步是把局部E-R圖組合成全局E-R圖。E-R圖只是信息的一種抽象表示,還需把它轉(zhuǎn)化成相應(yīng)的實施數(shù)據(jù)模型才能轉(zhuǎn)化為數(shù)據(jù)庫中的數(shù)據(jù)。把E-R圖轉(zhuǎn)化為關(guān)系模型,不但要把實體轉(zhuǎn)化成關(guān)系,而且在關(guān)系中還應(yīng)反映出E-R圖中各實體集之間的聯(lián)系。

數(shù)據(jù)庫設(shè)計

4.1數(shù)據(jù)庫設(shè)計概述

4.1.1數(shù)據(jù)庫設(shè)計的目標數(shù)據(jù)庫設(shè)計有兩個最重要的目標:滿足應(yīng)用功能需求和良好的數(shù)據(jù)庫性能。滿足應(yīng)用功能需求,主要是指把用戶當前應(yīng)用以及可預(yù)知的將來應(yīng)用所需要的數(shù)據(jù)及其聯(lián)系能全部準確地存放于數(shù)據(jù)庫之中,并能根據(jù)用戶的需要對數(shù)據(jù)進行規(guī)定的合理的增、刪、改、顯示等操作。良好的數(shù)據(jù)庫性能,主要是指數(shù)據(jù)庫應(yīng)具有良好的存儲結(jié)構(gòu)、良好的數(shù)據(jù)共享性、良好的數(shù)據(jù)完整性、良好的數(shù)據(jù)一致性及良好的安全保密性能等。

4.1.2數(shù)據(jù)庫設(shè)計的內(nèi)容

1.數(shù)據(jù)庫的結(jié)構(gòu)特性設(shè)計數(shù)據(jù)庫的結(jié)構(gòu)特性設(shè)計是確定數(shù)據(jù)庫的框架和數(shù)據(jù)結(jié)構(gòu)(邏輯結(jié)構(gòu)特征)。

2.數(shù)據(jù)庫的行為特性設(shè)計數(shù)據(jù)庫的行為特性設(shè)計是指確定數(shù)據(jù)庫用戶的行為和動作,并根據(jù)其行為特性設(shè)計出數(shù)據(jù)庫的子模式。

3.數(shù)據(jù)庫的物理模式設(shè)計數(shù)據(jù)庫的物理模式設(shè)計要求是:根據(jù)數(shù)據(jù)庫結(jié)構(gòu)的動態(tài)特性,在特定的RDBMS環(huán)境下,把數(shù)據(jù)庫的邏輯結(jié)構(gòu)模型加以物理實現(xiàn),從而得出數(shù)據(jù)庫的存儲模式和存取方法。

4.1.3數(shù)據(jù)庫設(shè)計的特點與過程

1.數(shù)據(jù)庫設(shè)計的特點:數(shù)據(jù)庫設(shè)計是一種“反復(fù)探尋,逐步求精”的過程。

2.數(shù)據(jù)庫設(shè)計的過程

如下圖

單位或組織數(shù)據(jù)庫的邏輯設(shè)計數(shù)據(jù)庫的行為設(shè)計分析用戶需求E-R模型設(shè)計邏輯模式設(shè)計分析用戶需求模塊功能說明編寫程序代碼存儲結(jié)構(gòu)的選擇屬性的確定索引的確定數(shù)據(jù)庫的物理設(shè)計加載實驗數(shù)據(jù)并調(diào)試運行應(yīng)用程序的調(diào)試、運行與維護滿意?不是加載數(shù)據(jù)庫數(shù)據(jù)庫系統(tǒng)的運行與維護不4.2數(shù)據(jù)庫邏輯設(shè)計

4.2.1數(shù)據(jù)庫邏輯設(shè)計的步驟邏輯設(shè)計階段的目標是產(chǎn)生合理的數(shù)據(jù)庫模式,可分為三個階段:分別是收集和分析用戶需求、概念模式設(shè)計和邏輯模式設(shè)J計。第一階段主要分成四個步驟,分別如下:第一步:分析用戶活動,產(chǎn)生“用戶活動圖”。第二步:確定系統(tǒng)范圍,產(chǎn)生“系統(tǒng)范圍圖”。第三步:分析用戶活動所涉及到的數(shù)據(jù),產(chǎn)生“數(shù)據(jù)流圖”。第四步:分析系統(tǒng)數(shù)據(jù),產(chǎn)生數(shù)據(jù)字典。第二階段可分為兩個步驟,分別如下:第一步:根據(jù)局部E-R模型,產(chǎn)生局部“E-R模型”。第二步:對局部E-R模型進行綜合,產(chǎn)生總體E-R模型,并建立“總體E-R圖”。第三階段也可分成兩個步驟,分別如下:第一步:把總體E-R圖轉(zhuǎn)換成模式。第二步:對模式進行優(yōu)化,產(chǎn)生符合要求的合理最優(yōu)的模式。

4.2.2收集和分析用戶需求

通過一個醫(yī)院信息管理系統(tǒng)來說明這四個步驟應(yīng)完成的功能。

【例】某醫(yī)院信息管理系統(tǒng)要完成以下功能:

辦理病歷(第一次來院治病時辦理病歷);查詢藥品情況(根據(jù)要求查詢某種類或全部藥品信息);病人項目入庫(病人所用藥、所做檢查等治療信息存入到指定的數(shù)據(jù)庫中);催交欠費(根據(jù)病人項目計算出總費用,減去預(yù)交費用,若超過某一限度則催交欠費)。

1.分析用戶活動

接受申請病人數(shù)據(jù)存檔打印病歷封面接受申請查藥品信息打印藥品目錄清單接受申請項目信息的錄入與保存打印項目信息接受申請查項目信息計算逾期項目與費用并打印辦理病歷藥品查詢項目入庫催交欠費發(fā)給病人發(fā)給查詢?nèi)私唤o病人交給病人用戶醫(yī)院的業(yè)務(wù)流程所得到的“用戶活動圖”

2.確定系統(tǒng)范圍

上圖中虛線框內(nèi)的部分屬于系統(tǒng)范圍,而框外部分則需人工處理。

3.分析用戶活動所涉及到的數(shù)據(jù)

(1)數(shù)據(jù)流圖(DFD)的概念數(shù)據(jù)流圖是一種能全面描述系統(tǒng)邏輯模型的主要工具,它可以用少數(shù)幾種符號綜合地反映出數(shù)據(jù)在系統(tǒng)中的流動、存儲和處理情況。(2)數(shù)據(jù)流圖的特征

抽象性——數(shù)據(jù)流圖完全舍去了具體的物質(zhì),只剩下數(shù)據(jù)的流動、加工處理和存儲。概括性——數(shù)據(jù)流圖可以把系統(tǒng)中的不同業(yè)務(wù)處理過程聯(lián)系起來,形成一個整體。(3)數(shù)據(jù)流圖的組成

畫數(shù)據(jù)流圖應(yīng)注意以下幾點:數(shù)據(jù)流圖中反映的是數(shù)據(jù)流而不是控制流,這是與一般程序流程圖的最大不同之處;在對數(shù)據(jù)流圖中各個成份命名時,應(yīng)該體現(xiàn)命名的含義;流入文件或流出文件的數(shù)據(jù)流不必命名,因為文件名本身已經(jīng)表示了數(shù)據(jù)內(nèi)容;源點和終點不是必須的,因為它們是屬于系統(tǒng)之外的事物,但畫出源點和終點有助于理解數(shù)據(jù)流的來龍去脈。

SD1P1D2F1P2D3EF2(4)數(shù)據(jù)流圖的畫法

一般地說,畫數(shù)據(jù)流圖應(yīng)遵循“由外向內(nèi),逐步細化”的原則。逐步細化是指:逐一描述系統(tǒng)內(nèi)部數(shù)據(jù)流,一般從每個業(yè)務(wù)的輸入端開始向輸出端推進,每當經(jīng)過使數(shù)據(jù)流的組成或數(shù)值發(fā)生變化的地方,就用一個“加工”將其連接起來,這個“加工”正是實現(xiàn)這一數(shù)據(jù)變化的。注意,不要把相互無關(guān)的數(shù)據(jù)畫成一個數(shù)據(jù)流,也不要把作為一個處理單位的數(shù)據(jù)畫成二個數(shù)據(jù)流。如果牽涉到文件,則應(yīng)表示出“文件”與“加工”的讀寫關(guān)系。

4.分析系統(tǒng)數(shù)據(jù)

(1)數(shù)據(jù)字典的概念數(shù)據(jù)流圖表達了數(shù)據(jù)和處理的關(guān)系,數(shù)據(jù)字典則是系統(tǒng)中各類數(shù)據(jù)描述的集合,是進行數(shù)據(jù)收集和數(shù)據(jù)分析所獲得的結(jié)果。數(shù)據(jù)字典是關(guān)于數(shù)據(jù)庫中數(shù)據(jù)的描述,通常稱“元數(shù)據(jù)”,元數(shù)據(jù)不是數(shù)據(jù)本身。數(shù)據(jù)字典在數(shù)據(jù)庫設(shè)計中占有非常重要的地位,是概念模式設(shè)計、邏輯模式設(shè)計和物理設(shè)計的主要依據(jù)。(2)通過數(shù)據(jù)流圖構(gòu)成數(shù)據(jù)字典數(shù)據(jù)字典是對數(shù)據(jù)流圖中的四個成份進行描述的產(chǎn)物,它和數(shù)據(jù)流圖共同構(gòu)成“系統(tǒng)說明書”。

①數(shù)據(jù)流的描述

②文件的描述

③數(shù)據(jù)項的描述

④加工的描述

4.2.3概念模型設(shè)計(E-R圖設(shè)計)

1.局部E-R模型的設(shè)計局部E-R模型設(shè)計的任務(wù)是根據(jù)需求上一步驟產(chǎn)生的各個功能模塊的數(shù)據(jù)流圖和數(shù)據(jù)字典中的相關(guān)數(shù)據(jù),設(shè)計出各個功能模塊的局部E—R圖。

數(shù)據(jù)抽象、設(shè)計局部E-R圖對局部E-R圖集成,生成總體E-R圖用戶滿意NY概念模型的設(shè)計步驟

2.總體E-R模型的設(shè)計

局部E-R圖之間的沖突主要有3類:屬性沖突、命名沖突和結(jié)構(gòu)沖突。(1)屬性沖突

①屬性域沖突,即屬性值的類型、取值范圍不同。

②屬性取值單位沖突。(2)命名沖突

①同名異義沖突,即不同意義的對象在不同的部門的局部E-R圖中具有相同的名字。

②異名同義沖突,即意義相同的對象在不同的部門的局部E-R圖中具有不同的名字。(3)結(jié)構(gòu)沖突

①同一對象在不同的應(yīng)用中具有不同的抽象。

②同一實體在不同的局部E-R圖中的屬性組成不一致,即包含的屬性個數(shù)和屬性排列次序不完全相同。

③實體之間的聯(lián)系在不同的局部E—R圖中呈現(xiàn)不同的類型。這類沖突的解決方法是根據(jù)應(yīng)用的語義對實體聯(lián)系的類型進行綜合或調(diào)整。

4.2.4邏輯模式設(shè)計

邏輯模式設(shè)計的實質(zhì)是把E-R圖轉(zhuǎn)換為具體的DBMS支持的數(shù)據(jù)模型。把E-R圖轉(zhuǎn)換為關(guān)系模型的方法,通常分兩步進行:初步設(shè)計和優(yōu)化設(shè)計。1.初步設(shè)計——把E-R圖轉(zhuǎn)換為關(guān)系模型具體的轉(zhuǎn)換方法請參見3.3節(jié)。2.優(yōu)化設(shè)計——對模式進行調(diào)整和改善所謂優(yōu)化,就是從提高效率的角度出發(fā),對模式結(jié)構(gòu)作進一步的凋整和改良。優(yōu)化是在性能預(yù)測的基礎(chǔ)上進行的,一般用三方面指標來衡量:(1)單位時間內(nèi)所訪問的邏輯記錄個數(shù)要少;(2)單位時間內(nèi)數(shù)據(jù)傳送量要少;(3)系統(tǒng)占用的存儲空間盡量要少?!纠恳樵儾∪诵畔r,經(jīng)常按住院病人和門診病人分類查詢,為改善性能,使得單位時間內(nèi)訪問邏輯記錄的個數(shù)盡量少,請給出一種分解方法。原來的病人關(guān)系為:病人(病歷號、姓名、性別、年齡、職業(yè)、通信地址、電話號碼、是否醫(yī)保)可對其進行水平分解,使其成為兩個關(guān)系住院病人(病歷號、姓名、性別、年齡、職業(yè)、通信地址、電話號碼、是否醫(yī)保)門診病人(病歷號、姓名、性別、年齡、職業(yè)、通信地址、電話號碼、是否醫(yī)保)4.3數(shù)據(jù)庫物理設(shè)計

4.3.1存儲結(jié)構(gòu)的選擇選擇何種存儲結(jié)構(gòu),與選定的DBMS類型有關(guān),對于層次式或網(wǎng)狀式DBMS,存儲結(jié)構(gòu)的選擇與應(yīng)用有密切關(guān)系。對于關(guān)系式數(shù)據(jù)庫,用戶能夠干預(yù)的事情很少,最多只能選定索引方法或給出輔助索引,以便在程序中可以按倒排文件方式查詢數(shù)據(jù),而存取路徑是由系統(tǒng)安排的。4.3.2屬性的存儲類型的確定不同DBMS系統(tǒng)的數(shù)據(jù)類型稍微有點區(qū)別,因此需要針對不同的DBMS來確定每個屬性的存儲類型。數(shù)據(jù)庫管理系統(tǒng)提供的數(shù)據(jù)庫設(shè)計工具就具有設(shè)計屬性的存儲類型的功能,如VisualFoxPro提供的“表設(shè)計器”,VisualBasic提供的“可視化數(shù)據(jù)管理器”,Delphi提供的“DataBaseDesktop”等。4.3.3表的索引結(jié)構(gòu)的確定

4.3.4存取路徑的確定

4.4數(shù)據(jù)庫的實現(xiàn)、運行與維護

4.4.1數(shù)據(jù)庫的實現(xiàn)該階段主要完成以下三項工作:(1)建立實際數(shù)據(jù)庫結(jié)構(gòu)。(2)裝入試驗數(shù)據(jù)對應(yīng)用程序進行調(diào)試。(3)裝入實際數(shù)據(jù),進入試運行狀態(tài)。4.4.2數(shù)據(jù)庫的運行與維護運行維護階段的主要任務(wù)如下:(1)對日常數(shù)據(jù)庫操作進行維護(2)維護數(shù)據(jù)庫的結(jié)構(gòu)(3)維護數(shù)據(jù)庫的安全性與完整性(4)監(jiān)測并改善數(shù)據(jù)庫運行性能(5)根據(jù)用戶要求對數(shù)據(jù)庫現(xiàn)有功能進行擴充(6)及時改正運行中發(fā)現(xiàn)的系統(tǒng)錯誤

4.5編寫技術(shù)文檔

4.5.1編寫系統(tǒng)說明書系統(tǒng)說明書主要由數(shù)據(jù)流圖和數(shù)據(jù)字典組成。它用來表達用戶對系統(tǒng)的要求,軟件人員根據(jù)“系統(tǒng)說明書”進行數(shù)據(jù)庫的構(gòu)造和應(yīng)用程序的設(shè)計。

4.5.2編寫技術(shù)說明書技術(shù)說明書主要包括如下內(nèi)容:

(1)用戶活動圖、數(shù)據(jù)流圖和數(shù)據(jù)字典。(2)局部E-R圖和總體E-R圖。(3)對于層次和網(wǎng)狀數(shù)據(jù)類型應(yīng)指出各種記錄型及其聯(lián)系,指出關(guān)鍵字。對于關(guān)系數(shù)據(jù)類型,應(yīng)指出關(guān)系模式、關(guān)系模式之間的聯(lián)系、關(guān)系的關(guān)鍵字。(4)在數(shù)據(jù)庫設(shè)計階段產(chǎn)生的每個表格的名稱、字段的屬性、索引的名稱和索引字段(或索引表達式)(5)應(yīng)用程序的總體結(jié)構(gòu)框圖,各主要模塊的流程圖,詳細的程序代碼。小結(jié)

本章主要介紹數(shù)據(jù)庫系統(tǒng)的開發(fā)過程,對數(shù)據(jù)庫系統(tǒng)的開發(fā)過程中的每個階段進行了詳盡的闡述。數(shù)據(jù)庫設(shè)計包括三個部分的內(nèi)容,分別是結(jié)構(gòu)特性的設(shè)計、行為特性的設(shè)計和數(shù)據(jù)庫的物理模式設(shè)計。數(shù)據(jù)庫的開發(fā)過程基本上可分成三個階段,分別是邏輯設(shè)計階段、物理設(shè)計階段、數(shù)據(jù)庫的運行與調(diào)試及維護階段。在邏輯設(shè)計階段主要是分析用戶需求,產(chǎn)生用戶活動圖,根據(jù)用戶活動圖設(shè)計出數(shù)據(jù)流圖和數(shù)據(jù)字典,最后根據(jù)數(shù)據(jù)流圖和數(shù)據(jù)字典設(shè)計出數(shù)據(jù)庫模式。物理設(shè)計階段的任務(wù)主要是確定數(shù)據(jù)的物理結(jié)構(gòu)、屬性的類型、索引等。數(shù)據(jù)庫的運行與調(diào)試及維護階段的主要任務(wù)是對數(shù)據(jù)庫進行維護,使數(shù)據(jù)庫運行良好。數(shù)據(jù)庫系統(tǒng)作為軟件產(chǎn)品提交時還必須提交相應(yīng)的文檔資料,文檔資料主要包括系統(tǒng)說明書、技術(shù)說明書和使用說明書。

Delphi7與數(shù)據(jù)庫

6.1Delphi7支持的數(shù)據(jù)庫種類

6.1.1Delphi7訪問數(shù)據(jù)庫的基本方法

6.1.2Delphi7支持的數(shù)據(jù)庫類型

Delphi7所支持的數(shù)據(jù)庫類型主要有以下幾種:(1)dBase數(shù)據(jù)庫(.DBF)(2)Paradox數(shù)據(jù)庫(3)ASCII碼文件(.TXT)(4)本地InterBase服務(wù)器(.GDB)(5)Access數(shù)據(jù)庫(.MDB)(6)各種數(shù)據(jù)庫服務(wù)器(7)可以通過ODBC與其他數(shù)據(jù)庫建立連接

6.2利用Delphi7開發(fā)數(shù)據(jù)庫應(yīng)用程序的模式

6.2.1利用Delphi7開發(fā)單層數(shù)據(jù)庫應(yīng)用程序的方法

在不使用BDE與BDE數(shù)據(jù)集,也不使用IAppServer接口的情況下,直接用數(shù)據(jù)庫文件作為數(shù)據(jù)源,在數(shù)據(jù)控制組件的配合下進行數(shù)據(jù)庫應(yīng)用程序的開發(fā),稱為基于文件的單層數(shù)據(jù)庫應(yīng)用程序

6.2.2利用Delphi7開發(fā)兩層數(shù)據(jù)庫應(yīng)用程序的方法

1.基于BDE的兩層數(shù)據(jù)庫應(yīng)用程序

2.基于ADO的兩層數(shù)據(jù)庫應(yīng)用程序

6.2.3利用Delphi7開發(fā)多層數(shù)據(jù)庫應(yīng)用程序的方法

1.基于DataSnap技術(shù)的多層數(shù)據(jù)庫應(yīng)用程序

DataSnap技術(shù)原先稱MIDAS技術(shù),該結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用程序與兩層結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用程序相比,多了一個應(yīng)用服務(wù)器,與數(shù)據(jù)訪問有關(guān)的功能以數(shù)據(jù)提供者(Providers)的身份運行在應(yīng)用服務(wù)器上。2.邏輯三層結(jié)構(gòu)的數(shù)據(jù)庫應(yīng)用程序

6.3ODBC的概念和配置ODBC數(shù)據(jù)源的方法

6.3.1ODBC的概念從物理上看,ODBC實際上由五個層次組成:

(1)數(shù)據(jù)源名

(2)應(yīng)用程序

(3)ODBC管理器(Administrator)

(4)驅(qū)動程序管理器(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ù)庫的系統(tǒng)DSN的配置

為前面建立的“教學(xué)”數(shù)據(jù)庫建立一個系統(tǒng)DSN,DSN名為“jiaoxue”,使用的操作系統(tǒng)為WindowsXP,具體步驟如下

:

1.打開ODBC數(shù)據(jù)源管理器

2.選擇數(shù)據(jù)源類型并添加數(shù)據(jù)源

3.選擇驅(qū)動數(shù)據(jù)源的驅(qū)動程序

4.設(shè)置數(shù)據(jù)源參數(shù)

5.完成

6.3.4SQLServer數(shù)據(jù)庫的系統(tǒng)DSN的配置

為SQLServer2000自帶的數(shù)據(jù)庫Pubs建立一個系統(tǒng)DSN,名為“SQLPubs”,使用的操作系統(tǒng)為WindowsXP,步驟如下:

1.方法同Access數(shù)據(jù)源名的配置

2.方法同Access數(shù)據(jù)源名的配置

3.選擇驅(qū)動數(shù)據(jù)源的驅(qū)動程序

4.為數(shù)據(jù)源命名并選擇SQL服務(wù)器

5.設(shè)置登錄ID和密碼

6.選擇數(shù)據(jù)庫

7.測試數(shù)據(jù)源

8.完成

6.4使用DatabaseDesktop進行數(shù)據(jù)庫管理

6.4.1DatabaseDesktop的作用

1.創(chuàng)建和維護數(shù)據(jù)庫

DatabaseDesktop應(yīng)用程序可以直接創(chuàng)建和維護Paradox數(shù)據(jù)庫,但不僅是用于創(chuàng)建Paradox表,幾乎當前所有格式的數(shù)據(jù)庫表均可以通過它來創(chuàng)建。

2.維護數(shù)據(jù)庫別名

在DatabaseDesktop應(yīng)用程序中,可以實現(xiàn)別名的創(chuàng)建和刪除等操作。

3.創(chuàng)建SQL文件和執(zhí)行SQL命令

6.4.2DatabaseDesktop的工作目錄和私有目錄的設(shè)定

通過把D:\ZP子目錄設(shè)為工作目錄來說明工作目錄的設(shè)定方法,具體步驟如下:

(1)執(zhí)行【Tools】→【DatabaseDesktop】命令,啟動DatabaseDesktop應(yīng)用程序。(2)執(zhí)行【File】→【W(wǎng)orkingDirectory】命令,出現(xiàn)【SetWorkingDirectory】對話框。在【W(wǎng)orkingDirectory】文本框中可以輸入工作目錄名,也可以通過單擊【browse】按鈕,在【DirecoryBrower】對話框中選擇相應(yīng)目錄“D:\ZP”,單擊【OK】按鈕。也可以通過別名來選擇工作目錄。

6.4.3數(shù)據(jù)庫別名的建立

數(shù)據(jù)庫別名有兩種:公共別名(PublicAlias)和項目別名(ProiectAlias)。通過為子目錄“D:\Delphi\JWGL”建立一個公共數(shù)據(jù)庫別名JWGL來說明數(shù)據(jù)庫別名的創(chuàng)建方法。創(chuàng)建步驟如下:(1)在DatabaseDesktop應(yīng)用程序中執(zhí)行【Tools】→【AliasManager】命令,出現(xiàn)【AliasManager】對話框。

(2)單擊【New】按鈕以創(chuàng)建數(shù)據(jù)庫別名。在【Databasealias】列表框中輸入“JWGL”,在【Drivertype】列表框中選擇【STANDARD】類型,此時將出現(xiàn)一個PATH文本框,在該文本框中輸入路徑“d:\Delphi\JWGL”,或單擊【Browse】按鈕,在彈出的【DirectoryBrowser】對話框中找到所需要的目錄“d:\Delphi\JWGL”,然后單擊【OK】按鈕,退出【DirectoryBrowser】。

(3)單擊【AliasManager】對話框上的【OK】按鈕,系統(tǒng)將彈出對話框,詢問用戶是否將數(shù)據(jù)庫別名保存到BDE配置文件IDAPI32.CFG中,單擊【是】按鈕即可。

6.4.4數(shù)據(jù)庫表的建立

Delphi的本地數(shù)據(jù)庫為dBase數(shù)據(jù)庫和Paradox數(shù)據(jù)庫,利用DatabaseDesktop可以很方便地創(chuàng)建這兩類數(shù)據(jù)庫表。創(chuàng)建一個Paradox數(shù)據(jù)庫表的步驟如下

:

(1)在DatabaseDesktop應(yīng)用程序中,執(zhí)行【File】→【New】→【Table】命令,出現(xiàn)【CreateTable】對話框。在【Tabletype】列表框中可以選擇表的類型。(2)選擇默認的類型“Paradox7”并單擊【OK】按鈕,系統(tǒng)將彈出【CreateParadox7Table】對話框。在該對話框中可以定義表的結(jié)構(gòu),即表的每個字段的字段名、字段類型、字段寬度和主鍵等,并可建立索引。

(3)在【FieldName】列輸入字段名,如“學(xué)號”,然后在【Type】列單擊鼠標右鍵,出現(xiàn)“字段類型”下拉菜單,在該菜單中選中類型【Alpha】,然后在【Size】列的下面單擊,輸入字段寬度為“6”。關(guān)于字段類型的具體含義請參考有關(guān)Paradox數(shù)據(jù)庫的書籍。如果要把“學(xué)號”字段設(shè)為主鍵,可在該行的【Key】列雙擊鼠標右鍵,將會出現(xiàn)一個“*”,代表該列是主鍵。如果要取消主鍵,可再雙擊該處,“*”號將消失。

(4)按Enter鍵把光標移到下一行,可接著創(chuàng)建下一個字段。(5)還可以為表創(chuàng)建“輔助索引(又稱第二索引)”,方法是在圖6-29所示的對話框中,在【TableProperties】列表框中選中“SecondaryIndexes”,然后再單擊【Define】按鈕,出現(xiàn)【DefineSecondaryIndex】(定義第二索引)對話框,如圖6-32所示。在該對話框中選中需要定義的索引字段,如“姓名”,然后單擊按鈕,把選中的字段移動到【Indexedfields:】對話框中即可。

圖6-29【CreateParadox7Table】對話框

(6)輔助索引屬性設(shè)置好后,單擊【OK】按鈕,將會出現(xiàn)

【SaveIndexAs】(保存索引)對話框,給索引取一個名字“XM”,然后單擊【OK】按鈕,索引定義完成。(7)表結(jié)構(gòu)創(chuàng)建好后,單擊【Saveas】按鈕,出現(xiàn)【SaveTableAs】(保存表)對話框。可以通過選中數(shù)據(jù)庫別名和選擇保存文件夾兩種方式確定數(shù)據(jù)庫表保存的位置。本題選擇保存位置為“D:\Delphi”文件夾,表名為“學(xué)生”,設(shè)置完成后單擊【保存】按鈕,表結(jié)構(gòu)將保存起來,表結(jié)構(gòu)創(chuàng)建完畢。(8)數(shù)據(jù)庫表的結(jié)構(gòu)創(chuàng)建后,應(yīng)向其中輸入數(shù)據(jù)。

小結(jié)

Delphi既是一種可視化編程語言,又是一種數(shù)據(jù)庫應(yīng)用程序開發(fā)的利器,本章對利用Delphi進行數(shù)據(jù)庫應(yīng)用程序開發(fā)的相關(guān)知識進行了一個概要性的講解。主要介紹Delphi支持的數(shù)據(jù)庫類型、使用Delphi開發(fā)兩層和多層數(shù)據(jù)庫應(yīng)用系統(tǒng)的模式、ODBC的基本概念、DSN的創(chuàng)建等內(nèi)容。最后介紹Delphi自帶的DatabaseDesktop應(yīng)用程序,著重講解使用該應(yīng)用程序創(chuàng)建和使用數(shù)據(jù)庫別名、創(chuàng)建和使用表的方法。

使用BDE組件開發(fā)數(shù)據(jù)庫應(yīng)用程序8.1使用BDE組件開發(fā)數(shù)據(jù)庫應(yīng)用程序的一般方法8.1.1使用BDE組件開發(fā)數(shù)據(jù)庫應(yīng)用程序的模式

1.BDE組件

BDE組件均位于【BDE】組件頁中,其作用是與實際的物理數(shù)據(jù)庫建立聯(lián)系,從物理數(shù)據(jù)庫中提取信息,或把信息的修改存放到物理數(shù)據(jù)庫中。2.DataAccess組件

DataAccess組件位于【DataAccess】組件頁中,該類組件是連接BDE組件和數(shù)據(jù)控制組件的橋梁。3.DataControls組件

8.1.2常用的BDE組件簡介

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è)計界面如圖8-3所示,使用TTable組件與數(shù)據(jù)表“學(xué)生”相連接。程序運行時在ListBox1中顯示表中的所有字段名,在編輯框Edit1中顯示表名,在編輯框Edit2中顯示字段數(shù),在編輯框Edit3中顯示記錄數(shù),在編輯框Edit4中顯示記錄號,在編輯框Edit5中顯示記錄長度。程序運行界面如圖8-4所示。分析:為使TTable組件與物理數(shù)據(jù)庫連接起來,至少應(yīng)設(shè)置它的DatabaseName屬性和TableName屬性。為使TTable組件中的數(shù)據(jù)集能夠使用,應(yīng)把它的Active屬性設(shè)為True。為使程序在一開始運行時就能顯示出所有字段的字段名,可在窗體的OnCreate事件中使用一個循環(huán),在循環(huán)中把Fields數(shù)組的每個元素的FieldName屬性值添加到ListBox1列表框。顯示數(shù)據(jù)表的其他屬性,可通過相應(yīng)的屬性名來實現(xiàn)。

8.2.2TTable組件的常用方法

1.FieldByName方法該方法用于引用數(shù)據(jù)集中的某個字段,該方法的函數(shù)形式如下:FunctionFieldByName(ConstFieldName:string):Tfield【例8-2】

編寫一個顯示字段名稱和選中字段的主要屬性的程序。程序的設(shè)計界面如圖8-5所示,程序的運行界面如圖8-6所示。程序執(zhí)行時,首先把當前目錄下的學(xué)生表中的字段填充到列表框ListBox1中,當在ListBox1中選中某字段后,該字段的相應(yīng)屬性值將顯示在對應(yīng)的編輯框中。

分析:顯示字段名的方法同例8-1。當在ListBox1上單擊以選中某個字段時,可通過TTable組件的FieldByName方法以列表框中選中的列表項作為參數(shù)來訪問對應(yīng)字段的屬性。需注意的是編輯框中只能顯示字符串數(shù)據(jù),因此當字段屬性不是字符串數(shù)據(jù)時,應(yīng)把它轉(zhuǎn)換為字符串數(shù)據(jù)。2.記錄指針移動方法

【例8-3】

編寫一個數(shù)據(jù)庫應(yīng)用程序,用來瀏覽和維護當前目錄下“學(xué)生表”中的數(shù)據(jù),要求程序的瀏覽和維護功能均使用組件來實現(xiàn)。程序的設(shè)計界面如圖8-7所示,程序的運行界面如圖8-8所示。

分析:可使用TDataSource組件建立TTable組件與數(shù)據(jù)控件組件之間的聯(lián)系,使用TDBNavigator來實現(xiàn)記錄指針的移動,使用TDBEdit來顯示TTable組件數(shù)據(jù)集的當前記錄的內(nèi)容。

【例8-4】

編寫一個數(shù)據(jù)庫應(yīng)用程序,用來瀏覽當前目錄下“學(xué)生表”中的數(shù)據(jù),要求記錄指針的移動采用移動記錄指針的方法。程序的設(shè)計界面如圖8-9所示,程序的運行界面如圖8-10所示。程序運行時單擊相應(yīng)的按鈕,將實現(xiàn)記錄指針的相應(yīng)移動。分析:為使在程序運行時,單擊相應(yīng)的按鈕可實現(xiàn)記錄指針的相應(yīng)移動,應(yīng)在按鈕的OnClick事件代碼中調(diào)用相應(yīng)的記錄指針移動方法。3.查詢記錄的相關(guān)方法

TTable組件提供了4種查詢記錄的方法

:

(1)GotoKey方法:該方法用于精確查找;(2)FindKey方法:該方法是實現(xiàn)精確查找的另一種方法,它和GotoKey一樣均是一個函數(shù)過程,格式如下:functionFindKey(constKeyValues:arrayofconst):Boole

(3)GotoNearest和FindNearest用于模糊查找。

4.數(shù)據(jù)操作相關(guān)方法

【例8-6】

編寫一個對當前目錄下的學(xué)生表進行維護的程序,要求該程序能夠完成記錄的增加、插入、修改和刪除等功能,對于增加和修改功能,程序應(yīng)能提供確定和取消操作。程序的設(shè)計界面如圖8-13所示,程序的運行界面如圖8-14所示。程序運行時,單擊相應(yīng)的按鈕將完成相應(yīng)的數(shù)據(jù)表的維護操作。分析:調(diào)用相應(yīng)的TTable組件的方法實現(xiàn)相應(yīng)的數(shù)據(jù)操作功能。

8.2.3TTable組件的常用事件1.Before×××事件

2.After×××事件

3.On×××事件

【例8-7】

為例8-6添加一條關(guān)于刪除的參照完整性驗證:如果必修課成績表中有當前學(xué)生的選課,則不允許刪除當前記錄。再給“確定”操作增加一個提示功能:當執(zhí)行Post成功時,將顯示“保存成功”的提示信息。

分析:假設(shè)Table1連接學(xué)生表,Table2連接必修課成績表,在Table1組件中執(zhí)行刪除操作發(fā)生之前,將發(fā)生BeforeDelete事件,可在該事件中根據(jù)Table1組件的當前記錄的學(xué)號值在Table2組件中查找相應(yīng)的學(xué)號,如果找到則不能刪除,系統(tǒng)可拋出一個異常來終止刪除操作。Post方法執(zhí)行成功后,將會發(fā)生AfterPost事件,可在該事件中顯示提示信息。8.3TDataSource組件的使用

TDataSource組件是使用最多的數(shù)據(jù)訪問組件,用來連接數(shù)據(jù)集組件和數(shù)據(jù)控制組件。

TDataSource組件的屬性比較少,最重要的是DataSet屬性。該屬性指出要與哪一個數(shù)據(jù)集組件建立聯(lián)系,它的屬性值是某一個數(shù)據(jù)集組件

8.4常用數(shù)據(jù)控制組件及其使用方法

8.4.1數(shù)據(jù)控制組件的常用屬性及使用方法

1.基本屬性

(1)DataSource屬性

(2)DataField屬性

2.使用方法

(1)在界面上添加TTable組件。(2)在界面上添加一個TDataSource組件。(3)在界面上添加數(shù)據(jù)控制組件。

8.4.2常用的數(shù)據(jù)控制組件

【例8-8】

編寫一個對學(xué)生表進行顯示和修改的程序。程序有兩個窗體Form1和Form2,設(shè)計時的Form1和Form2如圖8-20和圖8-21所示。程序執(zhí)行時,首先出現(xiàn)Form1,在Form1上的網(wǎng)格控件上雙擊,將會出現(xiàn)Form2。在Form2中將顯示雙擊的當前記錄的值,可以對它進行修改,修改完成后單擊“確定”按鈕將會把修改的結(jié)果存放到數(shù)據(jù)表中并返回到Form1窗口,單擊“取消”按鈕將取消用戶所做的修改操作并返回Form1窗口。分析:為使Form2中的數(shù)據(jù)控制組件能夠和Form1中數(shù)據(jù)控制組件顯示同一個數(shù)據(jù)集的內(nèi)容,應(yīng)把Form2上相應(yīng)的數(shù)據(jù)控制組件的DataSource屬性設(shè)置成與Form1上的數(shù)據(jù)控制組件使用的TDataSource組件的名稱。

【例8-9】

編寫一個必修課成績表的輸入程序,要求輸入學(xué)號使用一個TDBLookUpComboBox組件,該組件從學(xué)生表中提取學(xué)號信息,讓用戶選擇輸入。程序的設(shè)計界面如圖8-22所示,程序的運行界面如圖8-23所示。分析:輸入成績時,學(xué)號必須是一個具體的學(xué)生的學(xué)號,因此可從學(xué)生表中提取出學(xué)生學(xué)號信息供用戶選擇以減少輸入錯誤。

【例8-10】

設(shè)計一個動物圖片瀏覽程序,用來瀏覽數(shù)據(jù)庫別名DBDEMOS下的animals.dbf表中的BMP字段中存放的動物照片。程序的設(shè)計界面如圖8-24所示,程序的運行界面如圖8-25所示。分析:顯示數(shù)據(jù)庫中圖像字段的內(nèi)容,應(yīng)使用TDBImage組件。

【例8-11】

用DatabaseDesktop應(yīng)用程序創(chuàng)建一個名為RSDA的數(shù)據(jù)表,該表有4個字段:編號、姓名、性別和婚姻狀況。表的結(jié)構(gòu)如圖8-26所示。然后編寫一個對該數(shù)據(jù)表進行維護的數(shù)據(jù)庫應(yīng)用程序,程序的設(shè)計界面如圖8-27所示,程序的運行界面如圖8-28所示。分析:由于性別只有兩種情況,故可用DBRadioGroup組件供用戶選擇輸入?;橐鰻顩r是互斥的,可通過TDBCheckBox組件來輸入或顯示。8.5主從表數(shù)據(jù)庫應(yīng)用程序的編寫方法

【例8-12】

以DBDEMOS數(shù)據(jù)庫別名下的customer.db作為主表,以orders.db作為從表,以CustNo字段作為主從表聯(lián)系的字段建立主從表應(yīng)用程序。程序的設(shè)計界面如圖8-29所示,程序的運行界面如圖8-30所示。程序運行時在主表中選定一個客戶,從表將顯示相應(yīng)客戶的訂單信息。8.6通過程序創(chuàng)建數(shù)據(jù)庫表

1.FieldDefs屬性2.IndexDefs屬性3.CreateTable方法【例8-13】通過編程的方式在當前目錄下生成一個名為RYGL的Paradox表,該表有四個字段,分別為:BH(編號,字符型,8個字節(jié),必填字段)、XM(姓名,字符型,10個字節(jié),必填字段)、NL(年齡,整型)和HF(婚否,邏輯型)。同時還為該表創(chuàng)建了兩個索引,分別為BH(索引字段為BH,是主鍵索引)、XM(索引字段為XM)。并給該表添加兩條記錄,內(nèi)容為:

01001001王和平

23True01001002李小華

21False

程序的設(shè)計界面如圖8-33所示,程序的運行界面如圖8-34所示。分析:建立數(shù)據(jù)表,首先要定義表的字段,可通過TTable組件的FieldDefs屬性的AddFieldDef屬性來實現(xiàn)。如果表有索引,還必須要定義索引,可通過TTable組件的IndexDefs屬性的AddIndexDef屬性來實現(xiàn)。字段和索引均定義好后,可通過調(diào)用TTable組件的CreateTable方法來建立表。8.7TTable組件編程綜合實例

【例8-14】使用TTable組件實現(xiàn)“圖書瀏覽與維護程序”,該程序的功能要求如下。(1)建立一個名為TSXX的表,表的結(jié)構(gòu)如圖8-35所示。

(2)按鈕的功能實現(xiàn)與狀態(tài)設(shè)置。

①如果數(shù)據(jù)表中無記錄,則除【添加】按鈕外的其他按鈕均不可

②一開始,【確定】和【取消】按鈕不可用,單擊【添加】或【修改】按鈕后,【確定】和【取消】按鈕可用,此時其他各按鈕均不可用。當單擊【確定】或【取消】按鈕后,這兩個按鈕不可用,其他各個按鈕均可用。

③當記錄指針處于文件尾時,【后移】和【末記錄】按鈕不能用,當記錄指針處于【文件頭】時,【前移】和【首記錄】按鈕不能用。(3)顯示各字段內(nèi)容的組件不再使用DataControls組件頁上的組件,而是使用像Tedit,TCheckBox等的一般組件。(4)查詢使用FindKey方法來實現(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組件能夠快速地開發(fā)出功能強大的數(shù)據(jù)庫應(yīng)用程序。TTable組件的作用主要是建立與物理表的連接,然后可通過TDataSource組件把TTable組件和數(shù)據(jù)控制組件連接起來,通過數(shù)據(jù)控制組件來顯示或修改數(shù)據(jù)表的內(nèi)容。數(shù)據(jù)控制組件有很多種,每一種都有特定的功能和用途,使用它們一般都要設(shè)置它們的DataSource屬性和DataField屬性。本章詳細介紹TTable組件、TdataSource組件和常用的多種數(shù)據(jù)控制組件的屬性、方法和事件及它們的使用方法,并通過實例進行演示講解。在此基礎(chǔ)上,本章還通過編制一個非常典型的數(shù)據(jù)庫瀏覽和維護的程序?qū)Ρ菊碌膬?nèi)容進行綜合。本章的最后還對其他常用的BDE組件進行簡單介紹。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論