版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第2章 數(shù)據(jù)庫(kù)的建立與維護(hù),2.1 數(shù)據(jù)表2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)2.3 創(chuàng)建數(shù)據(jù)庫(kù) 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ù)庫(kù)的基本元素之一,是數(shù)據(jù)庫(kù)中組織并存儲(chǔ)數(shù)據(jù)的單元。在Visual FoxPro中,數(shù)據(jù)庫(kù)可由多個(gè)數(shù)據(jù)表組成,從用戶實(shí)際使用的角度來(lái)看,關(guān)系模型的邏輯結(jié)構(gòu)是一張二維表,它由行和列
2、組成。關(guān)系模式對(duì)應(yīng)一個(gè)二維表的表頭。關(guān)系(Relationship)對(duì)應(yīng)通常所說(shuō)的二維表,如表2-1所示的學(xué)生情況表。其中每一列指明學(xué)生的一種屬性,屬性的名稱如學(xué)號(hào)、姓名、性別等在每一列的頂端標(biāo)出,每一行則給出某個(gè)學(xué)生的具體屬性值。,表2-1 學(xué) 生 情 況 表,數(shù)據(jù)表中的一行稱為一條記錄(Record)或一個(gè)元組,表示了數(shù)據(jù)表中一組相關(guān)聯(lián)的信息。數(shù)據(jù)表中的一列稱為一個(gè)字段(Field),字段反映了某個(gè)主題的信息,數(shù)據(jù)表字段的取值范圍
3、稱為域(Domain),如性別的域是(男,女),所在班級(jí)的域是一個(gè)學(xué)校所有班級(jí)名的集合等。,關(guān)系數(shù)據(jù)庫(kù)要求關(guān)系中的每一個(gè)元組具有唯一性,即關(guān)系中沒(méi)有相同的元組。因此,對(duì)于關(guān)系中的某一個(gè)屬性或?qū)傩越M,若它的值能唯一地標(biāo)識(shí)出一個(gè)元組,則稱該屬性或?qū)傩越M為候選鍵(Candidate key)。在一個(gè)關(guān)系中可能有多個(gè)候選鍵,可選擇其中的一個(gè)作為主鍵(Primary key),也稱為關(guān)鍵字。在一個(gè)關(guān)系中只能有一個(gè)主鍵。假設(shè)表2-1所示的學(xué)生情況表
4、中沒(méi)有同姓名學(xué)生,則學(xué)號(hào)和姓名都分別是該關(guān)系的候選鍵,可以取學(xué)號(hào)作為主鍵。,數(shù)據(jù)庫(kù)可包含多個(gè)數(shù)據(jù)表,每一個(gè)數(shù)據(jù)表對(duì)應(yīng)一組相關(guān)主題信息。例如學(xué)生選課數(shù)據(jù)庫(kù)系統(tǒng)可以包含學(xué)生情況數(shù)據(jù)表、課程情況數(shù)據(jù)表和學(xué)生選課數(shù)據(jù)表等,這幾個(gè)表之間是相對(duì)獨(dú)立又相互關(guān)聯(lián)的。關(guān)系數(shù)據(jù)庫(kù)的關(guān)系就體現(xiàn)為二維數(shù)據(jù)表的結(jié)構(gòu)及表之間的聯(lián)系。它允許用戶不僅能從當(dāng)前選定表中訪問(wèn)數(shù)據(jù),而且可以通過(guò)當(dāng)前選定表訪問(wèn)其他表中的數(shù)據(jù)。在某個(gè)關(guān)系R中可能有這樣一組屬性A,它不是關(guān)系R的主
5、鍵,但它是另一個(gè)關(guān)系S的主鍵,則屬性組A稱為關(guān)系R的外鍵(Foreign key)。,,2.2 數(shù) 據(jù) 庫(kù) 設(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é)生的選修課程成績(jī)檔案,對(duì)學(xué)生
6、的選修課成績(jī)進(jìn)行管理統(tǒng)計(jì)。為了方便管理,要求建立相應(yīng)的計(jì)算機(jī)數(shù)據(jù)庫(kù)管理系統(tǒng)。,2. 確定數(shù)據(jù)表 經(jīng)過(guò)細(xì)致地調(diào)查和分析,在明確了建立數(shù)據(jù)庫(kù)的目的、內(nèi)容和處理方式之后,就可以著手把信息分成獨(dú)立的主題,每個(gè)主題對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一個(gè)表。例如對(duì)于上述管理學(xué)生選課的系統(tǒng)來(lái)說(shuō),可以建立“學(xué)生情況表”、“課程情況表”和“學(xué)生選課表”三個(gè)表。,3. 確定所需字段、字段類型和其他屬性 確定了數(shù)據(jù)庫(kù)中所包含的表后,還應(yīng)該根據(jù)表中
7、所包含的信息項(xiàng)確定表的字段。例如,在學(xué)生情況表中,可以建立 “學(xué)號(hào)”、“姓名”、“性別”等字段。字段的建立應(yīng)該考慮既能描述主題信息,又能體現(xiàn)數(shù)據(jù)表之間的關(guān)系且盡量避免冗余。 Visual Foxpro 6.0是一個(gè)關(guān)系型的數(shù)據(jù)庫(kù)管理系統(tǒng),可以利用表之間的關(guān)系來(lái)迅速查找存儲(chǔ)在多個(gè)表中的信息,并可將這些信息組合在一起。根據(jù)主關(guān)鍵字的定義,如果姓名存在重復(fù)值,則只有“學(xué)號(hào)”可以作為其主關(guān)鍵字,因?yàn)楦鶕?jù)“姓名”或“性別”是無(wú)法唯
8、一確定某一條記錄的。在Visual Foxpro 6.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)鍵字的值來(lái)查找記錄,主關(guān)鍵字的長(zhǎng)度直接影響數(shù)據(jù)庫(kù)的操作速度。因此,在創(chuàng)建主關(guān)鍵字時(shí),該字段值最好使用能滿足存儲(chǔ)要求的最小長(zhǎng)度,
9、所以它不能太長(zhǎng),以方便記憶和鍵入。,4. 確定表之間關(guān)系 對(duì)于學(xué)生選課的管理系統(tǒng)來(lái)說(shuō),假設(shè)已經(jīng)設(shè)計(jì)了“學(xué)生情況表”、“課程情況表”和“學(xué)生選課表”三個(gè)表。目前這些表相對(duì)孤立,盡管這些表之間存在著種種關(guān)系,但是計(jì)算機(jī)不會(huì)自動(dòng)把它們聯(lián)系起來(lái),需要人為地在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候設(shè)定表之間的關(guān)系。在Visual FoxPro 6.0中,表之間有三種關(guān)系:一對(duì)一關(guān)系、一對(duì)多關(guān)系和多對(duì)多關(guān)系。 在一對(duì)一關(guān)系中如果兩個(gè)表有相同
10、的主題,可在兩個(gè)表中使用同樣的主關(guān)鍵字字段,并以此建立一對(duì)一關(guān)系。如果兩個(gè)表有不同的主題及不同的主關(guān)鍵字,可以選擇其中任意一個(gè)表,把它的主關(guān)鍵字放到另一個(gè)表中作為外部關(guān)鍵字。,一對(duì)多關(guān)系是關(guān)系型數(shù)據(jù)庫(kù)中最普遍的關(guān)系,在一對(duì)多的關(guān)系中,一個(gè)表(表1)中的記錄在另一個(gè)表(表2)中可以有多條記錄與之對(duì)應(yīng),而表2中的一條記錄最多只能與表1中的一條記錄對(duì)應(yīng)。例如“學(xué)生情況表”和“學(xué)生選課表”,由于一個(gè)學(xué)生可以選多門課程,所以在“學(xué)生情況表”中的一
11、條記錄可以對(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ù)庫(kù)的設(shè)
12、計(jì),即創(chuàng)建第三個(gè)表,把多對(duì)多關(guān)系分解為兩個(gè)一對(duì)多關(guān)系。這第三個(gè)表稱作"紐帶表",紐帶表可能只包含這兩個(gè)表的主關(guān)鍵字,也可能包含其他信息。,5. 對(duì)所設(shè)計(jì)的表分析 在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),由于信息的復(fù)雜和情況的不同,使得設(shè)計(jì)出來(lái)的系統(tǒng)可能存在這樣那樣的問(wèn)題,所以設(shè)計(jì)完成后,還應(yīng)查找表中是否帶有大量的并不屬于這個(gè)主題的字段,是否遺忘了字段,多個(gè)表中是否包含了同樣的字段,是否有需要的信息沒(méi)包括進(jìn)去,表中是否有些字段
13、由于對(duì)很多記錄不適用而始終保持空白,關(guān)系定義是否正確,等等。只有通過(guò)反復(fù)的修改,才能設(shè)計(jì)出一個(gè)完善的數(shù)據(jù)庫(kù)系統(tǒng)。在設(shè)計(jì)完成后,就可以創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表了。,,2.3 創(chuàng) 建 數(shù) 據(jù) 庫(kù),本節(jié)將通過(guò)一個(gè)實(shí)例來(lái)介紹如何在Visual FoxPro 6.0環(huán)境下創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),在創(chuàng)建數(shù)據(jù)庫(kù)之前,首先需要設(shè)置工作目錄。 Visual FoxPro 6.0的系統(tǒng)文件所在的VFP目錄,是其默認(rèn)的工作目錄,如果沒(méi)有指定其他的目錄,用
14、戶所建的文件就存放在這個(gè)目錄中,這樣容易和其他文件混淆,不利于管理,因此,在創(chuàng)建數(shù)據(jù)庫(kù)之前,最好先設(shè)置一個(gè)工作目錄。,例如要將D盤根目錄下的student目錄設(shè)置為工作目錄,方法如下: (1) 啟動(dòng)Visual FoxPro 6.0。 (2) 選擇“工具”菜單的“選項(xiàng)”。 (3) 在“選項(xiàng)”對(duì)話框中選擇“文件位置”標(biāo)簽,選中“默認(rèn)目錄”后點(diǎn)擊“修改”按鈕。 (4) 選中“使
15、用默認(rèn)目錄”,在“定位默認(rèn)目錄”框中選中“D:/student”,點(diǎn)擊“選中”按鈕。 (5) 返回“選項(xiàng)”菜單后點(diǎn)擊“確定”按鈕。,表2-2 課 程 情 況 表,表2-3 學(xué) 生 選 課 表,2.3.1 創(chuàng)建項(xiàng)目文件 項(xiàng)目管理器是Visual FoxPro 6.0應(yīng)用程序開(kāi)發(fā)過(guò)程中所有對(duì)象與數(shù)據(jù)的控制中心,在創(chuàng)建應(yīng)用程序之前應(yīng)建立一個(gè)項(xiàng)目文件,方法如下: (1) 選擇“文件”菜單中的
16、“新建”子菜單。 (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ù)庫(kù) 在Visual Fox
17、Pro 6.0中,如果單獨(dú)使用表,用戶可以存儲(chǔ)和查看信息,但是,如果把若干表組織到一個(gè)數(shù)據(jù)庫(kù)中,用戶就可以充分利用Visual FoxPro 6.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ù)庫(kù)的具體步驟: (1) 在項(xiàng)目管理器中選擇“數(shù)據(jù)”選項(xiàng)卡。 (2) 在“數(shù)據(jù)”選
18、項(xiàng)卡中選擇“數(shù)據(jù)庫(kù)”,這時(shí)“文件”選項(xiàng)卡右邊的“新建”和“添加”按鈕由灰變黑。 (3) 按下“新建”按鈕,出現(xiàn)如圖2-2所示的對(duì)話框。 (4) 圖2-2中有“數(shù)據(jù)庫(kù)向?qū)А焙汀靶陆〝?shù)據(jù)庫(kù)”兩個(gè)選項(xiàng),選擇“新建數(shù)據(jù)庫(kù)”進(jìn)入數(shù)據(jù)庫(kù)創(chuàng)建對(duì)話框,如圖2-3所示。,圖2-2 新建數(shù)據(jù)庫(kù)對(duì)話框,圖2-3 數(shù)據(jù)庫(kù)創(chuàng)建對(duì)話框,(5) 對(duì)話框中需要確定數(shù)據(jù)庫(kù)的類型、名稱、存儲(chǔ)位置等信息,其中數(shù)據(jù)庫(kù)的類型就是用默認(rèn)的.
19、dbc類型,存儲(chǔ)位置是用戶創(chuàng)建的默認(rèn)位置,不需要改變,要確定的主要是數(shù)據(jù)庫(kù)的名稱,我們?cè)凇皵?shù)據(jù)庫(kù)名”處輸入“學(xué)生選課”。 (6) 單擊“保存”按鈕,進(jìn)入如圖2-4所示的數(shù)據(jù)庫(kù)設(shè)計(jì)器畫面,同時(shí)顯示出數(shù)據(jù)庫(kù)設(shè)計(jì)器工具欄。,圖2-4 數(shù)據(jù)庫(kù)設(shè)計(jì)器窗口,圖2-5 工具欄按鈕功能,現(xiàn)在,一個(gè)空的數(shù)據(jù)庫(kù)文件“學(xué)生選課”已經(jīng)建立完成,單擊“×”返回項(xiàng)目管理器,可以看到剛才建立的“學(xué)生選課”數(shù)據(jù)庫(kù)已經(jīng)出現(xiàn)在“項(xiàng)目管理器”
20、窗口中,如圖2-6所示。,圖2-6 項(xiàng)目管理器中的新建數(shù)據(jù)庫(kù),,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ù)庫(kù)中可存儲(chǔ)大量豐富的數(shù)據(jù),這些數(shù)據(jù)可以是一段文字、一組數(shù)據(jù)、一個(gè)字符串、一幅圖像或其他信
21、息。當(dāng)把不同類型的數(shù)據(jù)存入表中時(shí),需要告訴數(shù)據(jù)庫(kù)系統(tǒng)字段的類型和屬性,這樣系統(tǒng)才能采用相應(yīng)的數(shù)據(jù)處理方法對(duì)數(shù)據(jù)進(jìn)行處理。在Visual FoxPro中可以將字段的數(shù)據(jù)類型設(shè)置為表2-4中的任意一種。,表2-4 常用的Visual FoxPro字段類型及寬度,(1) 字符型(Character)。字符型字段通常用于存儲(chǔ)文本數(shù)據(jù),可以是漢字、字母、數(shù)字、空格、符號(hào)以及標(biāo)點(diǎn)符號(hào)。如“學(xué)生情況表”中的“姓名”、“性別”和“班級(jí)”。也可以使用字
22、符型的字段來(lái)存儲(chǔ)數(shù)字,只要這個(gè)數(shù)字不直接進(jìn)行數(shù)值運(yùn)算,比如“學(xué)生情況表”中的“學(xué)號(hào)”字段。字符型的最大寬度為254字節(jié)。 (2) 貨幣型(Currency)。用來(lái)保存貨幣數(shù)值。貨幣型字段的取值范圍是 -922 337 203 685 477.5808~ 922 337 203 685 477.5807如果貨幣數(shù)值的小數(shù)位數(shù)超過(guò)4位,將四舍五入為4位。,(3) 數(shù)值型(Numeric)。用來(lái)存儲(chǔ)數(shù)值數(shù)據(jù)
23、,包含數(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 (
24、6) 日期時(shí)間型(DateTime)。用于存儲(chǔ)包含年月日時(shí)分秒的日期和時(shí)間數(shù)據(jù),其取值范圍為年月日:01/01/100~ 12/31/9999,時(shí)分秒:00:00:00 am~ 11:59:59 pm。,(7) 雙精度型(Double)。用于存儲(chǔ)數(shù)據(jù)精度要求較高,位數(shù)固定的數(shù)值數(shù)據(jù),其取值范圍為±4.94065645841247E-324 ~ ±8.9884656743115E+307 (8) 整型
25、(Integer)。用于整數(shù)存儲(chǔ),其取值范圍為-2 147 483 647 ~ 2 147 483 646 (9) 邏輯型(Logical)。邏輯型字段只有“真”(.T.)與“假”(.F.)的布爾值,用來(lái)表示是或否,真或假,成立與不成立等。,(10) 備注型(Memo)。用來(lái)存儲(chǔ)長(zhǎng)度不定的文本型數(shù)據(jù)。例如附錄、備注、說(shuō)明等內(nèi)容,由于其文本數(shù)據(jù)長(zhǎng)度無(wú)法確定且有可能大于254字節(jié),所以無(wú)法使用字符型字段來(lái)存儲(chǔ),應(yīng)采用備注
26、型字段。備注型字段的實(shí)際內(nèi)容存儲(chǔ)在與本表名相同的一個(gè)文本數(shù)據(jù)塊中,其擴(kuò)展名為FPT,備注型字段的長(zhǎng)度只受可用內(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的文件
27、中。表中的4個(gè)字節(jié)存放指向該FPT文件的一個(gè)指針(地址信息),其存儲(chǔ)的實(shí)際內(nèi)容大小只受可用內(nèi)存大小的限制。,3. 字段寬度 每一種數(shù)據(jù)類型都有其規(guī)定的寬度,各個(gè)數(shù)據(jù)類型的寬度見(jiàn)表2-4。對(duì)于寬度固定的數(shù)據(jù)類型,不需要設(shè)置字段寬度,經(jīng)常需要設(shè)置的是字符型字段的寬度。對(duì)于類型為數(shù)值型和浮點(diǎn)型的字段,除了設(shè)定整個(gè)字段的寬度外,在定義時(shí)還應(yīng)在“小數(shù)位數(shù)”欄中設(shè)置小數(shù)的位數(shù)。,4. 是否允許為空 如果允許某字段接受
28、空值,即NULL值,則選中該項(xiàng)。注意,表的關(guān)鍵字段不允許為空值。 下面以“學(xué)生選課”系統(tǒng)為例,將三個(gè)表的字段分別進(jìn)行定義,其中“學(xué)生情況表”的字段類型定義如表2-5所示,“課程情況表”的字段類型定義如表2-6所示,“學(xué)生選課表”的字段類型定義如表2-7所示。,表2-5 “學(xué)生情況表”的字段類型定義,表2-6 “課程情況表”的字段類型定義,表2-7 “學(xué)生選課表”的字段類型定義,2.4.2 創(chuàng)建數(shù)據(jù)表
29、 在Visual FoxPro 6.0中有兩種表,一種是與某一數(shù)據(jù)庫(kù)關(guān)聯(lián)的數(shù)據(jù)表,另一種是沒(méi)有與任何數(shù)據(jù)庫(kù)關(guān)聯(lián)的自由表,下面介紹用表設(shè)計(jì)器創(chuàng)建數(shù)據(jù)表的步驟。 (1) 在如圖2-1所示的“項(xiàng)目管理器”窗口中,單擊“數(shù)據(jù)”選項(xiàng)卡,選中要添加表的數(shù)據(jù)庫(kù)并展開(kāi),這里選中“學(xué)生選課”數(shù)據(jù)庫(kù)。,(2) 選中“表”文件對(duì)象,單擊項(xiàng)目管理器右邊的“新建”按鈕,表示在數(shù)據(jù)庫(kù)中添加新表,此時(shí)出現(xiàn)如圖2-7所示的“新建表”對(duì)話框,在對(duì)話框中
30、有兩個(gè)按鈕,其中一個(gè)是用向?qū)?lái)創(chuàng)建數(shù)據(jù)表,另一個(gè)表示用設(shè)計(jì)器來(lái)創(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è)
31、計(jì)器”窗口中,單擊“字段”選項(xiàng)卡,然后輸入每個(gè)字段的字段名稱;在“類型”列中,單擊右邊的箭頭,然后從下拉列表中選出合適的類型;在“寬度”列中,設(shè)置以字符為單位的字段寬度,在設(shè)置時(shí),既要考慮到本字段可以取的最大寬度,又不必使字段寬度太寬,否則將占據(jù)大量的空間,如果是數(shù)值型和浮點(diǎn)型數(shù)據(jù),還可設(shè)定小數(shù)寬度;在“索引”列中可以為字段添加索引,即選擇升序或降序的排序方式;如果字段可以為空,點(diǎn)擊NULL處的按鈕即可。 (6) 當(dāng)所有字
32、段被輸入完后點(diǎn)擊“確定”,彈出對(duì)話框詢問(wèn)“現(xiàn)在輸入數(shù)據(jù)記錄嗎?”,如果現(xiàn)在要添加記錄,則點(diǎn)擊“是”,這里我們先不輸入記錄,點(diǎn)擊“否”關(guān)閉對(duì)話框。這樣,就創(chuàng)建了“學(xué)生情況表”。,2.4.3 創(chuàng)建自由表 自由表是獨(dú)立于數(shù)據(jù)庫(kù)的表,它可以不屬于某個(gè)數(shù)據(jù)庫(kù)而單獨(dú)存在。使用自由表可以處理一些簡(jiǎn)單的問(wèn)題,但是對(duì)于復(fù)雜的數(shù)據(jù)系統(tǒng),單一的表是無(wú)法表示清楚的,往往需要多張相互關(guān)聯(lián)的表才能真正地描述完整的數(shù)據(jù),這時(shí),自由表的用處就不大了,
33、不過(guò),我們可以將需要的自由表添加到數(shù)據(jù)庫(kù)中,自由表一旦添加到數(shù)據(jù)庫(kù)中,就將獲得數(shù)據(jù)庫(kù)表的所有屬性和操作方法。下面,就來(lái)介紹如何創(chuàng)建自由表以及如何將自由表添加到數(shù)據(jù)庫(kù)中。,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主窗口中選擇“文件/
34、新建”菜單,在彈出的“新建”對(duì)話框中選擇“表”,然后選擇“新建文件”按鈕,在彈出的“創(chuàng)建”對(duì)話框中選擇要存放的目錄或文件夾,并輸入表名,這里我們輸入“課程情況表”,就會(huì)彈出如圖2-10所示的“表設(shè)計(jì)器”對(duì)話框。,(2) 選擇“字段”選項(xiàng)卡,在“字段名”列鍵入字段的名稱;在“類型”列選擇列表中的某一字段類型;在“寬度”列設(shè)置以字符為單位的列寬;如果“字段類型”是“數(shù)值型”或“浮點(diǎn)型”,則需設(shè)置“小數(shù)位數(shù)”列中的小數(shù)點(diǎn)位數(shù);如果希望為字段添
35、加索引,請(qǐng)?jiān)凇八饕绷兄羞x擇一種排序方式。 (3) 定義完字段后,按“確定”按鈕,VFP會(huì)詢問(wèn)是否“現(xiàn)在輸入數(shù)據(jù)?”,此時(shí),可以選擇立即開(kāi)始輸入記錄或是在以后準(zhǔn)備好所有記錄后再打開(kāi)表進(jìn)行輸入。,圖2-10 “表設(shè)計(jì)器”對(duì)話框,2. 將自由表添加到數(shù)據(jù)庫(kù)中 創(chuàng)建了自由表后,就可以將這個(gè)自由表加入到“學(xué)生選課管理”數(shù)據(jù)庫(kù)中。 (1) 單擊“文件”菜單的“打開(kāi)”項(xiàng),在出現(xiàn)的對(duì)話框中選擇建好的“
36、學(xué)生選課”數(shù)據(jù)庫(kù)。 (2) 選中“學(xué)生選課”數(shù)據(jù)庫(kù)下的“表”,單擊右邊的“添加”按鈕,進(jìn)入“打開(kāi)”對(duì)話框,在列表文件中選擇剛才建立的“課程情況表”。,(3) 單擊“確定”按鈕關(guān)閉對(duì)話框,在項(xiàng)目管理器中即可以看到如圖2-11所示的“課程情況表”被添加到“學(xué)生選課”數(shù)據(jù)庫(kù)中。當(dāng)自由表添加到數(shù)據(jù)庫(kù)中之后,其表設(shè)計(jì)器也變成了數(shù)據(jù)庫(kù)表設(shè)計(jì)器,擁有了“標(biāo)題”、“注釋”、“默認(rèn)值”等屬性,這就是自由表與數(shù)據(jù)表的區(qū)別。當(dāng)自由表添加到數(shù)據(jù)
37、庫(kù)中后,就可以擁有這些特性。,圖2-11 “課程情況表”被添加到“學(xué)生選課”數(shù)據(jù)庫(kù)中,,2.5 表 的 操 作,2.5.1 修改表的結(jié)構(gòu) 對(duì)于已經(jīng)存在的表,可以利用“表設(shè)計(jì)器”來(lái)修改它的結(jié)構(gòu),如增加或刪除字段,設(shè)置字段的數(shù)據(jù)類型和寬度,查看表的內(nèi)容等。下面介紹修改表結(jié)構(gòu)的方法: (1) 在“項(xiàng)目管理器”中選中表后單擊“修改”,出現(xiàn)“表設(shè)計(jì)器”對(duì)話框。,(2) 如果要插入字段,可在表設(shè)計(jì)器中選擇“插入
38、”按鈕,在“字段名”、“字段類型”和“寬度”等位置分別輸入新插入字段的信息。如果要修改字段,可用鼠標(biāo)單擊相應(yīng)位置進(jìn)行修改。如果要?jiǎng)h除某個(gè)字段,可選中該字段后單擊“刪除”按鈕。 (3) 修改完成后單擊“確定”,系統(tǒng)會(huì)提問(wèn)“是否永久性地更改表結(jié)構(gòu)?”,回答“是”,即改變了表的結(jié)構(gòu)。,2.5.2 設(shè)置字段驗(yàn)證規(guī)則 對(duì)于表中某些有固定范圍或特定值的字段,通過(guò)設(shè)置該字段的驗(yàn)證規(guī)則可以防止輸入非法值。字段驗(yàn)證規(guī)則
39、能夠控制用戶輸入到字段中的信息的類型,以“學(xué)生情況表”中的“性別”字段為例,因?yàn)樾詣e只有“男”或“女”兩種情況,輸入其他的任何值都是不允許的。這時(shí),可以給“性別”字段設(shè)定規(guī)則。在圖2-9所示的“表設(shè)計(jì)器”中選擇“性別”字段為當(dāng)前字段,在“規(guī)則”文本框中輸入:性別=“男”or性別=“女”。以后性別字段只能輸入這兩個(gè)值,假設(shè)用戶在“性別”字段誤輸入“南”,當(dāng)回車準(zhǔn)備離開(kāi)該字段時(shí),系統(tǒng)會(huì)給出錯(cuò)誤警告:“違反了字段性別的有效性規(guī)則”,須按下確定
40、后重新輸入正確值。,2.5.3 打開(kāi)表 當(dāng)數(shù)據(jù)表剛剛被建立后,會(huì)自動(dòng)處于打開(kāi)狀態(tài),除非使用“關(guān)閉”命令關(guān)閉它。關(guān)閉后,或者在下一次運(yùn)行時(shí),可以使用“文件”下拉菜單中的“打開(kāi)”命令或者“常用”工具欄中的“打開(kāi)”按鈕打開(kāi)它,對(duì)于已經(jīng)處于打開(kāi)狀態(tài)的表,通過(guò)“顯示”下拉菜單即可進(jìn)行瀏覽。 在操作數(shù)據(jù)表之前,首先要打開(kāi)表,打開(kāi)表的方式有兩種,一是用“瀏覽”方式打開(kāi)表,二是用“編輯”方式打開(kāi)表,下面分別予以介紹。
41、,1. 用“瀏覽”方式打開(kāi)表 如果希望打開(kāi)表后在每行顯示一條記錄,每列顯示一個(gè)字段,就應(yīng)該在“瀏覽”窗口中打開(kāi)表。 (1) 在“項(xiàng)目管理器”中單擊選中要打開(kāi)的數(shù)據(jù)表。 (2) 單擊“瀏覽“按鈕。這時(shí)Visual FoxPro 6.0 將用“瀏覽”或者“編輯”方式打開(kāi)表,當(dāng)?shù)谝淮未蜷_(kāi)一個(gè)新建的表時(shí),默認(rèn)進(jìn)入的是“瀏覽”窗口,對(duì)于已經(jīng)存在的表,打開(kāi)的方式取決于上次關(guān)閉表時(shí)是“瀏覽”還是“編輯”
42、方式。 (3) 如果打開(kāi)的窗口不是“瀏覽”窗口,則單擊“顯示”菜單選中“瀏覽”方式。用瀏覽方式打開(kāi)表的顯示如圖2-12所示。,圖2-12 用瀏覽方式打開(kāi)的“學(xué)生情況表”,2. 用編輯方式打開(kāi)表 用編輯方式打開(kāi)的表使用一條分割線將每條記錄分隔開(kāi)來(lái),在顯示每條記錄時(shí),字段是按照縱向排列的。 (1) 在“項(xiàng)目管理器”窗口中單擊選中要打開(kāi)的數(shù)據(jù)表。 (2) 單擊“瀏覽“按鈕。這時(shí)
43、Visual FoxPro 6.0 將用“瀏覽”或者“編輯”方式打開(kāi)表,對(duì)于第一次打開(kāi)一個(gè)新建的表時(shí),默認(rèn)進(jìn)入的是“瀏覽”窗口,對(duì)于已經(jīng)存在的表,打開(kāi)的方式取決于上次關(guān)閉表時(shí)是“瀏覽”還是“編輯”方式。 (3) 如果打開(kāi)的窗口不是“編輯”窗口,則單擊“顯示”菜單選中“編輯”方式。用編輯方式打開(kāi)表的顯示如圖2-13所示。,圖2-13 用編輯方式打開(kāi)的“學(xué)生情況表”,由以上步驟可以看出,這兩種打開(kāi)方式只是在模式上有所不同,
44、在“瀏覽”方式下,“瀏覽”窗口中的各“字段”名稱與數(shù)據(jù)記錄是分行顯示的,而在“編輯”方式下則以列的形式顯示。但是,無(wú)論在哪一種方式下,“瀏覽”窗口中都會(huì)提供水平與垂直兩個(gè)滾動(dòng)條,通過(guò)拖動(dòng)它們可觀察到那些在當(dāng)前窗口中沒(méi)有顯示出來(lái)的部分記錄。什么時(shí)候使用哪一種方式完全是個(gè)人習(xí)慣與愛(ài)好問(wèn)題,在“瀏覽”方式下可以使用網(wǎng)格線,這將有利于清晰地觀察數(shù)據(jù)記錄,更適用于各字段長(zhǎng)度差別不大的情況;而在“編輯”方式下,各行記錄會(huì)集中顯示在一起,也有利于觀察
45、。,2.5.4 在表中添加記錄 設(shè)計(jì)好數(shù)據(jù)表結(jié)構(gòu)后,就可以在表中添加記錄了。記錄的輸入可以在設(shè)計(jì)表的時(shí)候進(jìn)行,也可以在表創(chuàng)建好后在“瀏覽”方式或“編輯”方式下進(jìn)行。若想在表中快速加入新記錄,可以將“瀏覽”窗口設(shè)置為“追加”方式,方法是選擇“顯示/追加方式”命令。在“追加”方式中,文件底部顯示了一組空字段,可以在其中填入內(nèi)容來(lái)建立新記錄。每完成一條記錄,在文件底端會(huì)出現(xiàn)該記錄,此方式適于批量數(shù)據(jù)的錄入。若只需添加一條記錄
46、,可以選擇“表/追加新記錄”菜單。 在表中輸入記錄時(shí),需要注意的一點(diǎn)是,通用型字段的輸入方式和普通字段的輸入方式在操作上有所不同。輸入通用型字段的步驟如下:,(1) 遇到通用型字段錄入時(shí),雙擊該字段,進(jìn)入如圖2-14所示的輸入通用型字段窗口。,圖2-14 輸入通用型字段,(2) 選擇“編輯”菜單中的“插入對(duì)象”命令,彈出“插入對(duì)象”對(duì)話框,插入的對(duì)象可以是各種格式的圖片文件。 (3) 如果文件不存在,則
47、選中“新建”,并在“對(duì)象類型”中選擇一種文件格式后單擊“確定”。這時(shí)Visual FoxPro 6.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
48、.5 設(shè)置記錄驗(yàn)證規(guī)則 除了對(duì)字段設(shè)置驗(yàn)證規(guī)則,還可以對(duì)記錄設(shè)定驗(yàn)證規(guī)則。記錄的驗(yàn)證規(guī)則可以控制輸入到記錄中的數(shù)據(jù),通常用來(lái)比較同一記錄中兩個(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)記錄
49、的值被改變后,記錄指針準(zhǔn)備離開(kāi)該記錄時(shí)被激活的。,記錄驗(yàn)證規(guī)則的設(shè)定比較簡(jiǎn)單,在“學(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)容的最快方
50、法是使用“瀏覽”窗口?!盀g覽”窗口中顯示的內(nèi)容是由一系列可以滾動(dòng)的行和列組成的。打開(kāi)“瀏覽”窗口后,可以定制“瀏覽”窗口及其功能,這些功能包括改變外觀、篩選表和限制字段訪問(wèn)等。 “瀏覽”窗口使用起來(lái)非常方便,使用滾動(dòng)條、箭頭鍵和“Tab”鍵可以來(lái)回移動(dòng)表,顯示表中不同的字段和記錄;瀏覽器的外觀還可以通過(guò)改變行高、改變列寬、移動(dòng)列等操作來(lái)改變,其操作如下:,(1) 改變行高。在行標(biāo)頭處,將鼠標(biāo)移至第一、二條記錄之間的分隔線處
51、,直到鼠標(biāo)變成上下形狀的箭頭,這時(shí)可按住鼠標(biāo)左鍵拖動(dòng)改變整個(gè)瀏覽器的記錄的行高。 (2) 改變列寬。在列標(biāo)頭處,將鼠標(biāo)移至兩個(gè)字段之間的分隔線處,直到鼠標(biāo)變成左右形狀的箭頭,這時(shí)可按住鼠標(biāo)左鍵拖動(dòng)改變左邊字段的列寬,注意這里改變的是字段的顯示寬度,不影響字段結(jié)構(gòu)的長(zhǎng)度。,(3) 移動(dòng)列。將鼠標(biāo)指向要移動(dòng)列的列頭,這時(shí)鼠標(biāo)變?yōu)橄蛳碌募^,可以通過(guò)拖動(dòng)列頭將列移動(dòng)到新的位置上,從而改變字段的顯示順序,但不影響字段在表結(jié)構(gòu)中
52、的順序。,(4) 打開(kāi)和關(guān)閉網(wǎng)格線。在Visual FoxPro 6.0的“瀏覽”窗口中,顯示的表是用網(wǎng)格線將每個(gè)記錄和字段分隔開(kāi)來(lái)的,網(wǎng)格線的實(shí)現(xiàn)與取消可以通過(guò)“顯示”菜單的“網(wǎng)格線”命令來(lái)設(shè)置。 此外,“瀏覽”窗口還有其他的一些功能,如拖動(dòng)窗口底部的分割條可以將窗口分為用“編輯”和“瀏覽”兩種不同方式顯示的兩部分;可以直接用鼠標(biāo)單擊刪除標(biāo)記區(qū)給記錄打上刪除標(biāo)記;通過(guò)菜單還可以對(duì)窗口進(jìn)行更多的控制,當(dāng)有表被打開(kāi)并在“瀏
53、覽”窗口顯示時(shí),系統(tǒng)的“顯示”菜單條自動(dòng)增添了一些新的菜單項(xiàng),并在菜單欄上出現(xiàn)“表”菜單條,這些菜單條集中了對(duì)表和“瀏覽”窗口的操作。,2.5.7 修改記錄中的字段值 表中字段值的修改是非常簡(jiǎn)單的,在“瀏覽”窗口或“編輯”窗口中,找到欲修改的字段值所在的單元格,直接把光標(biāo)移到單元格中并編輯信息,或者選定整個(gè)單元格并鍵入新的信息。若要編輯“備注型”字段,可以在“瀏覽”窗口中雙擊該字段或按下“Ctrl+PgDn”鍵,這時(shí)會(huì)
54、打開(kāi)一個(gè)“編輯”窗口,可在其中修改、添加“備注型”字段的內(nèi)容。在編輯任意字段后,如果光標(biāo)退出該字段,則Visual FoxPro 6.0會(huì)自動(dòng)保存所作的更改。在光標(biāo)退出之前,還可以單擊工具欄上的“撤銷”按鈕來(lái)撤銷本次操作。,2.5.8 刪除和還原記錄 1. 刪除記錄 刪除操作是表的常見(jiàn)操作之一,對(duì)于過(guò)時(shí)或者錯(cuò)誤的記錄可以將它刪除,從而保證數(shù)據(jù)表的正確性和有效性。 刪除表中的記錄有兩種方
55、法,一種是直接在表中刪除,另外一種是利用刪除對(duì)話框來(lái)刪除。,直接在表中刪除比較簡(jiǎn)單,在“瀏覽”窗口中,每條記錄前的小方塊就是記錄的刪除標(biāo)記,在“瀏覽”窗口中單擊每個(gè)要?jiǎng)h除記錄左邊的刪除標(biāo)記,當(dāng)標(biāo)記變黑后,表示系統(tǒng)不能對(duì)這些記錄進(jìn)行操作了,但是,被標(biāo)記過(guò)的記錄并未從磁盤上消失,用戶還可以將其還原。要想真正刪除記錄,應(yīng)選擇“表/徹底刪除”命令,這將刪除所有標(biāo)記過(guò)的記錄,并關(guān)閉“瀏覽”窗口。這種方式用于簡(jiǎn)單的刪除個(gè)別記錄,對(duì)于多條記錄的刪除和
56、根據(jù)條件來(lái)刪除記錄是很難實(shí)現(xiàn)的,這時(shí)就要采用“刪除”對(duì)話框來(lái)刪除記錄。用“刪除”對(duì)話框來(lái)刪除記錄的步驟如下:,(1) 在“瀏覽”窗口中打開(kāi)要?jiǎng)h除記錄的表。 (2) 在“表”菜單中選擇“刪除記錄”命令,出現(xiàn)如圖2-16所示的“刪除”對(duì)話框。 (3) 在“刪除”對(duì)話框中,設(shè)置要?jiǎng)h除的記錄。在“作用范圍”下拉列表中可以選擇“All”、“Next”、“Record”和“Rest”,分別代表全部記錄、下幾條記錄、第幾
57、條記錄和其余記錄幾種刪除范圍。當(dāng)選擇“Next”、“Record”時(shí),還需輸入數(shù)字來(lái)明確作用范圍?!癛est”是指當(dāng)前光標(biāo)所在位置后的記錄,即當(dāng)前記錄后的其余記錄。,圖2-16,(4) 在“For”框中輸入邏輯表達(dá)式來(lái)定義刪除的條件,可以直接在此輸入表達(dá)式,還可以單擊右邊的“...”按鈕來(lái)生成邏輯表達(dá)式,以確定要?jiǎng)h除的記錄應(yīng)滿足的條件?!氨磉_(dá)式生成器”對(duì)話框如圖2-17所示。,圖2-17 “表達(dá)式生成器”
58、對(duì)話框,(5) 利用生成器構(gòu)造表達(dá)式。在函數(shù)框中可以選擇使用相應(yīng)的函數(shù),圖2-17使用了日期函數(shù)中的YEAR()和DATE()函數(shù),構(gòu)造了年齡大于21歲的學(xué)生的條件表達(dá)式。單擊“確定”后,可以看到,滿足刪除條件的記錄已經(jīng)在瀏覽器中被打上了刪除標(biāo)記。 無(wú)論是直接從表中刪除記錄還是設(shè)置刪除條件刪除記錄,都只是給要?jiǎng)h除的記錄打上了刪除標(biāo)記;徹底刪除表中的記錄,要選擇“表”菜單中的“徹底刪除”,這時(shí),會(huì)彈出一個(gè)菜單詢問(wèn)是否要從表
59、中刪除記錄,回答“是”就會(huì)從磁盤上徹底刪除記錄。刪除后將自動(dòng)關(guān)閉“瀏覽”窗口,并重新構(gòu)造剩余的記錄。注意,這個(gè)操作一定要慎重,因?yàn)楸粡氐讋h除的記錄是無(wú)法恢復(fù)的。,2. 還原記錄 只是打上刪除標(biāo)記而沒(méi)有徹底刪除的記錄是可以隨時(shí)被還原的。還原時(shí)在“瀏覽”窗口中用鼠標(biāo)點(diǎn)擊刪除標(biāo)記即可,也可以用“表”菜單中的“恢復(fù)記錄”來(lái)還原滿足條件的記錄?;謴?fù)記錄操作與刪除記錄類似,在此不再贅述。,2.6 索引的創(chuàng)建和使用,建立索引是加快表的
60、查詢速度的有效手段。當(dāng)我們需要在一本書中查找某些信息時(shí),往往首先通過(guò)目錄找到所需信息的對(duì)應(yīng)頁(yè)碼,然后再?gòu)脑擁?yè)碼中找出所需要的信息,這種做法比直接翻閱書的內(nèi)容速度要快。如果把數(shù)據(jù)表比作一本書,則表的索引就是這本書的目錄,可以通過(guò)索引大大加快表的查詢速度。,在基本表上可以建立一個(gè)或多個(gè)索引,以提供多種存取路徑,加快查找速度??梢岳盟饕龑?duì)其中的數(shù)據(jù)進(jìn)行排序來(lái)指定記錄顯示的先后順序。排序的方法有升序和降序兩種。用戶可以對(duì)字符型、日期型、貨幣型
61、、日期和時(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)的列表,它指向待處理的記錄,并確定了記錄的處理順序,該順序稱為邏輯順
62、序。索引并不改變表中所存儲(chǔ)記錄的物理順序,它只改變了VFP讀取每條記錄的順序。在建立索引的時(shí)候,可以按一個(gè)字段建立索引,也可以指定一個(gè)索引表達(dá)式,還可以為一個(gè)表建立多個(gè)索引,每一索引代表一種處理記錄的順序,以便在需要的時(shí)候使用不同的順序來(lái)訪問(wèn)表。索引保存在一個(gè)復(fù)合結(jié)構(gòu)的索引文件中,在使用表時(shí),該文件被打開(kāi)并更新,索引文件名與相關(guān)的表同名,并具有 .CDX擴(kuò)展名。,索引文件中存儲(chǔ)的是按照某字段或者表達(dá)式排列的一組記錄號(hào),每個(gè)記錄號(hào)指向表中
63、的一條記錄,可以理解為按照某一字段或者表達(dá)式進(jìn)行邏輯排列的一組指針,如圖2-18就是在“學(xué)生情況表”中建立的幾個(gè)索引。在按照索引重新排列數(shù)據(jù)表中顯示的記錄時(shí),系統(tǒng)將按照指針的順序來(lái)讀取記錄,但這些記錄在數(shù)據(jù)表中的存儲(chǔ)位置并未改變。 由于建立索引的方法很簡(jiǎn)單,用戶也許想為每個(gè)字段建立一個(gè)索引。但是,不常用的索引會(huì)降低程序的執(zhí)行速度,所以應(yīng)該只給那些經(jīng)常使用的字段建立索引。在Visual FoxPro 6.0中可以建立以下四
64、種類型的索引:,(1) 主索引(也稱為聚簇索引)??纱_保字段中輸入值的唯一性,并決定了記錄的處理順序,在主索引中字段值不能重復(fù)。在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),除了紐帶表以外,一般應(yīng)根據(jù)主關(guān)鍵字給每一個(gè)表建立主索引(注意不能給自由表建立主索引)。,圖2-18 “學(xué)生情況表”中建立的索引,(2) 候選索引。與主索引類似,也保證表中索引值的記錄是唯一的。因?yàn)橐粋€(gè)表只能建立一個(gè)主索引,所以當(dāng)要建立多個(gè)不允許有重復(fù)值的索引時(shí),可以將這些索引作為候選索引,同一
65、個(gè)表允許建立多個(gè)候選索引。 (3) 普通索引。同樣可以決定記錄的順序,但是允許表中有重復(fù)索引值的記錄。在根據(jù)普通索引排序或查詢記錄時(shí),系統(tǒng)將列出所有符合條件的記錄。在一個(gè)表中可以加入多條普通索引。 (4) 唯一索引。允許表中索引值的記錄不唯一,但只有第一個(gè)有相同索引關(guān)鍵字值的記錄有效。這是為兼容舊版本而保留的一種形式?,F(xiàn)在通過(guò)建立查詢或視圖也可實(shí)現(xiàn)同樣的功能。,下面以學(xué)生情況表為例來(lái)建立索引:
66、 (1) 在項(xiàng)目管理器中打開(kāi)“學(xué)生情況表”,點(diǎn)擊右邊的“修改”按鈕,進(jìn)入“表設(shè)計(jì)器”對(duì)話框。 (2) 在“表設(shè)計(jì)器”對(duì)話框中單擊“索引”選項(xiàng)卡,出現(xiàn)如圖2-18所示的對(duì)話框。 (3) 單擊上下箭頭可以決定排序的方式是升序還是降序,在索引名框中輸入索引名“學(xué)號(hào)”,索引名只能用數(shù)字、字母和下劃線,且長(zhǎng)度不超過(guò)10個(gè)字符。,(4) 定義完索引名后,在“類型”列表中選擇索引類型,這里選擇“主索引”?!氨磉_(dá)式
67、”列的值可以是從數(shù)據(jù)表中選擇的字段,也可以是由字段變量組成的表達(dá)式。輸入表達(dá)式時(shí)可以使用表達(dá)式生成器,選擇適當(dāng)?shù)暮瘮?shù)來(lái)生成表達(dá)式,圖2-18所示的索引名為“年齡”的索引,就是由YEAR(DATE())-YEAR(出生日期)作為索引表達(dá)式的。同樣可以在“篩選”框處建立篩選表達(dá)式。,(5) 索引定義完后,單擊“確定”按鈕,將出現(xiàn)一個(gè)對(duì)話框詢問(wèn)是否永久地更改表結(jié)構(gòu),回答“是”,這時(shí)系統(tǒng)關(guān)閉“表設(shè)計(jì)器”窗口,并把設(shè)置的索引永久地保存在表結(jié)構(gòu)中。
68、 表中的每一個(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)系
69、 在“數(shù)據(jù)庫(kù)設(shè)計(jì)器”中可以通過(guò)索引來(lái)方便地建立數(shù)據(jù)表之間的關(guān)系。在創(chuàng)建表關(guān)系之前,相互關(guān)聯(lián)的表要建立一些公共字段和索引,這些字段一般為主關(guān)鍵字字段和外部關(guān)鍵字字段。其中主關(guān)鍵字用來(lái)標(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)鍵
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫(kù)管理與維護(hù)
- 建立數(shù)據(jù)庫(kù)library
- 醫(yī)學(xué)信息數(shù)據(jù)庫(kù)的建立與數(shù)據(jù)挖掘
- 合同數(shù)據(jù)庫(kù)的建立與數(shù)據(jù)分析
- excel建立數(shù)據(jù)庫(kù)
- 第03章數(shù)據(jù)庫(kù)的創(chuàng)建與維護(hù)
- 數(shù)據(jù)庫(kù)的建立表的建立和使用
- oracle數(shù)據(jù)庫(kù)創(chuàng)建與表空間維護(hù)
- 陶瓷刀具數(shù)據(jù)庫(kù)的研究與建立.pdf
- 多媒體數(shù)據(jù)庫(kù)的設(shè)計(jì)與建立.pdf
- 報(bào)告2——建立數(shù)據(jù)庫(kù)1
- 放射腫瘤學(xué)數(shù)據(jù)庫(kù)與腫瘤數(shù)據(jù)共享系統(tǒng)核心元數(shù)據(jù)庫(kù)的初步建立.pdf
- 02建立數(shù)據(jù)庫(kù)和表
- 歷代中醫(yī)美容方劑數(shù)據(jù)庫(kù)的建立與分析
- 停車場(chǎng)數(shù)據(jù)庫(kù)維護(hù)手冊(cè)
- 服務(wù)器數(shù)據(jù)庫(kù)維護(hù)方案
- sql server數(shù)據(jù)庫(kù)日常維護(hù)規(guī)范
- informix數(shù)據(jù)庫(kù)維護(hù)及應(yīng)急手冊(cè)
- oracle數(shù)據(jù)庫(kù)日常維護(hù)方案書
- 建立數(shù)據(jù)庫(kù)并在vb中讀取數(shù)據(jù)
評(píng)論
0/150
提交評(píng)論