數(shù)據(jù)庫的建立與維護(hù)_第1頁
數(shù)據(jù)庫的建立與維護(hù)_第2頁
數(shù)據(jù)庫的建立與維護(hù)_第3頁
數(shù)據(jù)庫的建立與維護(hù)_第4頁
數(shù)據(jù)庫的建立與維護(hù)_第5頁
已閱讀5頁,還剩107頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章數(shù)據(jù)庫的建立與維護(hù)2.1數(shù)據(jù)表2.2數(shù)據(jù)庫設(shè)計(jì)2.3創(chuàng)建數(shù)據(jù)庫2.4創(chuàng)建數(shù)據(jù)表2.5表的操作2.6索引的創(chuàng)建和使用2.7建立和編輯表之間的關(guān)系習(xí)題2.1數(shù)據(jù)表數(shù)據(jù)表(Table)是構(gòu)成數(shù)據(jù)庫的基本元素之一,是數(shù)據(jù)庫中組織并存儲(chǔ)數(shù)據(jù)的單元。在VisualFoxPro中,數(shù)據(jù)庫可由多個(gè)數(shù)據(jù)表組成,從用戶實(shí)際使用的角度來看,關(guān)系模型的邏輯結(jié)構(gòu)是一張二維表,它由行和列組成。關(guān)系模式對(duì)應(yīng)一個(gè)二維表的表頭。關(guān)系(Relationship)對(duì)應(yīng)通常所說的二維表,如表2-1所示的學(xué)生情況表。其中每一列指明學(xué)生的一種屬性,屬性的名稱如學(xué)號(hào)、姓名、性別等在每一列的頂端標(biāo)出,每一行則給出某個(gè)學(xué)生的具體屬性值。表2-1學(xué)生情況表學(xué)號(hào)姓名性別出生日期班級(jí)聯(lián)系方式2001501馮小亮男02/07/1984機(jī)械1班23301232001307王金科男03/11/1984計(jì)算機(jī)2班23307872001203劉麗麗女08/27/1983國貿(mào)1班23308902001405王海男11/20/1984計(jì)算機(jī)1班23303482001421李曉華女12/15/1983計(jì)算機(jī)2班23300052001508趙文娟女09/23/1983機(jī)械1班23303972001209張強(qiáng)男05/18/1984國貿(mào)1班2330566數(shù)據(jù)表中的一行稱為一條記錄(Record)或一個(gè)元組,表示了數(shù)據(jù)表中一組相關(guān)聯(lián)的信息。數(shù)據(jù)表中的一列稱為一個(gè)字段(Field),字段反映了某個(gè)主題的信息,數(shù)據(jù)表字段的取值范圍稱為域(Domain),如性別的域是(男,女),所在班級(jí)的域是一個(gè)學(xué)校所有班級(jí)名的集合等。關(guān)系數(shù)據(jù)庫要求關(guān)系中的每一個(gè)元組具有唯一性,即關(guān)系中沒有相同的元組。因此,對(duì)于關(guān)系中的某一個(gè)屬性或?qū)傩越M,若它的值能唯一地標(biāo)識(shí)出一個(gè)元組,則稱該屬性或?qū)傩越M為候選鍵(Candidatekey)。在一個(gè)關(guān)系中可能有多個(gè)候選鍵,可選擇其中的一個(gè)作為主鍵(Primarykey),也稱為關(guān)鍵字。在一個(gè)關(guān)系中只能有一個(gè)主鍵。假設(shè)表2-1所示的學(xué)生情況表中沒有同姓名學(xué)生,則學(xué)號(hào)和姓名都分別是該關(guān)系的候選鍵,可以取學(xué)號(hào)作為主鍵。數(shù)據(jù)庫可包含多個(gè)數(shù)據(jù)表,每一個(gè)數(shù)據(jù)表對(duì)應(yīng)一組相關(guān)主題信息。例如學(xué)生選課數(shù)據(jù)庫系統(tǒng)可以包含學(xué)生情況數(shù)據(jù)表、課程情況數(shù)據(jù)表和學(xué)生選課數(shù)據(jù)表等,這幾個(gè)表之間是相對(duì)獨(dú)立又相互關(guān)聯(lián)的。關(guān)系數(shù)據(jù)庫的關(guān)系就體現(xiàn)為二維數(shù)據(jù)表的結(jié)構(gòu)及表之間的聯(lián)系。它允許用戶不僅能從當(dāng)前選定表中訪問數(shù)據(jù),而且可以通過當(dāng)前選定表訪問其他表中的數(shù)據(jù)。在某個(gè)關(guān)系R中可能有這樣一組屬性A,它不是關(guān)系R的主鍵,但它是另一個(gè)關(guān)系S的主鍵,則屬性組A稱為關(guān)系R的外鍵(Foreignkey)。2.2數(shù)據(jù)庫設(shè)計(jì)1.應(yīng)用示例背景信息教務(wù)處每一年都要組織學(xué)生進(jìn)行選修課的選擇,公布每門選修課的課程編號(hào)、名稱、學(xué)分、學(xué)時(shí)、任課教師及課程內(nèi)容等,學(xué)生根據(jù)自己的實(shí)際需要選修相應(yīng)的課程。選修時(shí)填表錄入自己的學(xué)號(hào)、選修課程號(hào)、選修學(xué)期等信息,教務(wù)處根據(jù)全院學(xué)生基本情況表清單(表2-1)建立每個(gè)學(xué)生的選修課程成績檔案,對(duì)學(xué)生的選修課成績進(jìn)行管理統(tǒng)計(jì)。為了方便管理,要求建立相應(yīng)的計(jì)算機(jī)數(shù)據(jù)庫管理系統(tǒng)。2.確定數(shù)據(jù)表經(jīng)過細(xì)致地調(diào)查和分析,在明確了建立數(shù)據(jù)庫的目的、內(nèi)容和處理方式之后,就可以著手把信息分成獨(dú)立的主題,每個(gè)主題對(duì)應(yīng)數(shù)據(jù)庫中的一個(gè)表。例如對(duì)于上述管理學(xué)生選課的系統(tǒng)來說,可以建立“學(xué)生情況表”、“課程情況表”和“學(xué)生選課表”三個(gè)表。

3.確定所需字段、字段類型和其他屬性確定了數(shù)據(jù)庫中所包含的表后,還應(yīng)該根據(jù)表中所包含的信息項(xiàng)確定表的字段。例如,在學(xué)生情況表中,可以建立“學(xué)號(hào)”、“姓名”、“性別”等字段。字段的建立應(yīng)該考慮既能描述主題信息,又能體現(xiàn)數(shù)據(jù)表之間的關(guān)系且盡量避免冗余。VisualFoxpro6.0是一個(gè)關(guān)系型的數(shù)據(jù)庫管理系統(tǒng),可以利用表之間的關(guān)系來迅速查找存儲(chǔ)在多個(gè)表中的信息,并可將這些信息組合在一起。根據(jù)主關(guān)鍵字的定義,如果姓名存在重復(fù)值,則只有“學(xué)號(hào)”可以作為其主關(guān)鍵字,因?yàn)楦鶕?jù)“姓名”或“性別”是無法唯一確定某一條記錄的。在VisualFoxpro6.0中,正是利用主關(guān)鍵字的特征,從而快速地關(guān)聯(lián)多個(gè)表中的數(shù)據(jù),并將數(shù)據(jù)組合在了一起。在確定主關(guān)鍵字時(shí)應(yīng)注意以下兩點(diǎn):(1)在主關(guān)鍵字中不允許有重復(fù)值或NULL值。因此,不能選擇包含有重復(fù)值或NULL值的字段作為主關(guān)鍵字。(2)因?yàn)橐弥麝P(guān)鍵字的值來查找記錄,主關(guān)鍵字的長度直接影響數(shù)據(jù)庫的操作速度。因此,在創(chuàng)建主關(guān)鍵字時(shí),該字段值最好使用能滿足存儲(chǔ)要求的最小長度,所以它不能太長,以方便記憶和鍵入。

4.確定表之間關(guān)系對(duì)于學(xué)生選課的管理系統(tǒng)來說,假設(shè)已經(jīng)設(shè)計(jì)了“學(xué)生情況表”、“課程情況表”和“學(xué)生選課表”三個(gè)表。目前這些表相對(duì)孤立,盡管這些表之間存在著種種關(guān)系,但是計(jì)算機(jī)不會(huì)自動(dòng)把它們聯(lián)系起來,需要人為地在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候設(shè)定表之間的關(guān)系。在VisualFoxPro6.0中,表之間有三種關(guān)系:一對(duì)一關(guān)系、一對(duì)多關(guān)系和多對(duì)多關(guān)系。在一對(duì)一關(guān)系中如果兩個(gè)表有相同的主題,可在兩個(gè)表中使用同樣的主關(guān)鍵字字段,并以此建立一對(duì)一關(guān)系。如果兩個(gè)表有不同的主題及不同的主關(guān)鍵字,可以選擇其中任意一個(gè)表,把它的主關(guān)鍵字放到另一個(gè)表中作為外部關(guān)鍵字。一對(duì)多關(guān)系是關(guān)系型數(shù)據(jù)庫中最普遍的關(guān)系,在一對(duì)多的關(guān)系中,一個(gè)表(表1)中的記錄在另一個(gè)表(表2)中可以有多條記錄與之對(duì)應(yīng),而表2中的一條記錄最多只能與表1中的一條記錄對(duì)應(yīng)。例如“學(xué)生情況表”和“學(xué)生選課表”,由于一個(gè)學(xué)生可以選多門課程,所以在“學(xué)生情況表”中的一條記錄可以對(duì)應(yīng)“學(xué)生選課表”中的多條記錄,但“學(xué)生選課表”中的一條記錄只唯一對(duì)應(yīng)“學(xué)生情況表”中的一條記錄,這就形成了一對(duì)多關(guān)系。要建立這樣的關(guān)系,就要把關(guān)系中“一方”的主關(guān)鍵字字段添加到“多方”的表中。在關(guān)系中,“一方”用主關(guān)鍵字或候選索引關(guān)鍵字,而“多方”使用普通索引關(guān)鍵字。在多對(duì)多關(guān)系中,表1的一個(gè)記錄可以對(duì)應(yīng)表2的多個(gè)記錄,同樣表2中的一個(gè)記錄在表1中也可以對(duì)應(yīng)多個(gè)記錄,這樣不利于數(shù)據(jù)信息的管理和維護(hù),因此,需要改變數(shù)據(jù)庫的設(shè)計(jì),即創(chuàng)建第三個(gè)表,把多對(duì)多關(guān)系分解為兩個(gè)一對(duì)多關(guān)系。這第三個(gè)表稱作"紐帶表",紐帶表可能只包含這兩個(gè)表的主關(guān)鍵字,也可能包含其他信息。

5.對(duì)所設(shè)計(jì)的表分析在設(shè)計(jì)數(shù)據(jù)庫時(shí),由于信息的復(fù)雜和情況的不同,使得設(shè)計(jì)出來的系統(tǒng)可能存在這樣那樣的問題,所以設(shè)計(jì)完成后,還應(yīng)查找表中是否帶有大量的并不屬于這個(gè)主題的字段,是否遺忘了字段,多個(gè)表中是否包含了同樣的字段,是否有需要的信息沒包括進(jìn)去,表中是否有些字段由于對(duì)很多記錄不適用而始終保持空白,關(guān)系定義是否正確,等等。只有通過反復(fù)的修改,才能設(shè)計(jì)出一個(gè)完善的數(shù)據(jù)庫系統(tǒng)。在設(shè)計(jì)完成后,就可以創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表了。2.3創(chuàng)建數(shù)據(jù)庫本節(jié)將通過一個(gè)實(shí)例來介紹如何在VisualFoxPro6.0環(huán)境下創(chuàng)建一個(gè)數(shù)據(jù)庫,在創(chuàng)建數(shù)據(jù)庫之前,首先需要設(shè)置工作目錄。VisualFoxPro6.0的系統(tǒng)文件所在的VFP目錄,是其默認(rèn)的工作目錄,如果沒有指定其他的目錄,用戶所建的文件就存放在這個(gè)目錄中,這樣容易和其他文件混淆,不利于管理,因此,在創(chuàng)建數(shù)據(jù)庫之前,最好先設(shè)置一個(gè)工作目錄。例如要將D盤根目錄下的student目錄設(shè)置為工作目錄,方法如下:(1)啟動(dòng)VisualFoxPro6.0。(2)選擇“工具”菜單的“選項(xiàng)”。(3)在“選項(xiàng)”對(duì)話框中選擇“文件位置”標(biāo)簽,選中“默認(rèn)目錄”后點(diǎn)擊“修改”按鈕。(4)選中“使用默認(rèn)目錄”,在“定位默認(rèn)目錄”框中選中“D:/student”,點(diǎn)擊“選中”按鈕。(5)返回“選項(xiàng)”菜單后點(diǎn)擊“確定”按鈕。表2-2課程情況表課稱號(hào)課程名學(xué)時(shí)學(xué)分是否必修任課教師課程簡介028英語12011是劉惠

034高數(shù)1009是章孝斌

078物理908是吳文黎

102程序設(shè)計(jì)605是田峰計(jì)算機(jī)基礎(chǔ)課055數(shù)據(jù)結(jié)構(gòu)504否張浩浩

009體育807是陳靜瀾

087工程化學(xué)403否楊娟工程類基礎(chǔ)課表2-3學(xué)生選課表學(xué)號(hào)課程號(hào)選修學(xué)期成績2001501028176.5200130700918720012030782692001209028174200142105545620015011022832.3.1創(chuàng)建項(xiàng)目文件項(xiàng)目管理器是VisualFoxPro6.0應(yīng)用程序開發(fā)過程中所有對(duì)象與數(shù)據(jù)的控制中心,在創(chuàng)建應(yīng)用程序之前應(yīng)建立一個(gè)項(xiàng)目文件,方法如下:(1)選擇“文件”菜單中的“新建”子菜單。(2)在“文件”菜單中選擇“項(xiàng)目”,按下“新建文件”選項(xiàng)進(jìn)入“創(chuàng)建”對(duì)話框。(3)在“創(chuàng)建”對(duì)話框中直接顯示的是默認(rèn)工作目錄中的內(nèi)容,在“項(xiàng)目文件”處輸入用戶的項(xiàng)目名稱,這里輸入“學(xué)生管理”,按下“保存”按鈕就建立了一個(gè)新的項(xiàng)目文件。在屏幕上會(huì)出現(xiàn)如圖2-1所示的“項(xiàng)目管理器”窗口。圖2-1“項(xiàng)目管理器”窗口2.3.2創(chuàng)建數(shù)據(jù)庫在VisualFoxPro6.0中,如果單獨(dú)使用表,用戶可以存儲(chǔ)和查看信息,但是,如果把若干表組織到一個(gè)數(shù)據(jù)庫中,用戶就可以充分利用VisualFoxPro6.0提供的強(qiáng)大功能存儲(chǔ)一系列的表或視圖,設(shè)置屬性和數(shù)據(jù)驗(yàn)證規(guī)則,在表間建立關(guān)系,使相關(guān)聯(lián)的表協(xié)同工作等。在后面的學(xué)習(xí)中我們會(huì)逐步熟悉它并體會(huì)到它的優(yōu)越性。下面介紹以菜單的方式創(chuàng)建數(shù)據(jù)庫的具體步驟:(1)在項(xiàng)目管理器中選擇“數(shù)據(jù)”選項(xiàng)卡。(2)在“數(shù)據(jù)”選項(xiàng)卡中選擇“數(shù)據(jù)庫”,這時(shí)“文件”選項(xiàng)卡右邊的“新建”和“添加”按鈕由灰變黑。(3)按下“新建”按鈕,出現(xiàn)如圖2-2所示的對(duì)話框。(4)圖2-2中有“數(shù)據(jù)庫向?qū)А焙汀靶陆〝?shù)據(jù)庫”兩個(gè)選項(xiàng),選擇“新建數(shù)據(jù)庫”進(jìn)入數(shù)據(jù)庫創(chuàng)建對(duì)話框,如圖2-3所示。圖2-2新建數(shù)據(jù)庫對(duì)話框圖2-3數(shù)據(jù)庫創(chuàng)建對(duì)話框(5)對(duì)話框中需要確定數(shù)據(jù)庫的類型、名稱、存儲(chǔ)位置等信息,其中數(shù)據(jù)庫的類型就是用默認(rèn)的.dbc類型,存儲(chǔ)位置是用戶創(chuàng)建的默認(rèn)位置,不需要改變,要確定的主要是數(shù)據(jù)庫的名稱,我們?cè)凇皵?shù)據(jù)庫名”處輸入“學(xué)生選課”。(6)單擊“保存”按鈕,進(jìn)入如圖2-4所示的數(shù)據(jù)庫設(shè)計(jì)器畫面,同時(shí)顯示出數(shù)據(jù)庫設(shè)計(jì)器工具欄。圖2-4數(shù)據(jù)庫設(shè)計(jì)器窗口圖2-5工具欄按鈕功能現(xiàn)在,一個(gè)空的數(shù)據(jù)庫文件“學(xué)生選課”已經(jīng)建立完成,單擊“×”返回項(xiàng)目管理器,可以看到剛才建立的“學(xué)生選課”數(shù)據(jù)庫已經(jīng)出現(xiàn)在“項(xiàng)目管理器”窗口中,如圖2-6所示。圖2-6項(xiàng)目管理器中的新建數(shù)據(jù)庫2.4創(chuàng)建數(shù)據(jù)表2.4.1設(shè)置數(shù)據(jù)字段1.字段名(Name)字段名的選取應(yīng)既能體現(xiàn)字段含義,又盡量精練,如“學(xué)生情況表”中的“姓名”字段名。在命名字段時(shí),只能使用字母、下劃線和數(shù)字。

2.字段類型(Type)數(shù)據(jù)庫中可存儲(chǔ)大量豐富的數(shù)據(jù),這些數(shù)據(jù)可以是一段文字、一組數(shù)據(jù)、一個(gè)字符串、一幅圖像或其他信息。當(dāng)把不同類型的數(shù)據(jù)存入表中時(shí),需要告訴數(shù)據(jù)庫系統(tǒng)字段的類型和屬性,這樣系統(tǒng)才能采用相應(yīng)的數(shù)據(jù)處理方法對(duì)數(shù)據(jù)進(jìn)行處理。在VisualFoxPro中可以將字段的數(shù)據(jù)類型設(shè)置為表2-4中的任意一種。表2-4常用的VisualFoxPro字段類型及寬度數(shù)據(jù)類型寬度說

明字符型<254字節(jié)字母、數(shù)字型文本貨幣型固定8字節(jié)貨幣類型數(shù)值,如價(jià)格等數(shù)值型最大20個(gè)字節(jié),小數(shù)位數(shù)最大為19位整數(shù)或小數(shù)浮點(diǎn)型等價(jià)于數(shù)值型字段同“數(shù)值型”日期型固定8字節(jié)年,月,日日期時(shí)間型固定8字節(jié)年,月,日,時(shí),分,秒雙精度型固定8字節(jié)雙精度數(shù)值整型固定4字節(jié)不帶小數(shù)點(diǎn)的數(shù)值邏輯型固定1字節(jié)真或假備注型固定4字節(jié)不定長的字母數(shù)字文本通用型固定4字節(jié)OLE(對(duì)象鏈接與嵌入)(1)字符型(Character)。字符型字段通常用于存儲(chǔ)文本數(shù)據(jù),可以是漢字、字母、數(shù)字、空格、符號(hào)以及標(biāo)點(diǎn)符號(hào)。如“學(xué)生情況表”中的“姓名”、“性別”和“班級(jí)”。也可以使用字符型的字段來存儲(chǔ)數(shù)字,只要這個(gè)數(shù)字不直接進(jìn)行數(shù)值運(yùn)算,比如“學(xué)生情況表”中的“學(xué)號(hào)”字段。字符型的最大寬度為254字節(jié)。(2)貨幣型(Currency)。用來保存貨幣數(shù)值。貨幣型字段的取值范圍是-922337203685477.5808~922337203685477.5807如果貨幣數(shù)值的小數(shù)位數(shù)超過4位,將四舍五入為4位。(3)數(shù)值型(Numeric)。用來存儲(chǔ)數(shù)值數(shù)據(jù),包含數(shù)字0~9,正負(fù)號(hào)和小數(shù)點(diǎn)。通常記錄整數(shù)或者分?jǐn)?shù),它的取值范圍為 .9999999999E+19~.9999999999E+20(4)浮點(diǎn)型(Float)。在功能上與Numeric型相同,其取值范圍為 .9999999999E+19~.9999999999E+20(5)日期型(Date)。用于存儲(chǔ)包含年月日的的日期數(shù)據(jù),其取值范圍為 01/01/100~12/31/9999(6)日期時(shí)間型(DateTime)。用于存儲(chǔ)包含年月日時(shí)分秒的日期和時(shí)間數(shù)據(jù),其取值范圍為年月日:01/01/100~12/31/9999,時(shí)分秒:00:00:00am~11:59:59pm。(7)雙精度型(Double)。用于存儲(chǔ)數(shù)據(jù)精度要求較高,位數(shù)固定的數(shù)值數(shù)據(jù),其取值范圍為±4.94065645841247E-324~±8.9884656743115E+307(8)整型(Integer)。用于整數(shù)存儲(chǔ),其取值范圍為-2147483647~2147483646(9)邏輯型(Logical)。邏輯型字段只有“真”(.T.)與“假”(.F.)的布爾值,用來表示是或否,真或假,成立與不成立等。(10)備注型(Memo)。用來存儲(chǔ)長度不定的文本型數(shù)據(jù)。例如附錄、備注、說明等內(nèi)容,由于其文本數(shù)據(jù)長度無法確定且有可能大于254字節(jié),所以無法使用字符型字段來存儲(chǔ),應(yīng)采用備注型字段。備注型字段的實(shí)際內(nèi)容存儲(chǔ)在與本表名相同的一個(gè)文本數(shù)據(jù)塊中,其擴(kuò)展名為FPT,備注型字段的長度只受可用內(nèi)存大小限制。(11)通用型(General)。通常用于存儲(chǔ)OLE參考對(duì)象連接嵌入,字段寬度為固定的4個(gè)字節(jié),其中存儲(chǔ)了一個(gè)指針,指向該字段的內(nèi)容。OLE通常包括電子表格、字處理文檔、圖像、多媒體對(duì)象等,這些對(duì)象可以用鏈接的方式存儲(chǔ)在表中。在表中實(shí)際占用的存儲(chǔ)空間為4個(gè)字節(jié),其實(shí)際內(nèi)容存儲(chǔ)在與本表名相同、其擴(kuò)展名為FPT的文件中。表中的4個(gè)字節(jié)存放指向該FPT文件的一個(gè)指針(地址信息),其存儲(chǔ)的實(shí)際內(nèi)容大小只受可用內(nèi)存大小的限制。

3.字段寬度每一種數(shù)據(jù)類型都有其規(guī)定的寬度,各個(gè)數(shù)據(jù)類型的寬度見表2-4。對(duì)于寬度固定的數(shù)據(jù)類型,不需要設(shè)置字段寬度,經(jīng)常需要設(shè)置的是字符型字段的寬度。對(duì)于類型為數(shù)值型和浮點(diǎn)型的字段,除了設(shè)定整個(gè)字段的寬度外,在定義時(shí)還應(yīng)在“小數(shù)位數(shù)”欄中設(shè)置小數(shù)的位數(shù)。

4.是否允許為空如果允許某字段接受空值,即NULL值,則選中該項(xiàng)。注意,表的關(guān)鍵字段不允許為空值。下面以“學(xué)生選課”系統(tǒng)為例,將三個(gè)表的字段分別進(jìn)行定義,其中“學(xué)生情況表”的字段類型定義如表2-5所示,“課程情況表”的字段類型定義如表2-6所示,“學(xué)生選課表”的字段類型定義如表2-7所示。表2-5“學(xué)生情況表”的字段類型定義字段名類型寬度(字節(jié))小數(shù)位數(shù)索引是否允許為空學(xué)號(hào)字符10

yesF姓名字符10

F性別字符2

F出生日期日期

F班級(jí)字符12

F聯(lián)系方式字符10

表2-6“課程情況表”的字段類型定義字段名類型寬度(字節(jié))小數(shù)位數(shù)索引是否允許為空課程號(hào)字符8

yesF課程名字符20

F學(xué)時(shí)整型40

F學(xué)分整型40

F是否必修邏輯

F任課教師字符10

F課程簡介字符100

表2-7“學(xué)生選課表”的字段類型定義字段名類型寬度(字節(jié))小數(shù)位數(shù)索引是否允許為空學(xué)號(hào)字符10

yesF課程號(hào)字符8

F選修學(xué)期字符2

F成績數(shù)值51

F2.4.2創(chuàng)建數(shù)據(jù)表在VisualFoxPro6.0中有兩種表,一種是與某一數(shù)據(jù)庫關(guān)聯(lián)的數(shù)據(jù)表,另一種是沒有與任何數(shù)據(jù)庫關(guān)聯(lián)的自由表,下面介紹用表設(shè)計(jì)器創(chuàng)建數(shù)據(jù)表的步驟。(1)在如圖2-1所示的“項(xiàng)目管理器”窗口中,單擊“數(shù)據(jù)”選項(xiàng)卡,選中要添加表的數(shù)據(jù)庫并展開,這里選中“學(xué)生選課”數(shù)據(jù)庫。(2)選中“表”文件對(duì)象,單擊項(xiàng)目管理器右邊的“新建”按鈕,表示在數(shù)據(jù)庫中添加新表,此時(shí)出現(xiàn)如圖2-7所示的“新建表”對(duì)話框,在對(duì)話框中有兩個(gè)按鈕,其中一個(gè)是用向?qū)韯?chuàng)建數(shù)據(jù)表,另一個(gè)表示用設(shè)計(jì)器來創(chuàng)建數(shù)據(jù)表。(3)單擊“新建表”按鈕,進(jìn)入如圖2-8所示的“創(chuàng)建”對(duì)話框,在此確定表的類型名稱和保存位置,其中位置和類型是默認(rèn)的,一般不需要改變,這里主要輸入表的名稱,我們輸入“學(xué)生情況表”。圖2-7“新建表”對(duì)話框圖2-8“創(chuàng)建”對(duì)話框(4)單擊“保存”進(jìn)入如圖2-9所示的“表設(shè)計(jì)器”窗口。圖2-9“表設(shè)計(jì)器”窗口(5)在“表設(shè)計(jì)器”窗口中,單擊“字段”選項(xiàng)卡,然后輸入每個(gè)字段的字段名稱;在“類型”列中,單擊右邊的箭頭,然后從下拉列表中選出合適的類型;在“寬度”列中,設(shè)置以字符為單位的字段寬度,在設(shè)置時(shí),既要考慮到本字段可以取的最大寬度,又不必使字段寬度太寬,否則將占據(jù)大量的空間,如果是數(shù)值型和浮點(diǎn)型數(shù)據(jù),還可設(shè)定小數(shù)寬度;在“索引”列中可以為字段添加索引,即選擇升序或降序的排序方式;如果字段可以為空,點(diǎn)擊NULL處的按鈕即可。(6)當(dāng)所有字段被輸入完后點(diǎn)擊“確定”,彈出對(duì)話框詢問“現(xiàn)在輸入數(shù)據(jù)記錄嗎?”,如果現(xiàn)在要添加記錄,則點(diǎn)擊“是”,這里我們先不輸入記錄,點(diǎn)擊“否”關(guān)閉對(duì)話框。這樣,就創(chuàng)建了“學(xué)生情況表”。2.4.3創(chuàng)建自由表自由表是獨(dú)立于數(shù)據(jù)庫的表,它可以不屬于某個(gè)數(shù)據(jù)庫而單獨(dú)存在。使用自由表可以處理一些簡單的問題,但是對(duì)于復(fù)雜的數(shù)據(jù)系統(tǒng),單一的表是無法表示清楚的,往往需要多張相互關(guān)聯(lián)的表才能真正地描述完整的數(shù)據(jù),這時(shí),自由表的用處就不大了,不過,我們可以將需要的自由表添加到數(shù)據(jù)庫中,自由表一旦添加到數(shù)據(jù)庫中,就將獲得數(shù)據(jù)庫表的所有屬性和操作方法。下面,就來介紹如何創(chuàng)建自由表以及如何將自由表添加到數(shù)據(jù)庫中。

1.創(chuàng)建自由表自由表的創(chuàng)建同樣可以使用表向?qū)Ш捅碓O(shè)計(jì)器,這里主要介紹表設(shè)計(jì)器的使用。表設(shè)計(jì)器是創(chuàng)建新表、設(shè)計(jì)表結(jié)構(gòu)和修改表結(jié)構(gòu)的工具。用表設(shè)計(jì)器創(chuàng)建新表的步驟如下:(1)在圖1-7所示的VFP主窗口中選擇“文件/新建”菜單,在彈出的“新建”對(duì)話框中選擇“表”,然后選擇“新建文件”按鈕,在彈出的“創(chuàng)建”對(duì)話框中選擇要存放的目錄或文件夾,并輸入表名,這里我們輸入“課程情況表”,就會(huì)彈出如圖2-10所示的“表設(shè)計(jì)器”對(duì)話框。(2)選擇“字段”選項(xiàng)卡,在“字段名”列鍵入字段的名稱;在“類型”列選擇列表中的某一字段類型;在“寬度”列設(shè)置以字符為單位的列寬;如果“字段類型”是“數(shù)值型”或“浮點(diǎn)型”,則需設(shè)置“小數(shù)位數(shù)”列中的小數(shù)點(diǎn)位數(shù);如果希望為字段添加索引,請(qǐng)?jiān)凇八饕绷兄羞x擇一種排序方式。(3)定義完字段后,按“確定”按鈕,VFP會(huì)詢問是否“現(xiàn)在輸入數(shù)據(jù)?”,此時(shí),可以選擇立即開始輸入記錄或是在以后準(zhǔn)備好所有記錄后再打開表進(jìn)行輸入。圖2-10“表設(shè)計(jì)器”對(duì)話框

2.將自由表添加到數(shù)據(jù)庫中創(chuàng)建了自由表后,就可以將這個(gè)自由表加入到“學(xué)生選課管理”數(shù)據(jù)庫中。(1)單擊“文件”菜單的“打開”項(xiàng),在出現(xiàn)的對(duì)話框中選擇建好的“學(xué)生選課”數(shù)據(jù)庫。(2)選中“學(xué)生選課”數(shù)據(jù)庫下的“表”,單擊右邊的“添加”按鈕,進(jìn)入“打開”對(duì)話框,在列表文件中選擇剛才建立的“課程情況表”。(3)單擊“確定”按鈕關(guān)閉對(duì)話框,在項(xiàng)目管理器中即可以看到如圖2-11所示的“課程情況表”被添加到“學(xué)生選課”數(shù)據(jù)庫中。當(dāng)自由表添加到數(shù)據(jù)庫中之后,其表設(shè)計(jì)器也變成了數(shù)據(jù)庫表設(shè)計(jì)器,擁有了“標(biāo)題”、“注釋”、“默認(rèn)值”等屬性,這就是自由表與數(shù)據(jù)表的區(qū)別。當(dāng)自由表添加到數(shù)據(jù)庫中后,就可以擁有這些特性。圖2-11“課程情況表”被添加到“學(xué)生選課”數(shù)據(jù)庫中2.5表的操作2.5.1修改表的結(jié)構(gòu)對(duì)于已經(jīng)存在的表,可以利用“表設(shè)計(jì)器”來修改它的結(jié)構(gòu),如增加或刪除字段,設(shè)置字段的數(shù)據(jù)類型和寬度,查看表的內(nèi)容等。下面介紹修改表結(jié)構(gòu)的方法:(1)在“項(xiàng)目管理器”中選中表后單擊“修改”,出現(xiàn)“表設(shè)計(jì)器”對(duì)話框。(2)如果要插入字段,可在表設(shè)計(jì)器中選擇“插入”按鈕,在“字段名”、“字段類型”和“寬度”等位置分別輸入新插入字段的信息。如果要修改字段,可用鼠標(biāo)單擊相應(yīng)位置進(jìn)行修改。如果要?jiǎng)h除某個(gè)字段,可選中該字段后單擊“刪除”按鈕。(3)修改完成后單擊“確定”,系統(tǒng)會(huì)提問“是否永久性地更改表結(jié)構(gòu)?”,回答“是”,即改變了表的結(jié)構(gòu)。2.5.2設(shè)置字段驗(yàn)證規(guī)則對(duì)于表中某些有固定范圍或特定值的字段,通過設(shè)置該字段的驗(yàn)證規(guī)則可以防止輸入非法值。字段驗(yàn)證規(guī)則能夠控制用戶輸入到字段中的信息的類型,以“學(xué)生情況表”中的“性別”字段為例,因?yàn)樾詣e只有“男”或“女”兩種情況,輸入其他的任何值都是不允許的。這時(shí),可以給“性別”字段設(shè)定規(guī)則。在圖2-9所示的“表設(shè)計(jì)器”中選擇“性別”字段為當(dāng)前字段,在“規(guī)則”文本框中輸入:性別=“男”or性別=“女”。以后性別字段只能輸入這兩個(gè)值,假設(shè)用戶在“性別”字段誤輸入“南”,當(dāng)回車準(zhǔn)備離開該字段時(shí),系統(tǒng)會(huì)給出錯(cuò)誤警告:“違反了字段性別的有效性規(guī)則”,須按下確定后重新輸入正確值。2.5.3打開表當(dāng)數(shù)據(jù)表剛剛被建立后,會(huì)自動(dòng)處于打開狀態(tài),除非使用“關(guān)閉”命令關(guān)閉它。關(guān)閉后,或者在下一次運(yùn)行時(shí),可以使用“文件”下拉菜單中的“打開”命令或者“常用”工具欄中的“打開”按鈕打開它,對(duì)于已經(jīng)處于打開狀態(tài)的表,通過“顯示”下拉菜單即可進(jìn)行瀏覽。在操作數(shù)據(jù)表之前,首先要打開表,打開表的方式有兩種,一是用“瀏覽”方式打開表,二是用“編輯”方式打開表,下面分別予以介紹。

1.用“瀏覽”方式打開表如果希望打開表后在每行顯示一條記錄,每列顯示一個(gè)字段,就應(yīng)該在“瀏覽”窗口中打開表。(1)在“項(xiàng)目管理器”中單擊選中要打開的數(shù)據(jù)表。(2)單擊“瀏覽“按鈕。這時(shí)VisualFoxPro6.0將用“瀏覽”或者“編輯”方式打開表,當(dāng)?shù)谝淮未蜷_一個(gè)新建的表時(shí),默認(rèn)進(jìn)入的是“瀏覽”窗口,對(duì)于已經(jīng)存在的表,打開的方式取決于上次關(guān)閉表時(shí)是“瀏覽”還是“編輯”方式。(3)如果打開的窗口不是“瀏覽”窗口,則單擊“顯示”菜單選中“瀏覽”方式。用瀏覽方式打開表的顯示如圖2-12所示。圖2-12用瀏覽方式打開的“學(xué)生情況表”

2.用編輯方式打開表用編輯方式打開的表使用一條分割線將每條記錄分隔開來,在顯示每條記錄時(shí),字段是按照縱向排列的。(1)在“項(xiàng)目管理器”窗口中單擊選中要打開的數(shù)據(jù)表。(2)單擊“瀏覽“按鈕。這時(shí)VisualFoxPro6.0將用“瀏覽”或者“編輯”方式打開表,對(duì)于第一次打開一個(gè)新建的表時(shí),默認(rèn)進(jìn)入的是“瀏覽”窗口,對(duì)于已經(jīng)存在的表,打開的方式取決于上次關(guān)閉表時(shí)是“瀏覽”還是“編輯”方式。(3)如果打開的窗口不是“編輯”窗口,則單擊“顯示”菜單選中“編輯”方式。用編輯方式打開表的顯示如圖2-13所示。圖2-13用編輯方式打開的“學(xué)生情況表”由以上步驟可以看出,這兩種打開方式只是在模式上有所不同,在“瀏覽”方式下,“瀏覽”窗口中的各“字段”名稱與數(shù)據(jù)記錄是分行顯示的,而在“編輯”方式下則以列的形式顯示。但是,無論在哪一種方式下,“瀏覽”窗口中都會(huì)提供水平與垂直兩個(gè)滾動(dòng)條,通過拖動(dòng)它們可觀察到那些在當(dāng)前窗口中沒有顯示出來的部分記錄。什么時(shí)候使用哪一種方式完全是個(gè)人習(xí)慣與愛好問題,在“瀏覽”方式下可以使用網(wǎng)格線,這將有利于清晰地觀察數(shù)據(jù)記錄,更適用于各字段長度差別不大的情況;而在“編輯”方式下,各行記錄會(huì)集中顯示在一起,也有利于觀察。2.5.4在表中添加記錄設(shè)計(jì)好數(shù)據(jù)表結(jié)構(gòu)后,就可以在表中添加記錄了。記錄的輸入可以在設(shè)計(jì)表的時(shí)候進(jìn)行,也可以在表創(chuàng)建好后在“瀏覽”方式或“編輯”方式下進(jìn)行。若想在表中快速加入新記錄,可以將“瀏覽”窗口設(shè)置為“追加”方式,方法是選擇“顯示/追加方式”命令。在“追加”方式中,文件底部顯示了一組空字段,可以在其中填入內(nèi)容來建立新記錄。每完成一條記錄,在文件底端會(huì)出現(xiàn)該記錄,此方式適于批量數(shù)據(jù)的錄入。若只需添加一條記錄,可以選擇“表/追加新記錄”菜單。在表中輸入記錄時(shí),需要注意的一點(diǎn)是,通用型字段的輸入方式和普通字段的輸入方式在操作上有所不同。輸入通用型字段的步驟如下:(1)遇到通用型字段錄入時(shí),雙擊該字段,進(jìn)入如圖2-14所示的輸入通用型字段窗口。圖2-14輸入通用型字段(2)選擇“編輯”菜單中的“插入對(duì)象”命令,彈出“插入對(duì)象”對(duì)話框,插入的對(duì)象可以是各種格式的圖片文件。(3)如果文件不存在,則選中“新建”,并在“對(duì)象類型”中選擇一種文件格式后單擊“確定”。這時(shí)VisualFoxPro6.0就會(huì)啟動(dòng)相應(yīng)的應(yīng)用程序,用戶可以在此使用這些應(yīng)用程序創(chuàng)建對(duì)象。(4)如果文件已經(jīng)存在,則選中“由文件創(chuàng)建”,系統(tǒng)將進(jìn)入文件選擇窗口,選中所需文件后,單擊“確定”返回錄入窗口。(5)在錄入窗口中點(diǎn)擊“確定”,這樣就把圖片輸入到了數(shù)據(jù)表中。如圖2-15所示。圖2-15數(shù)據(jù)表中的通用型字段2.5.5設(shè)置記錄驗(yàn)證規(guī)則除了對(duì)字段設(shè)置驗(yàn)證規(guī)則,還可以對(duì)記錄設(shè)定驗(yàn)證規(guī)則。記錄的驗(yàn)證規(guī)則可以控制輸入到記錄中的數(shù)據(jù),通常用來比較同一記錄中兩個(gè)或多個(gè)字段的值,以確保它們遵守一定的規(guī)則。例如若“學(xué)生情況表”有“入學(xué)日期”這一字段,那么,“入學(xué)日期”的值肯定大于“出生日期”,在數(shù)據(jù)錄入時(shí)有可能不小心把這兩個(gè)日期搞顛倒而發(fā)生輸入錯(cuò)誤,這時(shí),可以設(shè)置記錄級(jí)的驗(yàn)證規(guī)則,避免這種錯(cuò)誤的發(fā)生。與字段驗(yàn)證規(guī)則不同,記錄驗(yàn)證規(guī)則是當(dāng)記錄的值被改變后,記錄指針準(zhǔn)備離開該記錄時(shí)被激活的。記錄驗(yàn)證規(guī)則的設(shè)定比較簡單,在“學(xué)生情況表”的表設(shè)計(jì)器中,選擇“表”選項(xiàng)卡,在“規(guī)則”框中,輸入如下一行代碼:入學(xué)日期>=出生日期。以后,在輸入數(shù)據(jù)時(shí),假設(shè)輸入了錯(cuò)誤的數(shù)據(jù),當(dāng)記錄指針要移動(dòng)到另一條記錄時(shí),系統(tǒng)就會(huì)給出警告。修改“出生日期”或“入學(xué)日期”,使之符合“記錄驗(yàn)證規(guī)則”后,就可以將記錄指針移到其他記錄上了。2.5.6查看表的內(nèi)容查看表的內(nèi)容的最快方法是使用“瀏覽”窗口?!盀g覽”窗口中顯示的內(nèi)容是由一系列可以滾動(dòng)的行和列組成的。打開“瀏覽”窗口后,可以定制“瀏覽”窗口及其功能,這些功能包括改變外觀、篩選表和限制字段訪問等?!盀g覽”窗口使用起來非常方便,使用滾動(dòng)條、箭頭鍵和“Tab”鍵可以來回移動(dòng)表,顯示表中不同的字段和記錄;瀏覽器的外觀還可以通過改變行高、改變列寬、移動(dòng)列等操作來改變,其操作如下:(1)改變行高。在行標(biāo)頭處,將鼠標(biāo)移至第一、二條記錄之間的分隔線處,直到鼠標(biāo)變成上下形狀的箭頭,這時(shí)可按住鼠標(biāo)左鍵拖動(dòng)改變整個(gè)瀏覽器的記錄的行高。(2)改變列寬。在列標(biāo)頭處,將鼠標(biāo)移至兩個(gè)字段之間的分隔線處,直到鼠標(biāo)變成左右形狀的箭頭,這時(shí)可按住鼠標(biāo)左鍵拖動(dòng)改變左邊字段的列寬,注意這里改變的是字段的顯示寬度,不影響字段結(jié)構(gòu)的長度。(3)移動(dòng)列。將鼠標(biāo)指向要移動(dòng)列的列頭,這時(shí)鼠標(biāo)變?yōu)橄蛳碌募^,可以通過拖動(dòng)列頭將列移動(dòng)到新的位置上,從而改變字段的顯示順序,但不影響字段在表結(jié)構(gòu)中的順序。(4)打開和關(guān)閉網(wǎng)格線。在VisualFoxPro6.0的“瀏覽”窗口中,顯示的表是用網(wǎng)格線將每個(gè)記錄和字段分隔開來的,網(wǎng)格線的實(shí)現(xiàn)與取消可以通過“顯示”菜單的“網(wǎng)格線”命令來設(shè)置。此外,“瀏覽”窗口還有其他的一些功能,如拖動(dòng)窗口底部的分割條可以將窗口分為用“編輯”和“瀏覽”兩種不同方式顯示的兩部分;可以直接用鼠標(biāo)單擊刪除標(biāo)記區(qū)給記錄打上刪除標(biāo)記;通過菜單還可以對(duì)窗口進(jìn)行更多的控制,當(dāng)有表被打開并在“瀏覽”窗口顯示時(shí),系統(tǒng)的“顯示”菜單條自動(dòng)增添了一些新的菜單項(xiàng),并在菜單欄上出現(xiàn)“表”菜單條,這些菜單條集中了對(duì)表和“瀏覽”窗口的操作。2.5.7修改記錄中的字段值表中字段值的修改是非常簡單的,在“瀏覽”窗口或“編輯”窗口中,找到欲修改的字段值所在的單元格,直接把光標(biāo)移到單元格中并編輯信息,或者選定整個(gè)單元格并鍵入新的信息。若要編輯“備注型”字段,可以在“瀏覽”窗口中雙擊該字段或按下“Ctrl+PgDn”鍵,這時(shí)會(huì)打開一個(gè)“編輯”窗口,可在其中修改、添加“備注型”字段的內(nèi)容。在編輯任意字段后,如果光標(biāo)退出該字段,則VisualFoxPro6.0會(huì)自動(dòng)保存所作的更改。在光標(biāo)退出之前,還可以單擊工具欄上的“撤銷”按鈕來撤銷本次操作。2.5.8刪除和還原記錄1.刪除記錄刪除操作是表的常見操作之一,對(duì)于過時(shí)或者錯(cuò)誤的記錄可以將它刪除,從而保證數(shù)據(jù)表的正確性和有效性。刪除表中的記錄有兩種方法,一種是直接在表中刪除,另外一種是利用刪除對(duì)話框來刪除。直接在表中刪除比較簡單,在“瀏覽”窗口中,每條記錄前的小方塊就是記錄的刪除標(biāo)記,在“瀏覽”窗口中單擊每個(gè)要?jiǎng)h除記錄左邊的刪除標(biāo)記,當(dāng)標(biāo)記變黑后,表示系統(tǒng)不能對(duì)這些記錄進(jìn)行操作了,但是,被標(biāo)記過的記錄并未從磁盤上消失,用戶還可以將其還原。要想真正刪除記錄,應(yīng)選擇“表/徹底刪除”命令,這將刪除所有標(biāo)記過的記錄,并關(guān)閉“瀏覽”窗口。這種方式用于簡單的刪除個(gè)別記錄,對(duì)于多條記錄的刪除和根據(jù)條件來刪除記錄是很難實(shí)現(xiàn)的,這時(shí)就要采用“刪除”對(duì)話框來刪除記錄。用“刪除”對(duì)話框來刪除記錄的步驟如下:(1)在“瀏覽”窗口中打開要?jiǎng)h除記錄的表。(2)在“表”菜單中選擇“刪除記錄”命令,出現(xiàn)如圖2-16所示的“刪除”對(duì)話框。(3)在“刪除”對(duì)話框中,設(shè)置要?jiǎng)h除的記錄。在“作用范圍”下拉列表中可以選擇“All”、“Next”、“Record”和“Rest”,分別代表全部記錄、下幾條記錄、第幾條記錄和其余記錄幾種刪除范圍。當(dāng)選擇“Next”、“Record”時(shí),還需輸入數(shù)字來明確作用范圍?!癛est”是指當(dāng)前光標(biāo)所在位置后的記錄,即當(dāng)前記錄后的其余記錄。圖2-16(4)在“For”框中輸入邏輯表達(dá)式來定義刪除的條件,可以直接在此輸入表達(dá)式,還可以單擊右邊的“...”按鈕來生成邏輯表達(dá)式,以確定要?jiǎng)h除的記錄應(yīng)滿足的條件?!氨磉_(dá)式生成器”對(duì)話框如圖2-17所示。圖2-17“表達(dá)式生成器”對(duì)話框(5)利用生成器構(gòu)造表達(dá)式。在函數(shù)框中可以選擇使用相應(yīng)的函數(shù),圖2-17使用了日期函數(shù)中的YEAR()和DATE()函數(shù),構(gòu)造了年齡大于21歲的學(xué)生的條件表達(dá)式。單擊“確定”后,可以看到,滿足刪除條件的記錄已經(jīng)在瀏覽器中被打上了刪除標(biāo)記。無論是直接從表中刪除記錄還是設(shè)置刪除條件刪除記錄,都只是給要?jiǎng)h除的記錄打上了刪除標(biāo)記;徹底刪除表中的記錄,要選擇“表”菜單中的“徹底刪除”,這時(shí),會(huì)彈出一個(gè)菜單詢問是否要從表中刪除記錄,回答“是”就會(huì)從磁盤上徹底刪除記錄。刪除后將自動(dòng)關(guān)閉“瀏覽”窗口,并重新構(gòu)造剩余的記錄。注意,這個(gè)操作一定要慎重,因?yàn)楸粡氐讋h除的記錄是無法恢復(fù)的。

2.還原記錄只是打上刪除標(biāo)記而沒有徹底刪除的記錄是可以隨時(shí)被還原的。還原時(shí)在“瀏覽”窗口中用鼠標(biāo)點(diǎn)擊刪除標(biāo)記即可,也可以用“表”菜單中的“恢復(fù)記錄”來還原滿足條件的記錄。恢復(fù)記錄操作與刪除記錄類似,在此不再贅述。2.6索引的創(chuàng)建和使用建立索引是加快表的查詢速度的有效手段。當(dāng)我們需要在一本書中查找某些信息時(shí),往往首先通過目錄找到所需信息的對(duì)應(yīng)頁碼,然后再從該頁碼中找出所需要的信息,這種做法比直接翻閱書的內(nèi)容速度要快。如果把數(shù)據(jù)表比作一本書,則表的索引就是這本書的目錄,可以通過索引大大加快表的查詢速度。在基本表上可以建立一個(gè)或多個(gè)索引,以提供多種存取路徑,加快查找速度??梢岳盟饕龑?duì)其中的數(shù)據(jù)進(jìn)行排序來指定記錄顯示的先后順序。排序的方法有升序和降序兩種。用戶可以對(duì)字符型、日期型、貨幣型、日期和時(shí)間型、雙精度型、浮點(diǎn)型、數(shù)值型和整型的字段進(jìn)行排序,但不能對(duì)邏輯型、通用型和備注型的字段進(jìn)行排序。建立索引后將改變記錄的順序,以便加快檢索數(shù)據(jù)的速度。用索引可以快速顯示、查詢或者打印記錄,還可以選擇記錄,控制重復(fù)字段值的輸入并支持表間的關(guān)系操作。為了使用戶可以快速準(zhǔn)確地查找信息,應(yīng)該根據(jù)數(shù)據(jù)表中某些字段的值,為數(shù)據(jù)表建立一個(gè)索引文件,表的索引文件是一個(gè)記錄號(hào)的列表,它指向待處理的記錄,并確定了記錄的處理順序,該順序稱為邏輯順序。索引并不改變表中所存儲(chǔ)記錄的物理順序,它只改變了VFP讀取每條記錄的順序。在建立索引的時(shí)候,可以按一個(gè)字段建立索引,也可以指定一個(gè)索引表達(dá)式,還可以為一個(gè)表建立多個(gè)索引,每一索引代表一種處理記錄的順序,以便在需要的時(shí)候使用不同的順序來訪問表。索引保存在一個(gè)復(fù)合結(jié)構(gòu)的索引文件中,在使用表時(shí),該文件被打開并更新,索引文件名與相關(guān)的表同名,并具有.CDX擴(kuò)展名。索引文件中存儲(chǔ)的是按照某字段或者表達(dá)式排列的一組記錄號(hào),每個(gè)記錄號(hào)指向表中的一條記錄,可以理解為按照某一字段或者表達(dá)式進(jìn)行邏輯排列的一組指針,如圖2-18就是在“學(xué)生情況表”中建立的幾個(gè)索引。在按照索引重新排列數(shù)據(jù)表中顯示的記錄時(shí),系統(tǒng)將按照指針的順序來讀取記錄,但這些記錄在數(shù)據(jù)表中的存儲(chǔ)位置并未改變。由于建立索引的方法很簡單,用戶也許想為每個(gè)字段建立一個(gè)索引。但是,不常用的索引會(huì)降低程序的執(zhí)行速度,所以應(yīng)該只給那些經(jīng)常使用的字段建立索引。在VisualFoxPro6.0中可以建立以下四種類型的索引:(1)主索引(也稱為聚簇索引)。可確保字段中輸入值的唯一性,并決定了記錄的處理順序,在主索引中字段值不能重復(fù)。在創(chuàng)建數(shù)據(jù)庫時(shí),除了紐帶表以外,一般應(yīng)根據(jù)主關(guān)鍵字給每一個(gè)表建立主索引(注意不能給自由表建立主索引)。圖2-18“學(xué)生情況表”中建立的索引(2)候選索引。與主索引類似,也保證表中索引值的記錄是唯一的。因?yàn)橐粋€(gè)表只能建立一個(gè)主索引,所以當(dāng)要建立多個(gè)不允許有重復(fù)值的索引時(shí),可以將這些索引作為候選索引,同一個(gè)表允許建立多個(gè)候選索引。(3)普通索引。同樣可以決定記錄的順序,但是允許表中有重復(fù)索引值的記錄。在根據(jù)普通索引排序或查詢記錄時(shí),系統(tǒng)將列出所有符合條件的記錄。在一個(gè)表中可以加入多條普通索引。(4)唯一索引。允許表中索引值的記錄不唯一,但只有第一個(gè)有相同索引關(guān)鍵字值的記錄有效。這是為兼容舊版本而保留的一種形式。現(xiàn)在通過建立查詢或視圖也可實(shí)現(xiàn)同樣的功能。下面以學(xué)生情況表為例來建立索引:(1)在項(xiàng)目管理器中打開“學(xué)生情況表”,點(diǎn)擊右邊的“修改”按鈕,進(jìn)入“表設(shè)計(jì)器”對(duì)話框。(2)在“表設(shè)計(jì)器”對(duì)話框中單擊“索引”選項(xiàng)卡,出現(xiàn)如圖2-18所示的對(duì)話框。(3)單擊上下箭頭可以決定排序的方式是升序還是降序,在索引名框中輸入索引名“學(xué)號(hào)”,索引名只能用數(shù)字、字母和下劃線,且長度不超過10個(gè)字符。(4)定義完索引名后,在“類型”列表中選擇索引類型,這里選擇“主索引”?!氨磉_(dá)式”列的值可以是從數(shù)據(jù)表中選擇的字段,也可以是由字段變量組成的表達(dá)式。輸入表達(dá)式時(shí)可以使用表達(dá)式生成器,選擇適當(dāng)?shù)暮瘮?shù)來生成表達(dá)式,圖2-18所示的索引名為“年齡”的索引,就是由YEAR(DATE())-YEAR(出生日期)作為索引表達(dá)式的。同樣可以在“篩選”框處建立篩選表達(dá)式。(5)索引定義完后,單擊“確定”按鈕,將出現(xiàn)一個(gè)對(duì)話框詢問是否永久地更改表結(jié)構(gòu),回答“是”,這時(shí)系統(tǒng)關(guān)閉“表設(shè)計(jì)器”窗口,并把設(shè)置的索引永久地保存在表結(jié)構(gòu)中。表中的每一個(gè)索引代表一種排序方法,這些索引都保存在同一個(gè)索引文件中,這種索引文件稱為復(fù)合結(jié)構(gòu)索引文件。在“項(xiàng)目管理器”窗口中選中“學(xué)生情況表”,單擊左側(cè)的“+”號(hào),就可以看到每一個(gè)索引,如圖2-19所示。在表中如果建立了主索引或者候選索引,在錄入數(shù)據(jù)記錄時(shí),系統(tǒng)會(huì)自動(dòng)驗(yàn)證唯一性,如果出現(xiàn)重復(fù),系統(tǒng)會(huì)提示用戶。圖2-19創(chuàng)建的索引出現(xiàn)在數(shù)據(jù)表中2.7建立和編輯表之間的關(guān)系2.7.1創(chuàng)建表間關(guān)系在“數(shù)據(jù)庫設(shè)計(jì)器”中可以通過索引來方便地建立數(shù)據(jù)表之間的關(guān)系。在創(chuàng)建表關(guān)系之前,相互關(guān)聯(lián)的表要建立一些公共字段和索引,這些字段一般為主關(guān)鍵字字段和外部關(guān)鍵字字段。其中主關(guān)鍵字用來標(biāo)識(shí)主表中的某一特定記錄,即主記錄,外部關(guān)鍵字段用于標(biāo)識(shí)相關(guān)表中的相關(guān)記錄。應(yīng)該搞清楚相關(guān)的表中哪個(gè)表包含主記錄,哪個(gè)表包含相關(guān)記錄,然后在相應(yīng)的表中分別建立主索引和普通索引。在包含主記錄的表中應(yīng)根據(jù)主關(guān)鍵字建立主索引,在包含相關(guān)記錄的表中根據(jù)外部關(guān)鍵字段建立一個(gè)普通索引。如果相關(guān)的表中沒有外部關(guān)鍵字段,還要添加一個(gè)外部關(guān)鍵字段,外部關(guān)鍵字段通??珊椭麝P(guān)鍵字段同名,其數(shù)據(jù)類型必須和主關(guān)鍵字字段匹配。下面以“學(xué)生選課”管理系統(tǒng)為例來建立一個(gè)關(guān)系。在“學(xué)生選課”管理系統(tǒng)數(shù)據(jù)庫中,“學(xué)生情況表”與“學(xué)生選課表”具有一對(duì)多的關(guān)系,即一個(gè)學(xué)生可以選多門課。因此,“學(xué)生情況表”應(yīng)包含主記錄,“學(xué)生選課表”包含相關(guān)記錄,兩表通過“學(xué)號(hào)”保持關(guān)聯(lián)。在建立表之間的永久關(guān)系之前,需要為表創(chuàng)建索引,按前面介紹的建立索引的方法,為“學(xué)生情況表”中的“學(xué)號(hào)”建立一個(gè)主索引,為“學(xué)生選課表”表中的“學(xué)號(hào)”建立一個(gè)普通索引。建好索引后,回到“數(shù)據(jù)庫設(shè)計(jì)器”,在“學(xué)生情況表”的“學(xué)號(hào)”索引標(biāo)識(shí)上按下左鍵不放,拖動(dòng)到“學(xué)生選課表”的“學(xué)號(hào)”索引標(biāo)識(shí)上,釋放鼠標(biāo)按鈕,在數(shù)據(jù)庫設(shè)計(jì)器中,可以看到兩個(gè)表的索引標(biāo)識(shí)之間有一條黑線相連接,表示出這兩個(gè)表之間的永久關(guān)系,如果沒有出現(xiàn)這條黑線,可以打開數(shù)據(jù)庫的“屬性”對(duì)話框,選擇“關(guān)系”選項(xiàng)就可以了。這里所創(chuàng)建的關(guān)系的類型是由相關(guān)表中所用的索引決定的,如果相關(guān)表的索引為主索引或候選索引,則創(chuàng)建的關(guān)系為一對(duì)一索引;如果相關(guān)表中的索引為唯一索引或普通索引,則為一對(duì)多的關(guān)系。本例中創(chuàng)建的是如圖2-20所示的一對(duì)多的關(guān)系。圖2-20數(shù)據(jù)表間的一對(duì)多關(guān)系創(chuàng)建了表間的關(guān)系后,就可以用這些關(guān)系在多個(gè)數(shù)據(jù)表間進(jìn)行查詢、視圖、表單和報(bào)表的設(shè)計(jì)。表關(guān)系使表之間既相互依賴,又相互制約,利用表關(guān)系還可以防止非法數(shù)據(jù)的輸入和修改,可以避免發(fā)生重大的錯(cuò)誤,保證系統(tǒng)的有效性和一致性。建立關(guān)系后也可以根據(jù)需要來進(jìn)行編輯。2.7.2編輯表間關(guān)系編輯表之間的關(guān)系主要包括關(guān)系的刪除、修改和編輯關(guān)系的參照完整性。編輯關(guān)系的步驟如下:(1)在“數(shù)據(jù)庫設(shè)計(jì)器”中雙擊表關(guān)系連線,將出現(xiàn)如圖2-21所示的“編輯關(guān)系”對(duì)話框。圖2-21“編輯關(guān)系”對(duì)話框(2)在對(duì)話框中可以重新選擇建立關(guān)系的主索引和普通索引,只要單擊表和相關(guān)表組合框右邊的箭頭,從中重新選擇主索引和普通索引即可,也可以點(diǎn)擊“參照完整性”來設(shè)置關(guān)系屬性。如果要?jiǎng)h除關(guān)系,只需在“數(shù)據(jù)庫設(shè)計(jì)器”中單擊表的關(guān)系線,這時(shí)關(guān)系線變粗,按下鍵盤上的“Del”鍵即可。在關(guān)系型數(shù)據(jù)庫中,由于表之間彼此相關(guān),當(dāng)修改和編輯任意數(shù)據(jù)表時(shí),它們之間的關(guān)系就可能會(huì)發(fā)生變化。例如,如果在父表中刪除了一條記錄,則當(dāng)子表中有相關(guān)的記錄時(shí),這些記錄就成了孤立的記錄;當(dāng)在父表中修改了索引關(guān)鍵字的值,如在“學(xué)生情況表”中修改了“學(xué)號(hào)”值,那么還需要修改子表中相應(yīng)記錄的關(guān)鍵字值,否則就會(huì)產(chǎn)生錯(cuò)誤,反過來也一樣;在子表中增加記錄時(shí),如果所增加記錄的關(guān)鍵字值是父表中沒有的,則增加在子表中的記錄也成了孤立的記錄。這些情況的出現(xiàn),都會(huì)破壞關(guān)系表的完整性。在VisualFoxpro6.0中可以通過建立參照完整性,讓系統(tǒng)自動(dòng)完成這些工作,防止這些問題的出現(xiàn)。所謂參照完整性,就是利用相關(guān)表之間的制約關(guān)系,互相參照,控制相關(guān)表數(shù)據(jù)的完整性。例如在“學(xué)生選課”管理系統(tǒng)中的“學(xué)生情況表”(學(xué)號(hào),姓名,性別等)和“學(xué)生選課表”(學(xué)號(hào),課程號(hào),成績等),在對(duì)“學(xué)生選課表”輸入或編輯數(shù)據(jù)時(shí),其“學(xué)號(hào)”字段出現(xiàn)的值必須是“學(xué)生情況表”中存在的學(xué)生學(xué)號(hào),這時(shí),我們可以利用參照完整性規(guī)則對(duì)相關(guān)的表作以下限制:(1)不能追

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論