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

2.2 知識要點

1.數據庫設計理論基礎

在設計數據庫之前,應該對數據庫設計的基本概念有一個充分的了解。邏輯數據庫設計規范需要使用一些標準化的方法把原始數據分割成多個相關的表,規范化數據庫的特征是表的寬度較窄(表中的列數較少),數量較多,而未規范化數據庫的特征是表的寬度較寬(表中的列數較多),數量較少。

在關系數據庫設計理論中,規范化規則規定了一個設計良好的數據庫必須取舍的一些屬性。這些規范化規則非常復雜,已經超出了本書的學習范圍。但有一些簡單的規則可以幫助我們設計出合理的數據庫。這些規則有:

  • 每個表都應該具有標識符(關鍵字);
  • 一個表應該只存儲一種實體的數據;
  • 表中不應該有允許空值的列;
  • 表中不應該有重復的數據值和列。

2.創建數據庫及表

在Visual FoxPro 6.0中,除了在項目管理器窗口中創建數據庫外,還可以使用CREATE DATABASE命令建立數據庫,分別包括擴展名為.dbc、.dct和.dcx的3個文件,用戶不能直接修改這些文件。

打開數據庫時,可以在項目管理器窗口中選擇要打開的數據庫,也可以使用OPEN DATABASE命令打開數據庫。

創建表結構其實就是設計字段的基本屬性。可以使用表設計器、表向導或SQL命令來創建表結構,對表結構的修改可以使用MODIFY STRUCTURE命令。有關表操作的幾個常用命令見表2-1所示。

表2-1 有關表操作的常用命令

本章將以圖書管理為例,設計一個“Books.dbc”數據庫,該數據庫包含“圖書.dbf”、“讀者.dbf”、“借閱.dbf”等表。在這個數據庫中能了解到所有圖書的信息、讀者的信息、圖書借閱情況等。

3.瀏覽記錄

在Visual FoxPro 6.0中,可以通過“瀏覽”窗口或“編輯”窗口瀏覽表中的記錄。“瀏覽”窗口和“編輯”窗口可以相互切換。

使用LIST或DISPLAY命令可以顯示記錄。LIST與DISPALY命令的區別是:LIST命令連續顯示表中記錄,直到顯示全部記錄為止,而DISPLAY命令是顯示當前記錄。使用這兩個命令都可以有條件的顯示記錄。

4.定位記錄

定位記錄包括記錄指針的絕對移動和相對移動兩種方式。絕對移動記錄指針使用GO或GOTO命令,相對移動記錄指針使用SKIP命令,見表2-2所示。

表2-2 記錄定位命令

測試記錄指針經常使用EOF()、BOF()、RECNO()函數,打開表時表中記錄指針情況見表2-3所示。

表2-3 打開表時表中記錄指針情況

在“瀏覽”或“編輯”記錄窗口可以直接對記錄進行修改,也可以使用EDIT、CHANGE或BROWSE命令在“瀏覽”或“編輯”記錄窗口進行修改,但修改記錄的方式是逐條進行的。

如果要成批修改記錄,可以使用成批替換記錄REPLACE命令。

5.數據統計

(1)統計記錄

統計記錄個數,使用COUNT命令,命令格式如下:

COUNT [<范圍>] [TO <內存變量>][FOR <條件>]

該命令統計指定范圍內滿足條件的記錄個數,結果可存入內存變量。

(2)數值字段列向求和

數值字段列向求和使用SUM命令,格式如下:

SUM [<范圍>] [<數值表達式列表>] [TO <內存變量列表>] [FOR <條件>]

該命令對當前表中數值型字段列向求和。若省略所有選項,則對表中的所有數值型字段列向求和。<數值表達式列表>是由數值型字段組成的表達式,使用該選項,僅計算各個數值表達式的值,各表達式之間用逗號間隔。如果使用TO <內存變量列表>選項,將各個數值表達式的值或數值型字段的值依次賦給各個內存變量,內存變量的個數必須與數值表達式的個數相同。

(3)數值字段列向求平均值

使用AVERAGE命令可以快速計算數值字段的平均值,其命令格式如下:

AVERAGE [<范圍>] [<數值表達式列表>] [TO <內存變量列表>][FOR <條件>]

該命令對當前表中數值型字段列向求平均值。AVERAGE命令與SUM命令的用法完全相同,不同之處是前者對數值型字段或數值表達式列向求平均值,后者求和。

6.建立索引

Visual FoxPro 6.0中的索引是由指針構成的文件,這些指針在邏輯上按照索引關鍵字的值進行排序。索引文件和表文件分別存儲,并且不改變表中記錄的物理順序。實際上,創建索引就是創建一個由指向.dbf文件記錄指針構成的文件。若根據特定順序處理記錄,可以選擇一個相應的索引,使用索引還可以加速對表的查看和訪問。

在Visual FoxPro 6.0中,索引分為主索引、候選索引、普通索引和唯一索引4種類型。

一個數據庫表只能建立一個主索引,可以建立多個候選索引。自由表不能建立主索引。一個表可以建立多個候選索引和普通索引,每一個索引決定了該表記錄的一種邏輯排列順序。

建立索引可以在表設計器的“索引”選項卡中設置,并且可以設置主索引。使用命令方式只能建立普通索引、唯一索引(UNIQUE)或候選索引(CANDIDATE),但不能建立主索引。

(1)建立普通索引命令

INDEX ON <索引表達式> TO <單索引文件名> [FOR <條件>]

建立的單索引文件名的擴展名為.idx,是為了兼容以前版本建立的索引文件。

(2)結構復合索引文件命令

INDEX ON <索引表達式> TAG <索引名> [FOR <條件>] [ASCENDING | DESCENDING]
    [UNIQUE] [CANDIDATE]

結構復合索引文件與其表文件具有相同的文件名(擴展名不同)。

(3)非結構復合索引文件命令

INDEX ON <索引表達式> TAG <索引名> OF <索引文件名> [FOR <條件>]
     [ASCENDING | DESCENDING] [UNIQUE]

非結構復合索引文件名由用戶指定,但不能與表同名。非結構復合索引中不能定義候選索引。

7.使用索引

(1)打開索引文件

SET INDEX TO <索引列表>

索引列表中各索引文件用逗號分開,可以包含.idx索引和.cdx索引。與表文件名相同的結構復合索引文件在打開表時自動打開。

USE <表名> ORDER <標識名>

打開表的同時指定主控索引。

(2)設置主控索引

SET ORDER TO [<數值表達式> | [TAG] <索引名> [OF <復合索引文件名>]
    [ASCENDING | DESCENDING]]

(3)使用索引快速查找記錄

SEEK <表達式>

只能在索引文件中查找記錄。

(4)刪除索引

刪除索引可以在表設計器的“索引”選項卡中刪除。使用命令刪除結構索引的格式如下:

DELETE TAG <索引名>
DELETE TAG ALL 表示刪除全部索引。

8.設置字段屬性

數據庫表的字段屬性設置包括:設置字段標題,設置字段注釋來標識字段信息,設置字段默認值,設置字段輸入掩碼和顯示格式,設置字段有效性規則來限制輸入字段的數據內容等。數據庫表具有這些字段屬性,而自由表沒有這些屬性,這也是數據庫表與自由表的一個區別。

字段級規則是一種與字段相關的有效性規則,在插入或修改字段值時被激活,多用于數據輸入正確性的檢驗。

記錄級規則是一種與記錄相關的有效性規則,當插入或修改記錄時激活,常用來檢驗數據輸入和正確性。記錄被刪除時不使用有效性規則。記錄級規則在字段級規則之后和觸發器之前激活,在緩沖更新時工作。

觸發器是一個與表緊密相關的表達式,當對表中的記錄進行插入、更新或刪除操作時激活相應的觸發器。觸發器是作為某個特定表的屬性而存在的,如果將一個表從數據庫中移走,與這個表相關的觸發器也立即被刪除。觸發器表達式必須是一個邏輯表達式,返回真(.T.)或假(.F.)值。

每個表最多創建3個觸發器:插入觸發器、更新觸發器和刪除觸發器。

9.工作區的使用

所謂工作區就是在內存中為表獨立開辟的存儲空間。要使用多個表,就要使用多工作區。一個工作區就是一個編號區域,Visual FoxPro 6.0定義的32767個工作區。在應用程序中通常使用該工作區中表的別名來標識工作區。表別名是一個名稱,它可以引用工作區中打開的表。

(1)使用數據工作期

使用“數據工作期”窗口可以觀察到打開的表。要打開“數據工作期”窗口,可以在“命令”窗口輸入SET命令。每個數據工作期包含了它自己的一組工作區,這些工作區包括工作區中打開的表、表索引及表之間的關系。在數據工作期打開表時,系統指定最低可用的工作區號。

(2)指定工作區

當前工作區是指正在使用的工作區。可以通過“數據工作期窗口”或用SELECT命令把任何一個工作區設置為當前工作區。指定工作區的命令是:

SELECT <工作區號> | <別名> | <0>

(3)在工作區打開或關閉表

使用USE命令打開表的格式如下:

USE <表名> [ALIAS <別名>] [AGAIN]

在指定工作區打開多個表,其USE命令格式如下:

USE <表名> IN <工作區號> | <別名> | <0>

可以在“數據工作期”窗口中查看各工作區打開的表。

在一個工作區中不能同時打開多個表。

(4)使用表的別名

表的別名是指在工作區中打開表時為該表所定義的名稱。可以自定義別名,否則系統默認就以表名作為別名。若一張表在多個工作區中被打開,系統默認在表名后依次加_a、_b……除此之外,用戶還可以使用USE <表名> ALIAS <別名>命令來指定別名。

如果使用包含AGAIN子句的USE命令,可以同時在多個工作區中打開同一個表;如果在每個工作區中打開該表時都沒有指定別名,這時系統根據情況自動為表指定別名。

在別名后加上“.”或“->”,然后再接字段名,可以引用其他工作區的字段。

(5)表的獨占與共享使用

獨占使用是指一張表只能被一個用戶打開。Visual FoxPro 6.0在默認狀態以獨占方式打開。

共享使用是指一張表可以被多個用戶同時打開。

系統的默認打開方式可以通過“工具”菜單中的“選項”設置,或用下列命令:

SET EXCLUSIVE OFF  &&默認打開方式為共享
SET EXCLUSIVE ON  &&默認打開方式為獨占

例如:

USE 圖書 SHARED      &&以共享方式打開“圖書”表
USE 圖書 EXCLUSIVE    &&以獨占方式打開“圖書”表

(6)利用緩沖訪問表中的數據

數據緩沖是指先將對表記錄的修改存放在緩沖區中,用戶決定是否用緩沖區中的數據更新表文件。它是VFP6.0在多用戶環境下用來保護對表記錄所做的數據更新和數據維護操作的一種技術。

  • 數據緩沖的包括記錄緩沖和表緩沖兩種類型。
  • 記錄緩沖:當記錄指針移動或關閉表時,緩沖區自動更新表中的相應記錄。

表緩沖:當發出更新表的命令或關閉表時更新表。

10.建立表間關系

Visual FoxPro 6.0中數據庫表之間有3種關系:一對一關系、一對多關系和多對多關系。

兩個表之間的一對一關系不常使用,因為在許多情況下,兩個表的信息可以簡單地合并成一個表。

一對多關系是關系數據庫中最普遍的關系。“一”方使用主關鍵字或候選索引關鍵字,而“多”方使用普通索引關鍵字。

在使用多對多關系的數據庫時,需要創建第3個表,把多對多關系分解成兩個一對多的關系,第3個表起橋梁作用。

建立表間關系包括建立表間臨時關系和建立表間永久關系。在“數據工作期”窗口建立兩個表之間的關系,這種關系是臨時關系。當關閉數據庫表時,這種關系也隨之撤銷。使用SET RELATION命令也可以建立表間的臨時關系,命令格式如下:

SET RELATION TO <關聯表達式> INTO <工作區號>|<別名> [ADDITIVE]

不帶參數的SET RELATION TO命令撤銷關系。

永久關系是數據庫表之間的一種關系,不僅運行時存在,而且一直保留。表之間的永久關系是通過索引建立的。

11.臨時關系與永久關系的區別

  • 臨時關系是用來在打開的兩個表之間控制相關表之間記錄的訪問;而永久關系主要是用來存儲相關表之間的參照完整性,也可以作為默認的臨時關系或查詢中默認的連接條件。
  • 臨時關系在表打開之后使用SET RELATION命令建立,隨表的關閉而解除;永久關系永久地保存在數據庫中而不必在每次使用表時重新創建。
  • 臨時關系可以在自由表之間、庫表之間或自由表與庫表之間建立,而永久關系只能在庫表之間建立。
  • 臨時關系中一個表不能有兩個主表(除非這兩個主表是通過子表的同一個主控索引建立的臨時關系),永久關系則不然。

12.參照完整性

建立參照完整性涉及生成一系列規則,以便在輸入或刪除記錄時,能保持已定義的表間關系。實施參照完整性規則,可以確保以下幾方面:

  • 當主表中沒有記錄時,記錄不得添加到相關表中。
  • 主表的值不能改變,如果改變它將導致相關表中出現孤立的記錄。若某主表記錄在相關表中有匹配記錄,則該主表記錄不能被刪除。

Visual FoxPro 6.0的參照完整性規則包括更新規則、刪除規則和插入規則。

用戶也可以編寫自己的觸發器和存儲過程代碼來實施參照完整性。

在建立參照完整性之前必須先清理數據庫,所謂清理數據庫就是物理刪除數據庫各個表中所有帶刪除標記的記錄。

主站蜘蛛池模板: 阳信县| 沁水县| 铁岭县| 山西省| 舞阳县| 瑞丽市| 武强县| 平山县| 密云县| 横山县| 独山县| 全州县| 恩施市| 瑞昌市| 收藏| 新河县| 富蕴县| 岳池县| 株洲市| 高淳县| 区。| 资中县| 滦南县| 三门县| 疏附县| 江阴市| 公安县| 屏东市| 资溪县| 绿春县| 久治县| 西乌珠穆沁旗| 张北县| 高州市| 和政县| 金寨县| 兴仁县| 莎车县| 南投市| 库尔勒市| 翁牛特旗|