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