管理系統(tǒng)中計(jì)算機(jī)應(yīng)用課堂筆記5

字號:

第六章系統(tǒng)總體設(shè)計(jì)
    6.l系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
    6.1.1系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)的任務(wù)
    系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)的任務(wù),是根據(jù)系統(tǒng)分析的邏輯模型設(shè)計(jì)應(yīng)用軟件系統(tǒng)的物理結(jié)構(gòu)。系統(tǒng)物理模型必須符合邏輯模型,能夠完成邏輯模型所規(guī)定的信息處理功能,這是物理設(shè)計(jì)的基本要求。
    系統(tǒng)應(yīng)具有可修改性,即易讀,易于進(jìn)行查錯(cuò)、改錯(cuò)、可以根據(jù)環(huán)境的變化和用戶的要求進(jìn)行各種改變和改進(jìn)。系統(tǒng)是否具有可修改性,對于系統(tǒng)開發(fā)和維護(hù)影響極大。據(jù)統(tǒng)計(jì),在系統(tǒng)生命周期中各階段的應(yīng)用軟件費(fèi)用及人力投入大體分布如下:
    。系統(tǒng)開發(fā):20%
    。系統(tǒng)維護(hù):80%
    6.1.2結(jié)構(gòu)化設(shè)計(jì)的基本思想
    1.結(jié)構(gòu)化設(shè)計(jì)的要點(diǎn)
    系統(tǒng)是否具有可修改性與其結(jié)構(gòu)有著密切的關(guān)系?!敖Y(jié)構(gòu)化設(shè)計(jì)”的構(gòu)想,成為系統(tǒng)設(shè)計(jì)的基本思想。其要點(diǎn)如下:
    (1)模塊化。
    (2)由頂向下,逐步求精。系統(tǒng)劃分模塊的工作應(yīng)按層次進(jìn)行:①把整個(gè)系統(tǒng)看做一個(gè)模塊,然后把它按功能分解成若干第一層模塊,它們各擔(dān)負(fù)一定的局部功能,共同完成整個(gè)系統(tǒng)的功能。②每個(gè)第一層模塊又可以進(jìn)一步分解成為更簡單一些的第二層模塊,越下層的模塊,其功能越具體、越簡單。
    (3)上層模塊分解為下層模塊,有三種不同的結(jié)構(gòu)形式,即順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
    控制結(jié)構(gòu)圖也稱為軟件結(jié)構(gòu)圖或模塊結(jié)構(gòu)圖,它表示出一個(gè)系統(tǒng)的層次分解關(guān)系、模塊調(diào)用關(guān)系、模塊之間數(shù)據(jù)流和控制信息流的傳遞關(guān)系,它是系統(tǒng)物理結(jié)構(gòu)的主要工具。
    2.控制結(jié)構(gòu)圖的基本符號和規(guī)定
    (1)每個(gè)模塊有自身的任務(wù),只有接收到上級模塊的調(diào)用命令時(shí)才能執(zhí)行。
    (2)模塊之間的通信只限于其直接上、下級模塊,任何模塊不能直接與其他上下級模塊或同級模塊發(fā)生通信聯(lián)系。
    (3)若有某模塊要與非直接上、下級的其他模塊發(fā)生通信聯(lián)系,必須通過其上級模塊進(jìn)行傳遞。
    (4)模塊調(diào)用順序?yàn)樽陨隙?。在控制結(jié)構(gòu)圖中,把一個(gè)系統(tǒng)分解為若干模塊,實(shí)質(zhì)上是把一件比較抽象、其物理內(nèi)容不大確定的任務(wù),分解為若干件比較具體的、物理內(nèi)容比較確定的任務(wù)。
    控制結(jié)構(gòu)圖既可以反映系統(tǒng)整體結(jié)構(gòu),又能反映系統(tǒng)的細(xì)節(jié),能準(zhǔn)確反映各組成部分(各模塊)及它們之間的聯(lián)系。
    6.1.3模塊分解的規(guī)則
    1.模塊獨(dú)立性
    所謂兩個(gè)模塊彼此完全獨(dú)立,是指其中任一模塊在運(yùn)行時(shí),與另一個(gè)模塊存在無關(guān)。獨(dú)立性只是一個(gè)相對的概念。具有獨(dú)立功能而且和其他模塊之間相互作用少的模塊,稱為獨(dú)立性高的模塊。
    保證模塊獨(dú)立性高是設(shè)計(jì)一個(gè)系統(tǒng)的關(guān)鍵,它具有以下優(yōu)點(diǎn):
    (1)系統(tǒng)容易開發(fā)。系統(tǒng)開發(fā)往往由若干人分工合作完成,由于模塊之間聯(lián)系少,接口簡單,可以簡化合作者之間的協(xié)調(diào)工作。
    (2)系統(tǒng)可靠性高。模塊之間的相互影響小,當(dāng)一個(gè)模塊出錯(cuò)時(shí),產(chǎn)生波動(dòng)效應(yīng)的概率低,從而提高了系統(tǒng)的可靠性。
    (3)系統(tǒng)容易維護(hù)。在對一個(gè)模塊進(jìn)行修改和維護(hù)時(shí),不必?fù)?dān)心其他模塊的內(nèi)部是否會(huì)受到影響。
    要衡量模塊自身聯(lián)系是否緊密、與外部的聯(lián)系是否合理,需引入模塊凝聚、模塊耦合的概念。
    2.模塊凝聚
    模塊凝聚是用以衡量一個(gè)模塊內(nèi)部自身功能的內(nèi)在聯(lián)系是否緊密的指標(biāo),也是衡量模塊質(zhì)量好壞的重要標(biāo)準(zhǔn)。模塊按凝聚程度的高低可分為以下五級:
    (1)偶然凝聚。一個(gè)模塊內(nèi)部各組成部分的處理彼此無關(guān),偶然地組合在一起,這是一種組織得最差的模塊,凝聚程度最低。
    (2)邏輯凝聚。一個(gè)模塊內(nèi)部各組成部分的處理邏輯相似,但功能卻彼此不同。這種模塊通常包含一個(gè)選擇控制和若干彼此獨(dú)立的處理功能。先執(zhí)行選擇功能,再根據(jù)選擇的結(jié)果,控制執(zhí)行不同的處理功能。由于它的邏輯途徑比較復(fù)雜,修改困難,因此凝聚程度較差。
    (3)時(shí)間凝聚。這是指若干處理由于執(zhí)行時(shí)間彼此有關(guān),集中在一起組成的模塊。如初始化模塊,各處理內(nèi)容必須在特定時(shí)間內(nèi)執(zhí)行,而各處理內(nèi)容彼此無關(guān),故凝聚程度較差。時(shí)間凝聚的模塊通常要影響到其他許多模塊的運(yùn)行,因此與其他模塊之間聯(lián)系多,修改比較困難。
    (4)數(shù)據(jù)凝聚。模塊內(nèi)部包含若干處理,它們按一定的順序執(zhí)行,且前一處理所產(chǎn)生的輸出數(shù)據(jù),是后一處理的輸入數(shù)據(jù),這稱為數(shù)據(jù)凝聚模塊。這種模塊可較明確表述其功能,內(nèi)部結(jié)構(gòu)較密切,與其他模塊聯(lián)系一般較少,凝聚性較好。
    (5)功能凝聚。一個(gè)模塊只執(zhí)行一個(gè)明確的功能,即上級模塊調(diào)用它時(shí),它只完成一項(xiàng)確定的任務(wù)。這種模塊獨(dú)立性強(qiáng)、便于修改。凝聚程度高,是結(jié)構(gòu)化設(shè)計(jì)模塊的理想目標(biāo)。一個(gè)模塊的內(nèi)部凝聚程度。
    3.模塊耦合
    模塊間的信息聯(lián)系方式,稱為模塊的耦合,它是衡量模塊間結(jié)構(gòu)性能的重要指標(biāo)。耦合有三種類型:
    (1)數(shù)據(jù)耦合。兩個(gè)模塊間通過調(diào)用關(guān)系傳遞被處理的數(shù)據(jù)稱為數(shù)據(jù)耦合。
    (2)控制耦合。兩個(gè)模塊間通過調(diào)用關(guān)系,不僅傳遞數(shù)據(jù),還傳遞對運(yùn)行過程有影響的控制信號。下層模塊執(zhí)行校驗(yàn)功能,校驗(yàn)結(jié)果的控制信號傳回上層模塊,以控制其他模塊的運(yùn)行。如數(shù)據(jù)正確,調(diào)用正常處理模塊;如數(shù)據(jù)異常,或遇到文件尾等不同情況時(shí),調(diào)用不同處理模塊,這種耦合使一個(gè)模塊的執(zhí)行直接影響到接受該控制信號的模塊的運(yùn)行。這對于系統(tǒng)的修改工作是不利的,特別是對自下向上傳遞的控制信號,影響面更大。因此,應(yīng)當(dāng)盡量將這種耦合減少到最低限度。
    (3)非法耦合。一個(gè)模塊與另一個(gè)模塊內(nèi)部發(fā)生聯(lián)系,即一個(gè)模塊中的某些內(nèi)容在另一模塊中以某種方式被引用,稱為非法耦合。例如,不經(jīng)過調(diào)用關(guān)系,直接使用或修改另一模塊中的數(shù)據(jù),將控制選擇指向另一模塊中的某一標(biāo)號(節(jié)、過程)等。
    模塊間數(shù)據(jù)耦合是最正常的方式,為保持模塊的獨(dú)立性,模塊之間互相傳遞的數(shù)據(jù)要盡量少;要努力避免控制耦合,特別是避免自下而上傳遞控制信號;應(yīng)消除任何形式的非法耦合。
    6.1.4控制結(jié)構(gòu)圖的繪制
    繪制控制結(jié)構(gòu)圖的依據(jù)是數(shù)據(jù)流程圖。繪制控制結(jié)構(gòu)圖,首先是將上層數(shù)據(jù)流程圖映射為上層控制結(jié)構(gòu)圖,由頂層數(shù)據(jù)流程圖開始,逐級下推。
    每一層數(shù)據(jù)流程圖(DFD)中的“處理功能”,映射為相應(yīng)層次控制結(jié)構(gòu)圖中的“模塊”;而DFD中流人“處理功能”的數(shù)據(jù)流映射為輸入模塊的數(shù)據(jù)流,DFD中流出“處理功能”的數(shù)據(jù)流映射成從“模塊”中輸出的數(shù)據(jù)流。能結(jié)構(gòu);另一方面應(yīng)按照模塊分解的規(guī)則,將凝聚程度低的、或具有控制耦合、非法耦合的結(jié)構(gòu)進(jìn)行分解。
    低層次模塊結(jié)構(gòu)的分解,一方面可參照低層次數(shù)據(jù)流程圖的功
    分解時(shí)采用以下兩種不同的方式:
    1.以轉(zhuǎn)換為中心結(jié)構(gòu)的分解
    如果待分解的模塊是一個(gè)數(shù)據(jù)凝聚的模塊,即內(nèi)部包含若干順序執(zhí)行且對某些數(shù)據(jù)進(jìn)行轉(zhuǎn)換處理,稱為以轉(zhuǎn)換為中心的結(jié)構(gòu)。這種模塊可分解為輸入、處理、輸出三大部分。
    2.以業(yè)務(wù)為中心結(jié)構(gòu)的分解
    待分解的模塊要處理幾項(xiàng)邏輯上相似的業(yè)務(wù),即它是一個(gè)邏輯凝聚的模塊。這種模塊可以將之分解為一個(gè)檢查業(yè)務(wù)類型的模塊和一個(gè)調(diào)度模塊,根據(jù)不同的業(yè)務(wù)類型,調(diào)度模塊調(diào)用不同的下層模塊,進(jìn)行不同的處理。
    以上兩種分解方式常常要混合使用,以達(dá)到模塊凝聚程度高、模塊之間獨(dú)立性強(qiáng)、易于修改的目的。
    6.2數(shù)據(jù)庫設(shè)計(jì)
    6.2.1數(shù)據(jù)庫設(shè)計(jì)的要求和步驟
    1.數(shù)據(jù)庫設(shè)計(jì)的要求
    數(shù)據(jù)庫設(shè)計(jì)的目標(biāo)是建立一個(gè)合適的數(shù)據(jù)模型。這個(gè)數(shù)據(jù)模型應(yīng)當(dāng)是:
    (1)滿足用戶要求:既能合理地組織用戶需要的所有數(shù)據(jù),又能支持用戶對數(shù)據(jù)的所有處理功能。
    (2)滿足某個(gè)數(shù)據(jù)庫管理系統(tǒng)的要求:能夠在數(shù)據(jù)庫管理系統(tǒng)中實(shí)現(xiàn)。
    (3)具有較高的范式:數(shù)據(jù)完整性好、效益高,便于理解和維護(hù),沒有數(shù)據(jù)沖突。
    2.數(shù)據(jù)庫設(shè)計(jì)步驟
    數(shù)據(jù)庫設(shè)計(jì)可以分為概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)和物理結(jié)構(gòu)設(shè)計(jì)三個(gè)階段。
    (1)概念結(jié)構(gòu)設(shè)計(jì)。這是數(shù)據(jù)庫設(shè)計(jì)的第一個(gè)階段,在管理信息系統(tǒng)的分析階段,已經(jīng)得到了系統(tǒng)的數(shù)據(jù)流程圖和數(shù)據(jù)字典,現(xiàn)在要結(jié)合數(shù)據(jù)規(guī)范化的理論,用一種數(shù)據(jù)模型將用戶的數(shù)據(jù)需求明確地表示出來。
    概念數(shù)據(jù)模型是面向問題的模型,反映了用戶的現(xiàn)實(shí)工作環(huán)境,是與數(shù)據(jù)庫的具體實(shí)現(xiàn)技術(shù)無關(guān)的。建立系統(tǒng)概念數(shù)據(jù)模型的過程叫做概念結(jié)構(gòu)設(shè)計(jì)。
    (2)邏輯結(jié)構(gòu)設(shè)計(jì)。根據(jù)已經(jīng)建立的概念數(shù)據(jù)模型,以及所采用的某個(gè)數(shù)據(jù)庫管理系統(tǒng)軟件的數(shù)據(jù)模型特性,按照一定的轉(zhuǎn)換規(guī)則,把概念模型轉(zhuǎn)換為這個(gè)數(shù)據(jù)庫管理系統(tǒng)所能夠接受的邏輯數(shù)據(jù)模型。不同的數(shù)據(jù)庫管理系統(tǒng)提供了不同的邏輯數(shù)據(jù)模型,如層次模型、網(wǎng)狀模型、關(guān)系模型等。
    (3)物理結(jié)構(gòu)設(shè)計(jì)。為一個(gè)確定的邏輯數(shù)據(jù)模型選擇一個(gè)最適合應(yīng)用要求的物理結(jié)構(gòu)的過程,就叫做數(shù)據(jù)庫的物理結(jié)構(gòu)設(shè)計(jì)。數(shù)據(jù)庫在物理設(shè)備上的存儲(chǔ)結(jié)構(gòu)和存取方法稱為數(shù)據(jù)庫的物理數(shù)據(jù)模型。
    6.2.2概念結(jié)構(gòu)設(shè)計(jì)
    描述概念數(shù)據(jù)模型的主要工具是E-R(實(shí)體一聯(lián)系)模型,或者叫做E-R圖。利用E-R圖實(shí)現(xiàn)概念結(jié)構(gòu)設(shè)計(jì)的方法就叫做E-R方法。
    1.概念模型的表示方法
    E-R圖主要是由實(shí)體、屬性和聯(lián)系三個(gè)要素構(gòu)成的。在E-R圖中,使用了下面四種基本的圖形符號。
    2.確定系統(tǒng)實(shí)體、屬性及聯(lián)系
    利用系統(tǒng)分析階段建立的數(shù)據(jù)字典,并對照數(shù)據(jù)流程圖對系統(tǒng)中的各個(gè)數(shù)據(jù)項(xiàng)進(jìn)行分類、組織,確定系統(tǒng)中的實(shí)體、實(shí)體的屬性、標(biāo)識(shí)實(shí)體的碼以及實(shí)體之間聯(lián)系的類型。
    在數(shù)據(jù)字典中“數(shù)據(jù)項(xiàng)”是基本數(shù)據(jù)單位,一般可以作為實(shí)體的屬性?!皵?shù)據(jù)結(jié)構(gòu)”、“數(shù)據(jù)存儲(chǔ)”和“數(shù)據(jù)流”條目都可以作為實(shí)體,因?yàn)樗鼈兛偸前巳舾傻臄?shù)據(jù)項(xiàng)。作為屬性必須是不可再分的數(shù)據(jù)項(xiàng),也就是說在屬性中不能包含其他的屬性。
    3.確定局部(分) E-R圖
    根據(jù)上面的分析,可以畫出部分實(shí)體-聯(lián)系圖。
    在這些實(shí)體中有下畫線的屬性可以作為實(shí)體的碼,這幾個(gè)實(shí)體之間存在著1:1、l:n和m:n幾種聯(lián)系。
    4.集成完整(總) E-R圖
    各個(gè)局部(分) E-R圖畫好以后,應(yīng)當(dāng)將它們合并起來集成為完整(總) E-R圖。在集成時(shí)應(yīng)當(dāng)注意如下幾點(diǎn):
    (1)消除不必要的冗余實(shí)體、屬性和聯(lián)系。
    (2)解決各分E-R圖之間的沖突。
    (3)根據(jù)情況修改或重構(gòu)E-R圖。
    6.2.3邏輯結(jié)構(gòu)設(shè)計(jì)
    邏輯結(jié)構(gòu)設(shè)計(jì)的任務(wù),就是把概念結(jié)構(gòu)設(shè)計(jì)階段建立的基本E-R圖,按選定的管理系統(tǒng)軟件支持的數(shù)據(jù)模型(層次、網(wǎng)狀、關(guān)系),轉(zhuǎn)換成相應(yīng)的邏輯模型。這種轉(zhuǎn)換要符合關(guān)系數(shù)據(jù)模型的原則。
    E-R圖向關(guān)系模型的轉(zhuǎn)換是要解決如何將實(shí)體和實(shí)體間的聯(lián)系轉(zhuǎn)換為關(guān)系,并確定這些關(guān)系的屬性和碼。這種轉(zhuǎn)換一般按下面的原則進(jìn)行:
    (1)一個(gè)實(shí)體轉(zhuǎn)換為一個(gè)關(guān)系,實(shí)體的屬性就是關(guān)系的屬性,實(shí)體的碼就是關(guān)系的碼。
    (2)一個(gè)聯(lián)系也轉(zhuǎn)換為一個(gè)關(guān)系,聯(lián)系的屬性及聯(lián)系所連接的實(shí)體的碼都轉(zhuǎn)換為關(guān)系的屬性,但是關(guān)系的碼會(huì)根據(jù)聯(lián)系的類型變化,如果是:
    1:1聯(lián)系,兩端實(shí)體的碼都成為關(guān)系的候選碼。
    1:n聯(lián)系,n端實(shí)體的碼成為關(guān)系的碼。
    m:n聯(lián)系,兩端實(shí)體碼的組合成為關(guān)系的碼。
    (3)具有相同碼的關(guān)系可以合并。
    1.轉(zhuǎn)換關(guān)系
    2.合并關(guān)系
    6.3數(shù)據(jù)庫的物理實(shí)現(xiàn)
    數(shù)據(jù)庫設(shè)計(jì)的最后階段是確定數(shù)據(jù)庫在物理設(shè)備上的存儲(chǔ)結(jié)構(gòu)和存取方法,也就是設(shè)計(jì)數(shù)據(jù)庫的物理數(shù)據(jù)模型。
    6.3.1建立VFP的數(shù)據(jù)表
    數(shù)據(jù)表也簡稱表,在VFP中數(shù)據(jù)表一般應(yīng)當(dāng)包含在數(shù)據(jù)庫中,叫做數(shù)據(jù)庫表(簡稱庫表);但是也可以獨(dú)立存在,叫做自由表。
    數(shù)據(jù)庫邏輯數(shù)據(jù)模型的一個(gè)關(guān)系對應(yīng)了VFP軟件中的一個(gè)表,關(guān)系的屬性對應(yīng)了表的字段,關(guān)系框架對應(yīng)了表結(jié)構(gòu),關(guān)系元組對應(yīng)了表記錄。
    1.建立數(shù)據(jù)表結(jié)構(gòu)
    (1)設(shè)計(jì)數(shù)據(jù)表。在利用VFP創(chuàng)建一個(gè)新的數(shù)據(jù)表文件以前,應(yīng)當(dāng)根據(jù)邏輯模型和數(shù)據(jù)字典先分析和設(shè)計(jì)數(shù)據(jù)表。需要確定數(shù)據(jù)表名稱,所含字段名稱、類型、寬度以及應(yīng)當(dāng)建立的索引字段等。
    (2)創(chuàng)建數(shù)據(jù)表。在VFP的主窗口,單擊工具欄“新建”按鈕,打開“新建”對話框。在文件類型框中選定“表”選項(xiàng),單擊“新建”按鈕,打開“創(chuàng)建”新文件的對話框。
    在表設(shè)計(jì)器中我們已經(jīng)可逐次鍵入字段名、類型、寬度及小數(shù)位數(shù)的信息。
    2.數(shù)據(jù)表記錄的輸入
    在創(chuàng)建數(shù)據(jù)表時(shí)可以根據(jù)系統(tǒng)提示直接輸入記錄,但是也可以暫時(shí)不輸入記錄。沒有記錄只有結(jié)構(gòu)的數(shù)據(jù)表叫做空表。
    文件有兩種打開方式,“以只讀方式打開”的文件是不能編輯修改的。因?yàn)椴恍枰肮蚕怼睌?shù)據(jù),我們選擇用“獨(dú)占”方式打開文件。單擊“確定”按鈕后數(shù)據(jù)表文件被打開。
    (3)追加記錄。首先在主菜單的“顯示”下拉菜單中,單擊“劉覽”選項(xiàng),打開表的瀏覽窗口。
    ①追加一條記錄。②連續(xù)追加。③成組追加。
    3.瀏覽數(shù)據(jù)表記錄
    6.3.2建立VFP的數(shù)據(jù)庫
    前面建立的表都是自由表,而實(shí)際上一個(gè)應(yīng)用系統(tǒng)總是由多個(gè)相關(guān)表構(gòu)成的。要在多個(gè)自由表之間建立聯(lián)系,必須通過數(shù)據(jù)庫來實(shí)現(xiàn)。
    數(shù)據(jù)庫本身是不存儲(chǔ)數(shù)據(jù)的,它只存儲(chǔ)表、視圖及它們之間的關(guān)系等。在數(shù)據(jù)庫中的表叫做數(shù)據(jù)庫表,數(shù)據(jù)庫為數(shù)據(jù)表提供了數(shù)據(jù)字典、各種數(shù)據(jù)保護(hù)和數(shù)據(jù)管理功能,所以數(shù)據(jù)庫表比自由表要完善得多。一個(gè)數(shù)據(jù)庫是由數(shù)據(jù)庫文件(。DBC)、數(shù)據(jù)庫備注文件(。DCT)和數(shù)據(jù)庫索引文件(。DCX) H類文件組成的。
    l.建立數(shù)據(jù)庫文件
    2.創(chuàng)建數(shù)據(jù)庫表
    可以直接在數(shù)據(jù)庫中建立數(shù)據(jù)表,也可以將自由表添加到數(shù)據(jù)庫中,但是不能將另一個(gè)數(shù)據(jù)庫中的表拉到當(dāng)前數(shù)據(jù)庫中來??梢栽谕粋€(gè)數(shù)據(jù)庫中建立多個(gè)表。
    (1)添加數(shù)據(jù)表。打開選定數(shù)據(jù)庫的“數(shù)據(jù)庫設(shè)計(jì)器”窗口,在“數(shù)據(jù)庫設(shè)計(jì)器”工具欄中,單擊“添加表”選項(xiàng),將會(huì)彈出“打開”窗口,選擇要添加的表后,單擊“確定”按鈕,就可以把一個(gè)自由表添加到當(dāng)前數(shù)據(jù)庫中,并將自由表變成數(shù)據(jù)庫表。
    (2)創(chuàng)建數(shù)據(jù)庫表。也可以在數(shù)據(jù)庫設(shè)計(jì)器中直接創(chuàng)建數(shù)據(jù)表。首先單擊“數(shù)據(jù)庫設(shè)計(jì)器”工具欄的“新建表”按鈕,然后在對話框中單擊“新建表”按鈕,將打開數(shù)據(jù)庫“表設(shè)計(jì)器”。
    通過這幾個(gè)控制區(qū)信息的描述,可以實(shí)現(xiàn)數(shù)據(jù)庫對數(shù)據(jù)表的管理功能。
    數(shù)據(jù)庫表添加或創(chuàng)建完成以后,關(guān)閉數(shù)據(jù)庫設(shè)計(jì)器窗口。包含了數(shù)據(jù)表的數(shù)據(jù)庫文件就保存在外存儲(chǔ)器中。
    3.數(shù)據(jù)庫文件的打開與關(guān)閉
    (1)數(shù)據(jù)庫文件的打開。一般通過單擊主菜單“文件”下拉菜單的“打開”功能。在彈出的“打開”對話框窗口選定數(shù)據(jù)庫文件后,單擊“打開”按鈕打開。
    在打開一個(gè)數(shù)據(jù)庫表的時(shí)候,系統(tǒng)也會(huì)自動(dòng)先打開其數(shù)據(jù)庫文件,然后再打開選定的表。
    (2)數(shù)據(jù)庫文件的關(guān)閉。除了可以通過像關(guān)閉其他Windows窗口一樣,關(guān)閉“數(shù)據(jù)庫設(shè)計(jì)器”窗口來關(guān)閉當(dāng)前數(shù)據(jù)庫以外,還可以使用專門的命令來關(guān)閉數(shù)據(jù)庫。
    6.3.3設(shè)置數(shù)據(jù)表的索引
    1.索引表和索引文件
    用戶對數(shù)據(jù)表常常會(huì)有不同的需求,為了加快數(shù)據(jù)的檢索、顯示、查詢和打印速度,就需要對文件中的記錄順序進(jìn)行重組。實(shí)現(xiàn)的方法一般有兩種:一種叫做排序;另一種叫做索引。
    排序的作用是按指定字段或字段組中數(shù)據(jù)值的大小順序,以遞增(升序)或遞減(降序)方式重新排列全部數(shù)據(jù)記錄,并生成一個(gè)新的數(shù)據(jù)表文件。
    索引不建立一個(gè)新的數(shù)據(jù)表文件,只是按照給定字段表達(dá)式值的大小,生成一個(gè)索引表,并使數(shù)據(jù)表中的記錄按索引表的要求以遞增(升序)或遞減(降序)順序顯示。
    索引技術(shù)除可以重新排列數(shù)據(jù)表記錄的前后順序外,在建立數(shù)據(jù)表間的關(guān)聯(lián)時(shí),或者利用SQL語言建立查詢、視圖時(shí),都必須靠索引技術(shù)來支持。
    2.索引關(guān)鍵字的類型
    索引關(guān)鍵字:是由一個(gè)或若干個(gè)字段構(gòu)成的索引表達(dá)式。索引表達(dá)式的類型決定了不同的索引方式。VFP系統(tǒng)提供了四種不同的類型,它們分別是主索引、候選索引、普通索引和惟一索引。
    (1)主索引。主索引是能夠惟一地確定數(shù)據(jù)表中一條記錄的字段或字段組合表達(dá)式;要求該字段或字段組合表達(dá)式的值,在數(shù)據(jù)表的全部記錄中都不能出現(xiàn)重復(fù)。
    主索引只能在數(shù)據(jù)庫表中創(chuàng)建和使用,而且一個(gè)數(shù)據(jù)表只能指定一個(gè)主索引。表的主索引就相當(dāng)于關(guān)系的主碼。
    (2)候選索引。候選索引像主索引一樣,是能夠惟一地確定數(shù)據(jù)表中一條記錄的字段或字段組合表達(dá)式。但是,一個(gè)數(shù)據(jù)表允許建立多個(gè)候選索引,可以在數(shù)據(jù)庫表或自由表中創(chuàng)建候選索引。如果將一個(gè)包含了重復(fù)數(shù)據(jù)的字段指定為候選索引,系統(tǒng)會(huì)返回一個(gè)出錯(cuò)信息,并禁止創(chuàng)建該索引。表的候選索引相當(dāng)于關(guān)系的候選碼。
    (3)普通索引。普通索引允許數(shù)據(jù)表中各記錄的索引字段或字段組合表達(dá)式的值相同,而且既允許在數(shù)據(jù)庫表中創(chuàng)建,也允許在自由表中創(chuàng)建。
    (4)索引。索引是VFP為保持與低版本軟件的兼容性而保留的一種索引類型,一般情況下很少使用。它允許數(shù)據(jù)表中各記錄的索引字段,或字段組合表達(dá)式的值相同,但是在索引表中只保留數(shù)據(jù)表中與索引字段值相同的第一條記錄。
    3.創(chuàng)建索引文件
    可以使用命令建立索引文件,但是利用表設(shè)計(jì)器創(chuàng)建索引文件更加直觀、方便。結(jié)構(gòu)復(fù)合索引文件可以在創(chuàng)建數(shù)據(jù)表時(shí)建立,也可以對已經(jīng)建立好的數(shù)據(jù)表創(chuàng)建或修改索引。
    4.索引的操作
    (l)打開與關(guān)閉。要使用索引,必須先要打開索引。結(jié)構(gòu)復(fù)合索引總是隨著數(shù)據(jù)表打開,一旦數(shù)據(jù)表文件關(guān)閉,相應(yīng)的索引文件也就自動(dòng)關(guān)閉了。
    (2)確定主索引。結(jié)構(gòu)復(fù)合索引打開后,其中的索引標(biāo)識(shí)(Tag)并不起作用,數(shù)據(jù)表記錄順序仍然保持著原始自然排列。必須要執(zhí)行確定主索引的操作后,數(shù)據(jù)表記錄的排列順序才會(huì)跟著變化。
    在程序中常常使用命令方式確定當(dāng)前主索引。
    (3)刪除索引標(biāo)識(shí)。要?jiǎng)h除結(jié)構(gòu)復(fù)合索引文件中的索引標(biāo)識(shí),應(yīng)當(dāng)打開數(shù)據(jù)表文件,并打開其表設(shè)計(jì)器對話框。在“索引”頁卡中選定要?jiǎng)h除的索引標(biāo)識(shí)后,單擊“刪除”按鈕刪除。
    6.3.4創(chuàng)建數(shù)據(jù)表之間的關(guān)聯(lián)
    對于數(shù)據(jù)庫中各相關(guān)數(shù)據(jù)表之間的聯(lián)系必須通過建立關(guān)聯(lián)來實(shí)現(xiàn)。
    數(shù)據(jù)表是和關(guān)系相對應(yīng)的,所以數(shù)據(jù)表之間的聯(lián)系也可以分為一對一、一對多和多對多三類。但是在實(shí)際處理時(shí),往往把一個(gè)多對多的聯(lián)系分解成兩個(gè)一對多的聯(lián)系處理。
    1.創(chuàng)建關(guān)聯(lián)
    在VFP中,表間的聯(lián)系有“永久性關(guān)聯(lián)”和“臨時(shí)性關(guān)聯(lián)”兩種:臨時(shí)性關(guān)聯(lián)只是在使用時(shí)臨時(shí)建立的表間聯(lián)系,一旦關(guān)閉數(shù)據(jù)表則臨時(shí)性關(guān)聯(lián)也就消失了;永久性關(guān)聯(lián)是被存放在數(shù)據(jù)庫中的數(shù)據(jù)表間聯(lián)系,它將隨數(shù)據(jù)庫長期保存,隨著數(shù)據(jù)庫的打開而打開、關(guān)閉而關(guān)閉。
    在創(chuàng)建數(shù)據(jù)表之間的關(guān)聯(lián)時(shí),當(dāng)前表叫做父表,要關(guān)聯(lián)的表叫做子表。必須保證兩個(gè)要建立關(guān)聯(lián)的數(shù)據(jù)表中存在同名字段;同時(shí)要求每個(gè)數(shù)據(jù)表事先分別對該字段建立了索引。
    (1)建立表間的一對一關(guān)系。首先,要使兩個(gè)表都具有同一屬性的字段;其次,定義父表與子表中同名宇段為主索引字段或候選索引字段。由于兩個(gè)表中的同一屬性的字段值都是惟一的,因此兩個(gè)表之間的關(guān)聯(lián)就是“一對一”的。
    (2)建立表間的一對多關(guān)系。首先,要使兩個(gè)表都具有同一名稱、屬性的字段;其次,定義父表中該字段為主索引字段或候選索引字段(其字段值是惟一的),子表中與其同名的字段為普通索引字段。由于兩個(gè)表中的同一屬性的字段值是一對多的關(guān)系,因此可以創(chuàng)建兩個(gè)表之間的“一對多”的關(guān)系。
    2.調(diào)整或刪除關(guān)聯(lián)
    修改主要有兩個(gè)方面:
    (l)刪除關(guān)聯(lián)。在數(shù)據(jù)庫設(shè)計(jì)器對話框窗口中,用鼠標(biāo)左鍵單擊關(guān)聯(lián)線,該連線變粗了則說明它已經(jīng)被選中。如果要?jiǎng)h除可敲[Del]鍵,也可以單擊鼠標(biāo)右鍵在彈出對話框窗口中單擊“刪除關(guān)系”選項(xiàng)。
    (2)編輯關(guān)聯(lián)。在數(shù)據(jù)庫設(shè)計(jì)器對話框窗口中,用鼠標(biāo)左鍵單擊關(guān)聯(lián)線,該連線變粗了則說明它已經(jīng)被選中。在主菜單“數(shù)據(jù)庫”選項(xiàng)的下拉菜單中單擊“編輯關(guān)系”選項(xiàng),也可以單擊鼠標(biāo)右鍵在彈出對話框窗口中單擊“編輯關(guān)系”選項(xiàng),這樣將會(huì)打開其對話框窗口。
    可以在“表”和“相關(guān)表”的下拉列表框中重新選擇新的相應(yīng)索引字段。
    6.3.5創(chuàng)建視圖
    在數(shù)據(jù)庫的概念結(jié)構(gòu)設(shè)計(jì)中,用戶的局部概念模式是全局概念模式的子集,叫做用戶模式、外模式,它是從用戶的觀點(diǎn)看到的數(shù)據(jù)庫,所以也叫做用戶的視圖。
    在VFP中,視圖是數(shù)據(jù)庫的一個(gè)部分,分為本地視圖和遠(yuǎn)程視圖兩類。本地視圖是利用本地?cái)?shù)據(jù)庫表、自由表及其他視圖建立在本地服務(wù)器上的視圖。遠(yuǎn)程視圖是利用遠(yuǎn)程服務(wù)器中的數(shù)據(jù)建立的視圖。視圖也以文件的形式保存在存儲(chǔ)器中,文件擴(kuò)展名為。VUE.視圖是一種特殊類型的數(shù)據(jù)表,它往往由一個(gè)或多個(gè)表(或視圖)中的部分字段或部分記錄組成。雖然從用戶的角度看,視圖也像數(shù)據(jù)表一樣有自己的名字,相應(yīng)的字段、記錄,具備了一般數(shù)據(jù)表的特征,可是在實(shí)際存儲(chǔ)器中并沒有這樣的數(shù)據(jù)實(shí)體;在數(shù)據(jù)庫中僅存放了與關(guān)聯(lián)數(shù)據(jù)表相應(yīng)的連接關(guān)系和操作要求。所以該視圖可稱為“虛表”或邏輯表。一般建立視圖的目的有三個(gè):
    ①數(shù)據(jù)庫系統(tǒng)是供多用戶使用的,不同的用戶只能查看與自己相關(guān)的一部分?jǐn)?shù)據(jù),以保障數(shù)據(jù)的安全和完整。視圖可以為每個(gè)用戶建立自己的數(shù)據(jù)集合。
    ②為了保證數(shù)據(jù)表具有較高的范式,往往將一個(gè)數(shù)據(jù)集合分解成多個(gè)相關(guān)的數(shù)據(jù)表。而在使用多個(gè)表的數(shù)據(jù)時(shí),將各表中有用的數(shù)據(jù)集中到一個(gè)視圖是最方便的辦法。
    ③簡化對數(shù)據(jù)庫的操作管理。只要事先將各表中相關(guān)數(shù)據(jù)項(xiàng)集中放在一個(gè)視圖中,通過視圖就可以同時(shí)更新各表中的數(shù)據(jù)。
    6.4代碼設(shè)計(jì)
    代碼是計(jì)算機(jī)和人都容易理解的符號(或語言),能夠?qū)崿F(xiàn)人和計(jì)算機(jī)的溝通。代碼的重要性表現(xiàn)在以下幾個(gè)方面。
    ??梢晕┮坏貥?biāo)識(shí)一個(gè)分類對象(實(shí)體)。
    。加快輸入,減少出錯(cuò),便于存儲(chǔ)和檢索,節(jié)省存儲(chǔ)空間。
    。使數(shù)據(jù)的表達(dá)標(biāo)準(zhǔn)化。簡化處理程序,提高處理互效率。
    代碼也叫信息編碼,是作為事物(實(shí)體)惟一標(biāo)識(shí)的、一組有序字符組合。它必須便于計(jì)算機(jī)和人識(shí)別、處理。
    6.4.1代碼設(shè)計(jì)方法
    1.代碼設(shè)計(jì)的原則
    。惟一性:是區(qū)別系統(tǒng)中每個(gè)實(shí)體或?qū)傩缘奈┮粯?biāo)識(shí)。
    。簡單性:盡量壓縮代碼長度,可降低出錯(cuò)機(jī)會(huì)。
    。易識(shí)別性:為便于記憶、減少出錯(cuò),代碼應(yīng)當(dāng)邏輯性強(qiáng),表意明確。
    ??蓴U(kuò)充性:不需要變動(dòng)原代碼體系,可直接追加新代碼,以適應(yīng)系統(tǒng)發(fā)展。
    。合理性:必須在邏輯上滿足應(yīng)用需要,在結(jié)構(gòu)上與處理方法相一致。
    。規(guī)范性:盡可能采用現(xiàn)有的國標(biāo)、部標(biāo)編碼,結(jié)構(gòu)統(tǒng)一。
    2.代碼的類型
    代碼的類型是指代碼符號的表示形式,進(jìn)行代碼設(shè)計(jì)時(shí)可選擇一種或幾種代碼類型組合。
    (1)順序碼。它也叫序列碼,用連續(xù)數(shù)字作為每個(gè)實(shí)體的標(biāo)識(shí)。編碼順序可以是實(shí)體出現(xiàn)的先后,或?qū)嶓w名的字母順序等。其優(yōu)點(diǎn)是簡單、易處理、易擴(kuò)充、用途廣;缺點(diǎn)是沒有邏輯含義、不能表示信息特征、無法插人、刪除數(shù)據(jù)將造成空碼。
    (2)重復(fù)碼。采用與原來手工系統(tǒng)相同的編碼,叫做重復(fù)碼。其優(yōu)點(diǎn)是容易被原系統(tǒng)人員接受、易實(shí)現(xiàn)、便于推廣;缺點(diǎn)是不能任意更改、可能不盡合理。
    (3)成組碼。它是最常用的一種編碼、它將代碼分為幾段(組),每段表示一種含義,每段都由連續(xù)數(shù)字組成。其優(yōu)點(diǎn)是簡單、方便、能夠反映出分類體系、易校對、易處理;缺點(diǎn)是位數(shù)多不便記憶,必須為每段預(yù)留編碼,否則不易擴(kuò)充。例如:身份證編碼共17位:
    (4)表意碼。它將表示實(shí)體特征的文字、數(shù)字或記號直接作為編碼。其優(yōu)點(diǎn)是可以直接明白編碼含義、易理解、易記憶;缺點(diǎn)是編碼長度位數(shù)可變,給分類、處理帶來不便。例如:網(wǎng)站代碼:
    (5)專用碼。它是具有特殊用途的編碼,如漢字國標(biāo)碼、五筆字型編碼、自然碼、ASCll代碼等。
    (6)組合碼。它也叫合成碼、復(fù)雜碼。它由若干種簡單編碼組合而成,使用十分普遍。其優(yōu)點(diǎn)是容易分類、容易增加編碼層次、可以從不同角度識(shí)別編碼、容易實(shí)現(xiàn)多種分類統(tǒng)計(jì);缺點(diǎn)是編碼位數(shù)和數(shù)據(jù)項(xiàng)個(gè)數(shù)較多。
    3.代碼的校驗(yàn)
    為了減少編碼過程中的錯(cuò)誤,需要使用編碼校驗(yàn)技術(shù)。這是在原有代碼的基礎(chǔ)上,附加校驗(yàn)碼的技術(shù)。校驗(yàn)碼是根據(jù)事先規(guī)定好的算法構(gòu)成的,將它附加到代碼本體上以后,成為代碼的一個(gè)組成部分。當(dāng)代碼輸入計(jì)算機(jī)以后,系統(tǒng)將會(huì)按規(guī)定好的算法驗(yàn)證,從而檢測代碼的正確性。
    常用的簡單校驗(yàn)碼是在原代碼上增加一個(gè)校驗(yàn)位,并使得校驗(yàn)位成為代碼結(jié)構(gòu)中的一部分。系統(tǒng)可以按規(guī)定的算法對校驗(yàn)位進(jìn)行檢測,校驗(yàn)位正確,便認(rèn)為輸入代碼正確。