- Visual FoxPro程序設(shè)計教程(第3版)
- 劉瑞新 汪遠征 曹歡歡等
- 2845字
- 2020-05-28 17:19:53
1.3 關(guān)系數(shù)據(jù)庫
自20世紀80年代以來,新推出的數(shù)據(jù)庫管理系統(tǒng)幾乎都是基于關(guān)系模型的。Visual FoxPro就是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng)。
1.3.1 基本概念
1.關(guān)系與表
關(guān)系的邏輯結(jié)構(gòu)就是一張二維表,如學籍表、課程表等。在Visual FoxPro中,一個關(guān)系就是一個“表”,每個表對應一個磁盤文件,表文件的擴展名為.DBF。表文件名即表的名稱,也就是關(guān)系的名稱。
2.屬性與字段
一個關(guān)系有很多屬性(即實體的屬性),對應二維表中的列(垂直方向)。每一個屬性有一個名字,稱為屬性名。對于一張二維表格來說,屬性就是表格中的欄(列),同欄的數(shù)據(jù)應具有相同的性質(zhì),如“姓名”這一欄就只能填充姓名數(shù)據(jù),而不能是其他數(shù)據(jù)。
在Visual FoxPro中,屬性表示為表中的“字段”,屬性名即為字段名。
3.關(guān)系模式與表結(jié)構(gòu)
對關(guān)系的描述稱為關(guān)系模式,一個關(guān)系模式對應一個關(guān)系的結(jié)構(gòu)。其格式為:

在Visual FoxPro中對應的表結(jié)構(gòu)為:

4.元組與記錄
在一個表格(一個關(guān)系)中,行(水平方向)稱為“元組”。在Visual FoxPro中,元組表示為表中的“記錄”。
一個表中可以有多個記錄,也可以沒有記錄,沒有記錄的表稱為“空表”。
5.域
域是屬性取值的范圍,不同的屬性有不同的取值范圍,即不同的域。如成績的取值范圍是0~100,邏輯型屬性的取值只能是.T.(真)或.F.(假)。
6.碼與關(guān)鍵字
用來區(qū)分不同元組(實體)的屬性或?qū)傩越M合,稱為碼。在Visual FoxPro中對應的概念是關(guān)鍵字,關(guān)鍵字是字段或字段的組合,用于在表中唯一標識記錄。如學生成績表中的學號字段是關(guān)鍵字,因為學號不可能重復,可以用來唯一標識一個記錄;性別字段就不是關(guān)鍵字,因為表中相同的性別可能會在不同記錄中出現(xiàn),即有兩個或兩個以上記錄的該屬性相同。
如果碼的任意真子集都不能成為碼,這樣的“最小碼”稱為“候選碼”。候選碼可能有多個,被選中用來區(qū)別不同元組的候選碼稱為主碼。在Visual FoxPro中,對應的概念是候選關(guān)鍵字和主關(guān)鍵字。
如果表中的某個字段不是本表的關(guān)鍵字,而是另外一個表中的關(guān)鍵字,則稱該字段為外部關(guān)鍵字。
7.關(guān)系模型與數(shù)據(jù)庫
從集合論的觀點來看,一個關(guān)系模型就是若干個有聯(lián)系的關(guān)系模式的集合,一個關(guān)系模式是命名的屬性集合,另外,關(guān)系是元組的集合,元組是屬性值的集合。
在Visual FoxPro中,把相互之間存在聯(lián)系的表放到一個數(shù)據(jù)庫中統(tǒng)一管理。例如,在訂貨管理數(shù)據(jù)庫中可以包含訂單表和客戶表。
1.3.2 數(shù)據(jù)完整性
數(shù)據(jù)完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和一致性(或相容性),保證數(shù)據(jù)完整性可以防止數(shù)據(jù)庫中存在不合法的數(shù)據(jù),防止錯誤的數(shù)據(jù)進入數(shù)據(jù)庫中。
數(shù)據(jù)完整性可以分為實體完整性、域完整性和參照完整性。
1.實體完整性
實體完整性是指數(shù)據(jù)庫表的每一行都有一個唯一的標識。實體完整性由實體完整性規(guī)則來定義,完整性規(guī)則是指表中的每一行在組成碼(關(guān)鍵字)的列上不能有空值或重復值,否則就不能起到唯一標識行的作用。
2.域完整性
域完整性是指數(shù)據(jù)庫數(shù)據(jù)取值的正確性。它包括數(shù)據(jù)類型、精度、取值范圍以及是否允許空值等。取值范圍又可分為靜態(tài)和動態(tài)兩種:靜態(tài)取值范圍是指列數(shù)據(jù)的取值范圍是固定的,如年齡小于150;動態(tài)取值范圍是指列數(shù)據(jù)的取值范圍由另一列或多列的值決定,或更新列的新值依賴于它的舊值。
3.參照完整性
參照完整性是指數(shù)據(jù)庫中表與表之間存在碼(關(guān)鍵字)與外碼(外部關(guān)鍵字)的約束關(guān)系,利用這些約束關(guān)系可以維護數(shù)據(jù)的一致性或相容性,即在數(shù)據(jù)庫的多個表之間存在某種參照關(guān)系。要實現(xiàn)這種參照關(guān)系,首先要創(chuàng)建表的碼與外碼。
①當對含有外碼的表進行插入、更新操作時,必須檢查新行中外鍵的值是否在主表中存在,若不存在就不能執(zhí)行該操作。
②當對主表中的行進行刪除、更新操作時,必須檢查被刪除行或被更新行中主碼的值是否在被一個或多個外碼參照引用,若正被參照就不能執(zhí)行該操作。
1.3.3 對關(guān)系數(shù)據(jù)庫的要求
通常生活中的二維表格多種多樣,不是所有二維表格都被當作“關(guān)系”而存放到數(shù)據(jù)庫中。也就是說,在關(guān)系模型中對“關(guān)系”有一定的規(guī)范化要求。
①關(guān)系中的每個屬性(列)必須是不可分割的數(shù)據(jù)單元。如圖1-3a所示的復合表不符合要求,不能直接作為關(guān)系,應將它改為如圖1-3b所示的二維表。

圖1-3 復合表與關(guān)系表
a)復合表 b)關(guān)系表
②同一關(guān)系中不應有完全相同的屬性名,即在同一個表格中不能出現(xiàn)相同的欄(字段)。
③關(guān)系中不應有完全相同的元組,即在同一個表格中不能出現(xiàn)相同的行(記錄)。
④元組(記錄)和屬性名(字段)與次序無關(guān),即交換兩行或兩列的位置不影響數(shù)據(jù)的實際含義。
1.3.4 關(guān)系運算
關(guān)系運算對應于Visual FoxPro中對表的操作,在對關(guān)系數(shù)據(jù)庫進行查詢時,為了找到用戶感興趣的數(shù)據(jù),需要對關(guān)系進行一定的運算。這些運算以一個或兩個關(guān)系作為輸入,運算的結(jié)果是產(chǎn)生一個新的關(guān)系。關(guān)系的運算主要指選擇、投影和連接3種運算。
1.選擇運算
選擇運算是指從關(guān)系中找出滿足給定條件的元組,又稱為篩選運算。選擇的條件以邏輯表達式給出,使得邏輯表達式的值為真的元組被選取。選擇是從行的角度進行的運算,即選擇部分行,經(jīng)過選擇運算可以得到一個新的關(guān)系,其關(guān)系模式不變,但其中的元組是原關(guān)系的一個子集。
在Visual FoxPro中,選擇操作使用命令短語FOR|WHILE〈條件〉或設(shè)置記錄過濾器來實現(xiàn)。
2.投影運算
從關(guān)系模式中指定若干個屬性組成新的關(guān)系稱為投影。投影是從列的角度進行的運算,經(jīng)過投影可以得到一個新關(guān)系,其關(guān)系模式所包含的屬性個數(shù)往往比原關(guān)系少,或者屬性的排列順序不同。投影運算提供了垂直調(diào)整關(guān)系的手段,體現(xiàn)出關(guān)系中列的次序無關(guān)的特性。
在Visual FoxPro中,投影操作使用命令短語FIELDS〈字段1〉,〈字段2〉,…,或設(shè)置字段過濾器來實現(xiàn)。
選擇運算和投影運算經(jīng)常聯(lián)合使用,從數(shù)據(jù)庫文件中提取某些記錄和某些數(shù)據(jù)項。
3.連接運算
從兩個關(guān)系中選取滿足連接條件的元組組成新關(guān)系,稱為連接(或鏈接、連結(jié))。連接是關(guān)系的橫向結(jié)合,連接運算將兩個關(guān)系模式的屬性名拼接成一個更寬的關(guān)系模式,生成的新關(guān)系中包含滿足連接條件的元組。連接過程是通過連接條件來控制的,連接條件中將出現(xiàn)兩個關(guān)系中的公共屬性名,或者具有相同語義、可比的屬性。
選擇和投影運算都是一目運算,它們的操作對象只是一個關(guān)系,相當于對一個二維表進行切割。連接運算是二目運算,需要兩個關(guān)系作為操作對象,如果需要連接兩個以上的關(guān)系,應當兩兩進行連接。
在Visual FoxPro中,連接操作相當于對兩個二維表進行拼接。有兩種意義下的連接操作,用JOIN命令實現(xiàn)兩個表的連接將得到一個新的表;關(guān)聯(lián)操作命令SETRELATION屬于邏輯上的連接操作。
4.自然連接和優(yōu)化
自然連接是指去掉重復屬性的等值連接,它是按照屬性值對應相等為條件進行的連接操作。自然連接是最常用的連接運算。
系統(tǒng)在執(zhí)行連接運算時,要進行大量的比較操作,因此執(zhí)行時比較費時。尤其在包括許多元組的關(guān)系之間進行連接時,更加突出。
優(yōu)化的一般方法是:
①首先進行選擇運算,盡量減少關(guān)系中元組的個數(shù),縮小參與連接運算關(guān)系的數(shù)量,減少訪問記錄的次數(shù)。
②然后能投影的投影,使關(guān)系中的屬性個數(shù)減少。在投影時必須注意保留連接兩個關(guān)系所需要的公共屬性或具有相同語義的屬性,否則關(guān)系之間就失去了聯(lián)系。
③最后再進行連接操作。
利用關(guān)系的投影、選擇和連接運算,可以方便地分解或構(gòu)造新的關(guān)系。
- DB2 V9權(quán)威指南
- 黑客攻防從入門到精通(實戰(zhàn)秘笈版)
- Java應用與實戰(zhàn)
- Computer Vision for the Web
- Dynamics 365 Application Development
- Java Web基礎(chǔ)與實例教程(第2版·微課版)
- JavaScript 網(wǎng)頁編程從入門到精通 (清華社"視頻大講堂"大系·網(wǎng)絡開發(fā)視頻大講堂)
- PyTorch自然語言處理入門與實戰(zhàn)
- C語言從入門到精通(第4版)
- Hands-On Automation Testing with Java for Beginners
- Clojure Reactive Programming
- Practical Microservices
- PHP 8從入門到精通(視頻教學版)
- Web前端開發(fā)精品課:HTML5 Canvas開發(fā)詳解
- Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)(第2版)