- 數(shù)據(jù)庫應(yīng)用技術(shù):Visual FoxPro 6.0上機(jī)指導(dǎo)與練習(xí)
- 魏茂林主編
- 4247字
- 2018-12-27 18:40:22
2.2 知識要點(diǎn)
1.數(shù)據(jù)庫設(shè)計(jì)理論基礎(chǔ)
在設(shè)計(jì)數(shù)據(jù)庫之前,應(yīng)該對數(shù)據(jù)庫設(shè)計(jì)的基本概念有一個(gè)充分的了解。邏輯數(shù)據(jù)庫設(shè)計(jì)規(guī)范需要使用一些標(biāo)準(zhǔn)化的方法把原始數(shù)據(jù)分割成多個(gè)相關(guān)的表,規(guī)范化數(shù)據(jù)庫的特征是表的寬度較窄(表中的列數(shù)較少),數(shù)量較多,而未規(guī)范化數(shù)據(jù)庫的特征是表的寬度較寬(表中的列數(shù)較多),數(shù)量較少。
在關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論中,規(guī)范化規(guī)則規(guī)定了一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫必須取舍的一些屬性。這些規(guī)范化規(guī)則非常復(fù)雜,已經(jīng)超出了本書的學(xué)習(xí)范圍。但有一些簡單的規(guī)則可以幫助我們設(shè)計(jì)出合理的數(shù)據(jù)庫。這些規(guī)則有:
- 每個(gè)表都應(yīng)該具有標(biāo)識符(關(guān)鍵字);
- 一個(gè)表應(yīng)該只存儲一種實(shí)體的數(shù)據(jù);
- 表中不應(yīng)該有允許空值的列;
- 表中不應(yīng)該有重復(fù)的數(shù)據(jù)值和列。
2.創(chuàng)建數(shù)據(jù)庫及表
在Visual FoxPro 6.0中,除了在項(xiàng)目管理器窗口中創(chuàng)建數(shù)據(jù)庫外,還可以使用CREATE DATABASE命令建立數(shù)據(jù)庫,分別包括擴(kuò)展名為.dbc、.dct和.dcx的3個(gè)文件,用戶不能直接修改這些文件。
打開數(shù)據(jù)庫時(shí),可以在項(xiàng)目管理器窗口中選擇要打開的數(shù)據(jù)庫,也可以使用OPEN DATABASE命令打開數(shù)據(jù)庫。
創(chuàng)建表結(jié)構(gòu)其實(shí)就是設(shè)計(jì)字段的基本屬性。可以使用表設(shè)計(jì)器、表向?qū)Щ騍QL命令來創(chuàng)建表結(jié)構(gòu),對表結(jié)構(gòu)的修改可以使用MODIFY STRUCTURE命令。有關(guān)表操作的幾個(gè)常用命令見表2-1所示。
表2-1 有關(guān)表操作的常用命令
本章將以圖書管理為例,設(shè)計(jì)一個(gè)“Books.dbc”數(shù)據(jù)庫,該數(shù)據(jù)庫包含“圖書.dbf”、“讀者.dbf”、“借閱.dbf”等表。在這個(gè)數(shù)據(jù)庫中能了解到所有圖書的信息、讀者的信息、圖書借閱情況等。
3.瀏覽記錄
在Visual FoxPro 6.0中,可以通過“瀏覽”窗口或“編輯”窗口瀏覽表中的記錄。“瀏覽”窗口和“編輯”窗口可以相互切換。
使用LIST或DISPLAY命令可以顯示記錄。LIST與DISPALY命令的區(qū)別是:LIST命令連續(xù)顯示表中記錄,直到顯示全部記錄為止,而DISPLAY命令是顯示當(dāng)前記錄。使用這兩個(gè)命令都可以有條件的顯示記錄。
4.定位記錄
定位記錄包括記錄指針的絕對移動(dòng)和相對移動(dòng)兩種方式。絕對移動(dòng)記錄指針使用GO或GOTO命令,相對移動(dòng)記錄指針使用SKIP命令,見表2-2所示。
表2-2 記錄定位命令
測試記錄指針經(jīng)常使用EOF()、BOF()、RECNO()函數(shù),打開表時(shí)表中記錄指針情況見表2-3所示。
表2-3 打開表時(shí)表中記錄指針情況
在“瀏覽”或“編輯”記錄窗口可以直接對記錄進(jìn)行修改,也可以使用EDIT、CHANGE或BROWSE命令在“瀏覽”或“編輯”記錄窗口進(jìn)行修改,但修改記錄的方式是逐條進(jìn)行的。
如果要成批修改記錄,可以使用成批替換記錄REPLACE命令。
5.數(shù)據(jù)統(tǒng)計(jì)
(1)統(tǒng)計(jì)記錄
統(tǒng)計(jì)記錄個(gè)數(shù),使用COUNT命令,命令格式如下:
COUNT [<范圍>] [TO <內(nèi)存變量>][FOR <條件>]
該命令統(tǒng)計(jì)指定范圍內(nèi)滿足條件的記錄個(gè)數(shù),結(jié)果可存入內(nèi)存變量。
(2)數(shù)值字段列向求和
數(shù)值字段列向求和使用SUM命令,格式如下:
SUM [<范圍>] [<數(shù)值表達(dá)式列表>] [TO <內(nèi)存變量列表>] [FOR <條件>]
該命令對當(dāng)前表中數(shù)值型字段列向求和。若省略所有選項(xiàng),則對表中的所有數(shù)值型字段列向求和。<數(shù)值表達(dá)式列表>是由數(shù)值型字段組成的表達(dá)式,使用該選項(xiàng),僅計(jì)算各個(gè)數(shù)值表達(dá)式的值,各表達(dá)式之間用逗號間隔。如果使用TO <內(nèi)存變量列表>選項(xiàng),將各個(gè)數(shù)值表達(dá)式的值或數(shù)值型字段的值依次賦給各個(gè)內(nèi)存變量,內(nèi)存變量的個(gè)數(shù)必須與數(shù)值表達(dá)式的個(gè)數(shù)相同。
(3)數(shù)值字段列向求平均值
使用AVERAGE命令可以快速計(jì)算數(shù)值字段的平均值,其命令格式如下:
AVERAGE [<范圍>] [<數(shù)值表達(dá)式列表>] [TO <內(nèi)存變量列表>][FOR <條件>]
該命令對當(dāng)前表中數(shù)值型字段列向求平均值。AVERAGE命令與SUM命令的用法完全相同,不同之處是前者對數(shù)值型字段或數(shù)值表達(dá)式列向求平均值,后者求和。
6.建立索引
Visual FoxPro 6.0中的索引是由指針構(gòu)成的文件,這些指針在邏輯上按照索引關(guān)鍵字的值進(jìn)行排序。索引文件和表文件分別存儲,并且不改變表中記錄的物理順序。實(shí)際上,創(chuàng)建索引就是創(chuàng)建一個(gè)由指向.dbf文件記錄指針構(gòu)成的文件。若根據(jù)特定順序處理記錄,可以選擇一個(gè)相應(yīng)的索引,使用索引還可以加速對表的查看和訪問。
在Visual FoxPro 6.0中,索引分為主索引、候選索引、普通索引和唯一索引4種類型。
一個(gè)數(shù)據(jù)庫表只能建立一個(gè)主索引,可以建立多個(gè)候選索引。自由表不能建立主索引。一個(gè)表可以建立多個(gè)候選索引和普通索引,每一個(gè)索引決定了該表記錄的一種邏輯排列順序。
建立索引可以在表設(shè)計(jì)器的“索引”選項(xiàng)卡中設(shè)置,并且可以設(shè)置主索引。使用命令方式只能建立普通索引、唯一索引(UNIQUE)或候選索引(CANDIDATE),但不能建立主索引。
(1)建立普通索引命令
INDEX ON <索引表達(dá)式> TO <單索引文件名> [FOR <條件>]
建立的單索引文件名的擴(kuò)展名為.idx,是為了兼容以前版本建立的索引文件。
(2)結(jié)構(gòu)復(fù)合索引文件命令
INDEX ON <索引表達(dá)式> TAG <索引名> [FOR <條件>] [ASCENDING | DESCENDING] [UNIQUE] [CANDIDATE]
結(jié)構(gòu)復(fù)合索引文件與其表文件具有相同的文件名(擴(kuò)展名不同)。
(3)非結(jié)構(gòu)復(fù)合索引文件命令
INDEX ON <索引表達(dá)式> TAG <索引名> OF <索引文件名> [FOR <條件>] [ASCENDING | DESCENDING] [UNIQUE]
非結(jié)構(gòu)復(fù)合索引文件名由用戶指定,但不能與表同名。非結(jié)構(gòu)復(fù)合索引中不能定義候選索引。
7.使用索引
(1)打開索引文件
SET INDEX TO <索引列表>
索引列表中各索引文件用逗號分開,可以包含.idx索引和.cdx索引。與表文件名相同的結(jié)構(gòu)復(fù)合索引文件在打開表時(shí)自動(dòng)打開。
USE <表名> ORDER <標(biāo)識名>
打開表的同時(shí)指定主控索引。
(2)設(shè)置主控索引
SET ORDER TO [<數(shù)值表達(dá)式> | [TAG] <索引名> [OF <復(fù)合索引文件名>] [ASCENDING | DESCENDING]]
(3)使用索引快速查找記錄
SEEK <表達(dá)式>
只能在索引文件中查找記錄。
(4)刪除索引
刪除索引可以在表設(shè)計(jì)器的“索引”選項(xiàng)卡中刪除。使用命令刪除結(jié)構(gòu)索引的格式如下:
DELETE TAG <索引名> DELETE TAG ALL 表示刪除全部索引。
8.設(shè)置字段屬性
數(shù)據(jù)庫表的字段屬性設(shè)置包括:設(shè)置字段標(biāo)題,設(shè)置字段注釋來標(biāo)識字段信息,設(shè)置字段默認(rèn)值,設(shè)置字段輸入掩碼和顯示格式,設(shè)置字段有效性規(guī)則來限制輸入字段的數(shù)據(jù)內(nèi)容等。數(shù)據(jù)庫表具有這些字段屬性,而自由表沒有這些屬性,這也是數(shù)據(jù)庫表與自由表的一個(gè)區(qū)別。
字段級規(guī)則是一種與字段相關(guān)的有效性規(guī)則,在插入或修改字段值時(shí)被激活,多用于數(shù)據(jù)輸入正確性的檢驗(yàn)。
記錄級規(guī)則是一種與記錄相關(guān)的有效性規(guī)則,當(dāng)插入或修改記錄時(shí)激活,常用來檢驗(yàn)數(shù)據(jù)輸入和正確性。記錄被刪除時(shí)不使用有效性規(guī)則。記錄級規(guī)則在字段級規(guī)則之后和觸發(fā)器之前激活,在緩沖更新時(shí)工作。
觸發(fā)器是一個(gè)與表緊密相關(guān)的表達(dá)式,當(dāng)對表中的記錄進(jìn)行插入、更新或刪除操作時(shí)激活相應(yīng)的觸發(fā)器。觸發(fā)器是作為某個(gè)特定表的屬性而存在的,如果將一個(gè)表從數(shù)據(jù)庫中移走,與這個(gè)表相關(guān)的觸發(fā)器也立即被刪除。觸發(fā)器表達(dá)式必須是一個(gè)邏輯表達(dá)式,返回真(.T.)或假(.F.)值。
每個(gè)表最多創(chuàng)建3個(gè)觸發(fā)器:插入觸發(fā)器、更新觸發(fā)器和刪除觸發(fā)器。
9.工作區(qū)的使用
所謂工作區(qū)就是在內(nèi)存中為表獨(dú)立開辟的存儲空間。要使用多個(gè)表,就要使用多工作區(qū)。一個(gè)工作區(qū)就是一個(gè)編號區(qū)域,Visual FoxPro 6.0定義的32767個(gè)工作區(qū)。在應(yīng)用程序中通常使用該工作區(qū)中表的別名來標(biāo)識工作區(qū)。表別名是一個(gè)名稱,它可以引用工作區(qū)中打開的表。
(1)使用數(shù)據(jù)工作期
使用“數(shù)據(jù)工作期”窗口可以觀察到打開的表。要打開“數(shù)據(jù)工作期”窗口,可以在“命令”窗口輸入SET命令。每個(gè)數(shù)據(jù)工作期包含了它自己的一組工作區(qū),這些工作區(qū)包括工作區(qū)中打開的表、表索引及表之間的關(guān)系。在數(shù)據(jù)工作期打開表時(shí),系統(tǒng)指定最低可用的工作區(qū)號。
(2)指定工作區(qū)
當(dāng)前工作區(qū)是指正在使用的工作區(qū)??梢酝ㄟ^“數(shù)據(jù)工作期窗口”或用SELECT命令把任何一個(gè)工作區(qū)設(shè)置為當(dāng)前工作區(qū)。指定工作區(qū)的命令是:
SELECT <工作區(qū)號> | <別名> | <0>
(3)在工作區(qū)打開或關(guān)閉表
使用USE命令打開表的格式如下:
USE <表名> [ALIAS <別名>] [AGAIN]
在指定工作區(qū)打開多個(gè)表,其USE命令格式如下:
USE <表名> IN <工作區(qū)號> | <別名> | <0>
可以在“數(shù)據(jù)工作期”窗口中查看各工作區(qū)打開的表。
在一個(gè)工作區(qū)中不能同時(shí)打開多個(gè)表。
(4)使用表的別名
表的別名是指在工作區(qū)中打開表時(shí)為該表所定義的名稱??梢宰远x別名,否則系統(tǒng)默認(rèn)就以表名作為別名。若一張表在多個(gè)工作區(qū)中被打開,系統(tǒng)默認(rèn)在表名后依次加_a、_b……除此之外,用戶還可以使用USE <表名> ALIAS <別名>命令來指定別名。
如果使用包含AGAIN子句的USE命令,可以同時(shí)在多個(gè)工作區(qū)中打開同一個(gè)表;如果在每個(gè)工作區(qū)中打開該表時(shí)都沒有指定別名,這時(shí)系統(tǒng)根據(jù)情況自動(dòng)為表指定別名。
在別名后加上“.”或“->”,然后再接字段名,可以引用其他工作區(qū)的字段。
(5)表的獨(dú)占與共享使用
獨(dú)占使用是指一張表只能被一個(gè)用戶打開。Visual FoxPro 6.0在默認(rèn)狀態(tài)以獨(dú)占方式打開。
共享使用是指一張表可以被多個(gè)用戶同時(shí)打開。
系統(tǒng)的默認(rèn)打開方式可以通過“工具”菜單中的“選項(xiàng)”設(shè)置,或用下列命令:
SET EXCLUSIVE OFF &&默認(rèn)打開方式為共享 SET EXCLUSIVE ON &&默認(rèn)打開方式為獨(dú)占
例如:
USE 圖書 SHARED &&以共享方式打開“圖書”表 USE 圖書 EXCLUSIVE &&以獨(dú)占方式打開“圖書”表
(6)利用緩沖訪問表中的數(shù)據(jù)
數(shù)據(jù)緩沖是指先將對表記錄的修改存放在緩沖區(qū)中,用戶決定是否用緩沖區(qū)中的數(shù)據(jù)更新表文件。它是VFP6.0在多用戶環(huán)境下用來保護(hù)對表記錄所做的數(shù)據(jù)更新和數(shù)據(jù)維護(hù)操作的一種技術(shù)。
- 數(shù)據(jù)緩沖的包括記錄緩沖和表緩沖兩種類型。
- 記錄緩沖:當(dāng)記錄指針移動(dòng)或關(guān)閉表時(shí),緩沖區(qū)自動(dòng)更新表中的相應(yīng)記錄。
表緩沖:當(dāng)發(fā)出更新表的命令或關(guān)閉表時(shí)更新表。
10.建立表間關(guān)系
Visual FoxPro 6.0中數(shù)據(jù)庫表之間有3種關(guān)系:一對一關(guān)系、一對多關(guān)系和多對多關(guān)系。
兩個(gè)表之間的一對一關(guān)系不常使用,因?yàn)樵谠S多情況下,兩個(gè)表的信息可以簡單地合并成一個(gè)表。
一對多關(guān)系是關(guān)系數(shù)據(jù)庫中最普遍的關(guān)系?!耙弧狈绞褂弥麝P(guān)鍵字或候選索引關(guān)鍵字,而“多”方使用普通索引關(guān)鍵字。
在使用多對多關(guān)系的數(shù)據(jù)庫時(shí),需要?jiǎng)?chuàng)建第3個(gè)表,把多對多關(guān)系分解成兩個(gè)一對多的關(guān)系,第3個(gè)表起橋梁作用。
建立表間關(guān)系包括建立表間臨時(shí)關(guān)系和建立表間永久關(guān)系。在“數(shù)據(jù)工作期”窗口建立兩個(gè)表之間的關(guān)系,這種關(guān)系是臨時(shí)關(guān)系。當(dāng)關(guān)閉數(shù)據(jù)庫表時(shí),這種關(guān)系也隨之撤銷。使用SET RELATION命令也可以建立表間的臨時(shí)關(guān)系,命令格式如下:
SET RELATION TO <關(guān)聯(lián)表達(dá)式> INTO <工作區(qū)號>|<別名> [ADDITIVE]
不帶參數(shù)的SET RELATION TO命令撤銷關(guān)系。
永久關(guān)系是數(shù)據(jù)庫表之間的一種關(guān)系,不僅運(yùn)行時(shí)存在,而且一直保留。表之間的永久關(guān)系是通過索引建立的。
11.臨時(shí)關(guān)系與永久關(guān)系的區(qū)別
- 臨時(shí)關(guān)系是用來在打開的兩個(gè)表之間控制相關(guān)表之間記錄的訪問;而永久關(guān)系主要是用來存儲相關(guān)表之間的參照完整性,也可以作為默認(rèn)的臨時(shí)關(guān)系或查詢中默認(rèn)的連接條件。
- 臨時(shí)關(guān)系在表打開之后使用SET RELATION命令建立,隨表的關(guān)閉而解除;永久關(guān)系永久地保存在數(shù)據(jù)庫中而不必在每次使用表時(shí)重新創(chuàng)建。
- 臨時(shí)關(guān)系可以在自由表之間、庫表之間或自由表與庫表之間建立,而永久關(guān)系只能在庫表之間建立。
- 臨時(shí)關(guān)系中一個(gè)表不能有兩個(gè)主表(除非這兩個(gè)主表是通過子表的同一個(gè)主控索引建立的臨時(shí)關(guān)系),永久關(guān)系則不然。
12.參照完整性
建立參照完整性涉及生成一系列規(guī)則,以便在輸入或刪除記錄時(shí),能保持已定義的表間關(guān)系。實(shí)施參照完整性規(guī)則,可以確保以下幾方面:
- 當(dāng)主表中沒有記錄時(shí),記錄不得添加到相關(guān)表中。
- 主表的值不能改變,如果改變它將導(dǎo)致相關(guān)表中出現(xiàn)孤立的記錄。若某主表記錄在相關(guān)表中有匹配記錄,則該主表記錄不能被刪除。
Visual FoxPro 6.0的參照完整性規(guī)則包括更新規(guī)則、刪除規(guī)則和插入規(guī)則。
用戶也可以編寫自己的觸發(fā)器和存儲過程代碼來實(shí)施參照完整性。
在建立參照完整性之前必須先清理數(shù)據(jù)庫,所謂清理數(shù)據(jù)庫就是物理刪除數(shù)據(jù)庫各個(gè)表中所有帶刪除標(biāo)記的記錄。
- 輕松學(xué)Java Web開發(fā)
- 腦動(dòng)力:PHP函數(shù)速查效率手冊
- CSS全程指南
- 人工智能工程化:應(yīng)用落地與中臺構(gòu)建
- PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)
- 系統(tǒng)安裝與重裝
- 統(tǒng)計(jì)學(xué)習(xí)理論與方法:R語言版
- Excel 2010函數(shù)與公式速查手冊
- 機(jī)器人人工智能
- INSTANT Adobe Story Starter
- C#求職寶典
- 大數(shù)據(jù):引爆新的價(jià)值點(diǎn)
- ADuC系列ARM器件應(yīng)用技術(shù)
- 分布式Java應(yīng)用
- SQL Server 2019 Administrator's Guide