官术网_书友最值得收藏!

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)記的記錄。

主站蜘蛛池模板: 宜良县| 陆良县| 元谋县| 元朗区| 永靖县| 垦利县| 彰化县| 丽江市| 锦州市| 璧山县| 柏乡县| 鄱阳县| 泊头市| 光山县| 镇远县| 张家口市| 昭通市| 新巴尔虎左旗| 兰坪| 林甸县| 揭东县| 宣汉县| 米林县| 沁源县| 调兵山市| 灵璧县| 金秀| 天长市| 光泽县| 荔浦县| 廊坊市| 额济纳旗| 萍乡市| 海伦市| 富蕴县| 宜良县| 红安县| 莱芜市| 呼玛县| 泾川县| 武隆县|