亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

數(shù)據(jù)庫系統(tǒng)的存取程序無效的制作方法

文檔序號(hào):6405920閱讀:208來源:國知局
專利名稱:數(shù)據(jù)庫系統(tǒng)的存取程序無效的制作方法
總的說來,本發(fā)明涉及數(shù)字計(jì)算機(jī)的數(shù)據(jù)庫有關(guān)更確切地說,是涉及一種可以保證在某些操作過程中的數(shù)據(jù)庫內(nèi)部的參考完整性的方法。
為了提高數(shù)字計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)庫的存取速度,包括數(shù)據(jù)庫存取指令的源文件可以被編輯成存取程序(access plan)。這些存取程序包含低級(jí)的過程語句來有效地從數(shù)據(jù)庫中存取。運(yùn)行時(shí),不是由數(shù)據(jù)庫管理程序來解釋存取命令,而是執(zhí)行存取程序,這樣系統(tǒng)性能得到了改善。
為了保持參考的完整性,當(dāng)修改數(shù)據(jù)庫時(shí),必須滿足大量的約束條件。參考的完整性是指涉及整個(gè)數(shù)據(jù)庫的一致的狀態(tài)。實(shí)現(xiàn)這些約束條件的過程代碼可以被容納在存取程序中。當(dāng)數(shù)據(jù)庫被修改時(shí),執(zhí)行這一修改的存取程序中的過程代碼就實(shí)現(xiàn)了所有必要的一致性檢查。
當(dāng)兩個(gè)數(shù)據(jù)庫目標(biāo)(如表)之間的關(guān)系改變時(shí),用來進(jìn)行檢查,以確保參考穩(wěn)定性的約束條件也必須改變。這就意味著,依賴于改變了的關(guān)系的存取程序必須重新編譯,也叫做重新連接。
當(dāng)一個(gè)存取程序建立時(shí),關(guān)于這一程序?qū)ζ渌鼣?shù)據(jù)序目標(biāo)的相關(guān)性(dependency)表也就確立了。在現(xiàn)有的系統(tǒng)中,如果一個(gè)改變了的關(guān)系影響了任何與存取程序相關(guān)的數(shù)據(jù)庫目標(biāo),這個(gè)存取程序就無效了。在一個(gè)無效的存取程序可以被執(zhí)行以前,必須重新編譯。重新編譯的過程將把改變的關(guān)系考慮進(jìn)去。一個(gè)關(guān)系的改變可能影響大量的存取程序。而每一個(gè)存取程序在將來執(zhí)行以前必須重新編譯。把命令編譯成存取程序是一個(gè)很費(fèi)時(shí)間的過程,如果可能的話,最好避免這樣做。
人們希望能提供一種僅當(dāng)必要時(shí)重新編譯存取程序的方法,最好只是在實(shí)施參考的約束條件的程序代碼在兩個(gè)程序目標(biāo)之間的關(guān)系改變之后必須在存取程序中改變,才使標(biāo)記的存取程序無效。
提供一種選擇要作廢的,且僅選擇那些必須修改以適應(yīng)參考的約束條件改變的存取程序的方法,這是本發(fā)明的一個(gè)目的。
提供這樣一種方法能夠有效地決定哪些存取程序必須被作廢,這是本發(fā)明的下一個(gè)目的。
提供這樣一種方法,能夠確保數(shù)據(jù)庫的參考完整性,這是本發(fā)明的另一個(gè)目的。
根據(jù)本發(fā)明,對(duì)于數(shù)據(jù)庫系統(tǒng)的每一個(gè)存取程序,其相關(guān)性由每一個(gè)與存取程序相關(guān)的數(shù)據(jù)庫目標(biāo)來決定。每個(gè)相關(guān)性都有一種類型。當(dāng)數(shù)據(jù)庫目標(biāo)之間的一個(gè)關(guān)系改變時(shí),對(duì)應(yīng)于那些目標(biāo)的每一個(gè)存取程序的相關(guān)性就確定了。如果一個(gè)存取程序具有依賴于受影響的數(shù)據(jù)庫目標(biāo)的相關(guān)性,且這些數(shù)據(jù)庫目標(biāo)屬于預(yù)選的相關(guān)類型的子集,那個(gè)存取程序就無效了,如果存取程序不在預(yù)選的相關(guān)性類型的子集之內(nèi),這個(gè)程序仍然是有效的,而且不需要重新編譯。
本發(fā)明的新穎特點(diǎn)(申請(qǐng)人相信是特征)見下面的權(quán)利要求書。然而,這發(fā)明的本身,以及更好的使用方式,進(jìn)一步的目標(biāo)及優(yōu)點(diǎn),在參考了與附圖聯(lián)系起來的詳細(xì)描述就會(huì)非常清楚了。其中

圖1是顯示與數(shù)據(jù)庫系統(tǒng)中存取程序相關(guān)性的方框圖。
圖2是數(shù)據(jù)庫目標(biāo)之間關(guān)系圖。
圖3是描述圖2目標(biāo)中選出的存取程序語句的相關(guān)性表。
圖4是當(dāng)一個(gè)新的外來關(guān)鍵字建立時(shí),檢查存取程序相關(guān)性的操作方法方框圖。
圖5是當(dāng)一個(gè)新的外來關(guān)鍵字取消時(shí),檢查存取程序相關(guān)性的操作方法方框圖。
圖1顯示了在現(xiàn)有的通用數(shù)字計(jì)算機(jī)上運(yùn)行的數(shù)據(jù)庫系統(tǒng)的一部分。這個(gè)系統(tǒng)包括數(shù)據(jù)庫10和數(shù)據(jù)庫管理系統(tǒng)12。數(shù)據(jù)庫10由復(fù)雜的各種類型的目標(biāo)組成,這些目標(biāo)包括數(shù)據(jù)和其它類型用來存取數(shù)據(jù)的目標(biāo)。數(shù)據(jù)庫管理系統(tǒng)12由應(yīng)用程序(沒列出)調(diào)用來執(zhí)行數(shù)據(jù)庫10的存取。所有對(duì)數(shù)據(jù)庫10的存取都要通過數(shù)據(jù)庫管理系統(tǒng)12來完成。
數(shù)據(jù)庫10包括存取程序目標(biāo)14、16、18和數(shù)據(jù)表目標(biāo)20、22、24、26、28。附加的目標(biāo)和目標(biāo)類型可以在特殊的數(shù)據(jù)庫中見到,由于清楚起見,在這里沒有包括在內(nèi)。每個(gè)存取程序目標(biāo)14、16、18對(duì)應(yīng)于一個(gè)高級(jí)的數(shù)據(jù)庫存取命令的源文件,這些命令已經(jīng)編譯到低級(jí)的程序語句中。當(dāng)一個(gè)應(yīng)用程序訪問數(shù)據(jù)庫管理系統(tǒng)12來執(zhí)行一系列數(shù)據(jù)庫存取命令時(shí),數(shù)據(jù)庫管理系統(tǒng)就調(diào)動(dòng)適當(dāng)?shù)拇嫒〕绦騺硗瓿蛇@些數(shù)據(jù)庫的存取。
數(shù)據(jù)表20到28,每一個(gè)代表一個(gè)包括邏輯行和列的數(shù)據(jù)表。每一行就是一個(gè)單獨(dú)的入口,并被分成對(duì)應(yīng)于表的列的字段。就象技術(shù)上所知道的那樣,雖然數(shù)據(jù)表目標(biāo)20到28呈現(xiàn)成邏輯上的二維矩陣,但是可以使用不同的數(shù)據(jù)結(jié)構(gòu)如B樹結(jié)構(gòu)來構(gòu)成。
每個(gè)存取程序14、16、18都有一個(gè)或多個(gè)數(shù)據(jù)表目標(biāo),這些目標(biāo)是會(huì)受存取程序運(yùn)行的影響的。一個(gè)存取程序在這樣的數(shù)據(jù)目標(biāo)中被認(rèn)為是相關(guān)的??赡艽嬖诘南嚓P(guān)性類型將在下面具體描述。在數(shù)據(jù)庫10中,程序14依賴于數(shù)據(jù)目標(biāo)20、22和24。程序16依賴于目標(biāo)24、26和28,而程序18依賴于目標(biāo)26和28,在實(shí)際的系統(tǒng)中,取決于存取程序的數(shù)據(jù)庫目標(biāo)的數(shù)量是非常之大的。
為了確保包含在數(shù)據(jù)庫10中的數(shù)據(jù)的精確性和穩(wěn)定性,數(shù)據(jù)必須具有作為參考完整性的質(zhì)量。當(dāng)數(shù)據(jù)庫啟用時(shí),參考完整性由強(qiáng)行限制數(shù)據(jù)的改變來保證,也叫參考制約。理解本發(fā)明所必要的術(shù)語將在這里給予定義。
一個(gè)主關(guān)鍵字就是必須包含唯一非空值的表的一隊(duì)縱列。一個(gè)表不能有多于一個(gè)的主關(guān)鍵字。一個(gè)外來關(guān)鍵字是表中的一縱列,這個(gè)表的值需要與表的主關(guān)鍵字相適應(yīng)。僅當(dāng)關(guān)鍵字的非空值以特定表的主關(guān)鍵字形式出現(xiàn),這些非空值才是有效的,這是參考制約的必要條件。由參考制約限定的關(guān)系是一系列一個(gè)表的行之間或者兩個(gè)不同表的行之間的聯(lián)系,這兩個(gè)不同的表是由主關(guān)鍵字和無關(guān)關(guān)鍵字的值決定的。
母表就是包含確定關(guān)關(guān)的主關(guān)鍵字的相互關(guān)系表。一個(gè)表在隨機(jī)量的相互關(guān)系上可能是一個(gè)母表。一個(gè)相關(guān)的表是一種相互關(guān)系表,這個(gè)表包含決定此相互關(guān)系的無關(guān)關(guān)鍵字。表在隨機(jī)量的相互關(guān)系方面可以是相關(guān)的。可以既是母表又是相關(guān)表。
一個(gè)相關(guān)行就是一行具有一個(gè)無關(guān)關(guān)鍵字值的相關(guān)表,這個(gè)值與原始表中主關(guān)鍵字值相對(duì)應(yīng)。因此,無關(guān)關(guān)鍵字值代表對(duì)應(yīng)于原始行的相關(guān)行的基準(zhǔn)。原始行就是至少有一個(gè)相關(guān)行的一行原始表。
刪除的規(guī)則是與每個(gè)參考制約聯(lián)系在一起的,這個(gè)刪除規(guī)則可以限定(保護(hù))原始行的刪除,或者它可以確定相關(guān)行刪除的作用,這個(gè)作用既可以使相關(guān)行削除,也可使相關(guān)行中的無關(guān)關(guān)鍵字變成空行。
修改規(guī)則也與參考制約有聯(lián)系,一方面,運(yùn)用修改規(guī)則就是為了限制原始行中的主關(guān)鍵字的修改。另一方面,就是為了確定對(duì)相關(guān)行修改的作用。因此,(舉例來說)級(jí)聯(lián)的修改是可能的。
圖2說明了剛才描述的一些概念,列出了T1、T2、T3、T4和T5五個(gè)數(shù)據(jù)表。圖2中的每個(gè)表包含一個(gè)行,這個(gè)行展示了表中每行格式的一部分。例如,表T1中的每一行包含一個(gè)縱列或形成關(guān)鍵字A的一組縱列,表T4的每一行包括關(guān)鍵字A、C和B。
表T1、T2和T4包含主關(guān)鍵字,表T1包含主關(guān)鍵字A,T2包含主關(guān)鍵字B,T4包含主關(guān)鍵字C。表T3、T4和T5包含無關(guān)關(guān)鍵字,T3和T4都包含關(guān)鍵字A來作為一個(gè)無關(guān)關(guān)鍵字,T4包含關(guān)鍵字B也作為一個(gè)無關(guān)關(guān)鍵字。T5包含關(guān)鍵字C作為無關(guān)關(guān)鍵字的關(guān)鍵字C。
表之間的關(guān)系由箭頭來表示,箭頭30代表了表T3中的無關(guān)關(guān)鍵字A和T1中的主關(guān)鍵字A之間的相互關(guān)系。箭頭32代表了表T4的無關(guān)關(guān)鍵字A和表1中的主關(guān)鍵字A之間的相互關(guān)系,箭頭34代表了表T4中的無關(guān)關(guān)鍵字B與表T2中主關(guān)鍵字13之間的相互關(guān)系。并且,箭頭36代表了表75中的無關(guān)關(guān)鍵字C和T4中無關(guān)鍵字C之間的相互關(guān)系。
限定相互關(guān)系30~36的參考制約需要存在有關(guān)表中的入口間的穩(wěn)定性。例如,表T5中每行的C鍵必須與表T4中的某行C鍵相對(duì)應(yīng),否則就出現(xiàn)值空。以類似的方式,T4的每一行必須與表T1和T2都一致。也就是說,T4的每一行都必須具有對(duì)應(yīng)于T1的一個(gè)A鍵,也必須具有對(duì)應(yīng)于T2的鍵的一個(gè)B鍵,如果對(duì)某個(gè)無關(guān)關(guān)鍵字允許有一個(gè)空值,那個(gè)關(guān)鍵字的空的值就滿足那個(gè)參考制約條件。
每當(dāng)數(shù)據(jù)庫改變時(shí),所有相關(guān)的參考約束條件都必須滿足。如果不是這樣的話,改變是不允許的。下列無關(guān)關(guān)鍵字的規(guī)則的實(shí)施,保證了數(shù)據(jù)庫的參考完整性。
插入規(guī)則當(dāng)一個(gè)行插入到一個(gè)相關(guān)的表中時(shí),插入行中的每個(gè)非空無關(guān)關(guān)鍵字值必須與有關(guān)的原始表中的一些無關(guān)鍵字值相一致,如果插入過程影響了參考制約,就將出錯(cuò)并且行不能插入。
刪除規(guī)則當(dāng)一個(gè)行要從原始表中刪除時(shí),就要進(jìn)行檢查,以決定相關(guān)表中有無相關(guān)行。相關(guān)行就是具有一個(gè)與要?jiǎng)h除行中的主關(guān)鍵字相一致的無關(guān)關(guān)鍵字值。如果出現(xiàn)相關(guān)行,所采取的步驟由在相關(guān)表中確定無關(guān)關(guān)鍵字的刪除規(guī)則來規(guī)定。
三個(gè)刪除規(guī)則可以確定一個(gè)無關(guān)關(guān)鍵字,如果這個(gè)規(guī)則被限制,如果一個(gè)相關(guān)行出現(xiàn),就將出錯(cuò),且行不能刪除。如果刪除規(guī)則被級(jí)聯(lián)相關(guān)表中的相關(guān)行就刪除了。相關(guān)表中刪除行的任何其它參考制約條件也必須滿足,否則,就將出錯(cuò),且行不能削除。對(duì)于一個(gè)SETNULL(設(shè)置空位)削除規(guī)則,如果任何相關(guān)行出現(xiàn)在相關(guān)表中,無關(guān)關(guān)鍵字中無效的部分就置成空位。修改規(guī)則正如前面描述的那樣,至少存在兩個(gè)交替的修改規(guī)則。一方面是確定相關(guān)行中修改的作用。另一方面是為了使修改規(guī)則達(dá)到一種狀態(tài),就是當(dāng)在一個(gè)原始表中修改一個(gè)主關(guān)鍵字時(shí),實(shí)施一種檢查以確定在相關(guān)表中有無相關(guān)行。如果發(fā)現(xiàn)相關(guān)行,就將出錯(cuò),且行不能修改。
修改無關(guān)關(guān)鍵字規(guī)則,當(dāng)一個(gè)無關(guān)關(guān)鍵字在相關(guān)表中修改時(shí),如果無關(guān)關(guān)鍵字不是空的它的新值必須與有關(guān)的原始表中的無關(guān)鍵字的值相一致。如果修改過程影響了參考制約,就將出錯(cuò),且行不能修改。
現(xiàn)在可以參照?qǐng)D1來描述存取程序相關(guān)性,如果在操作過程中,一個(gè)表或它的索引被存取這個(gè)表就包含在存取程序操作中。操作過程的表為操作過程的數(shù)據(jù)庫存取指令提供參考是沒有必要的。在操作過程里的所有數(shù)據(jù)庫目標(biāo)中,存取程序是相關(guān)的,既使是在為實(shí)現(xiàn)參考制約只含有存取程序的情況下。為了在插入、修改、刪除或選擇語句中和在兩種特殊情況下直接參考所有的表,存取程序相關(guān)性就被記錄下來。
為了實(shí)現(xiàn)所提出的設(shè)想,有六種不同類型的存取程序相關(guān)性,其中四個(gè)相關(guān)性類型應(yīng)用于表中,在直接影響表的數(shù)據(jù)庫存取語句中,這些表直接用來作為參考。這些相關(guān)性類型是選擇、插入、修改和消除。存取程序相關(guān)性的兩個(gè)附加類型也確定了。當(dāng)由于對(duì)主關(guān)鍵字或無關(guān)關(guān)鍵字進(jìn)行修改使得表包括進(jìn)去時(shí),就存在關(guān)鍵字的相關(guān)性。當(dāng)由于對(duì)那個(gè)表消除級(jí)串使得表包括進(jìn)去,就存在級(jí)串相關(guān)性。
圖3顯示了許多與數(shù)據(jù)表一起出現(xiàn)的存取程序相關(guān)性和由圖2決定的制約條件。圖3是包含許多高級(jí)的數(shù)據(jù)庫存取命令的表,并顯示了由每一命令產(chǎn)生的存取程序相關(guān)性的類型,以及出現(xiàn)相關(guān)性的表。
命令40是插入表T4中一行的高級(jí)命令。這個(gè)存在干存取程序中的命令對(duì)表T4產(chǎn)生一個(gè)插入變量,當(dāng)新的一行插入到T4中,所有表T1和T2入口中的A和B字都分別被檢測出來,以確保對(duì)應(yīng)的入口出現(xiàn)在里面。
命令42顯示了表T1中要被削除的入口,這個(gè)命令對(duì)T1產(chǎn)生一個(gè)刪除變量。這個(gè)變量設(shè)定在表T3和T4中對(duì)無關(guān)關(guān)鍵字A的刪除規(guī)則是REI-STRICT或SEF NULL。舉例來說,當(dāng)刪除規(guī)則是級(jí)聯(lián)時(shí),說明適當(dāng)?shù)淖兞康睦訉⒃谙旅婷枋觥?br> 命令44向表T2中插入新的一行,這將對(duì)表T2產(chǎn)生一個(gè)插入變量。
命令46對(duì)表T2的一行進(jìn)行修改,命令46將這行中的B關(guān)鍵字值改變成新的值。它將對(duì)表T2產(chǎn)生一個(gè)修改變量。由于關(guān)鍵字B是一個(gè)主關(guān)鍵字,對(duì)任何有關(guān)鍵字B的表就將產(chǎn)生一個(gè)關(guān)鍵字變量。在這種情況下,表T4就是唯一這樣的表。
命令48將表T2中一個(gè)不同的字段改成新的值,它將對(duì)表T2產(chǎn)生一個(gè)修改變量,由于這個(gè)另外的字段既不是主關(guān)鍵字,也不是無關(guān)關(guān)鍵字,因此沒有關(guān)鍵字變量產(chǎn)生。
命令50用來從表T4中選擇一個(gè)或多個(gè)行,它將對(duì)T4產(chǎn)生一個(gè)選擇變量。
命令52對(duì)表T4中的一行進(jìn)行修改,使得A關(guān)鍵字的字段變成新的值。它將對(duì)表T4產(chǎn)生一個(gè)修改變量。由于關(guān)鍵字A是一個(gè)無關(guān)關(guān)鍵字,在這種情況下,對(duì)與A相關(guān)的原始表,表T1就將產(chǎn)生一個(gè)關(guān)鍵字變量。
命令54顯示了當(dāng)一個(gè)級(jí)聯(lián)消除規(guī)則使用時(shí)出現(xiàn)的相關(guān)性,假定表T4中對(duì)無關(guān)關(guān)鍵字B的消除規(guī)則是級(jí)聯(lián),表T5中對(duì)無關(guān)關(guān)鍵字C的消除規(guī)則也是級(jí)聯(lián),在這個(gè)例證中,命令54對(duì)表T2產(chǎn)生一個(gè)消除變量,并對(duì)表T4和T5產(chǎn)生一個(gè)級(jí)串變量。
當(dāng)表中產(chǎn)生一個(gè)新的無關(guān)關(guān)鍵字,或當(dāng)現(xiàn)有的無關(guān)關(guān)鍵字從表中消失時(shí),表之間的關(guān)系就改變了。產(chǎn)生新關(guān)鍵字或關(guān)鍵字從中消失的表可以作為“目標(biāo)”表,在前述的系統(tǒng)中,當(dāng)一個(gè)新的關(guān)鍵字被加入或一個(gè)現(xiàn)有的關(guān)鍵字消失時(shí),目標(biāo)表中所有具有相關(guān)性的存取程序都是無效的,并且在它們執(zhí)行以前,必須重新編譯。不同的相關(guān)性類型的規(guī)定在前面已經(jīng)描述了,新產(chǎn)生的或消失的無關(guān)關(guān)鍵字實(shí)際上影響了哪一個(gè)在目標(biāo)表中具有相關(guān)性的存取程序,確定這一點(diǎn)是有可能的。實(shí)際上不受這些無關(guān)關(guān)鍵字影響的存取程序不需要重新編譯,因此也就并不是無效的。
圖4顯示了一個(gè)步驟順序的方框圖,它可以用來確定當(dāng)一個(gè)新的無關(guān)關(guān)鍵字產(chǎn)生時(shí),哪個(gè)存取程序必須是無效的,在步驟60中,一個(gè)新的無關(guān)關(guān)鍵字產(chǎn)生于目標(biāo)表中。對(duì)于每個(gè)在目標(biāo)表中具有相關(guān)性的存取程序或新參考制約條件的原始表,圖4的原有步驟被執(zhí)行了。
存取程序?qū)δ繕?biāo)表的相關(guān)性在步驟62中被確定下來。如果那個(gè)相關(guān)性是插入或修改相關(guān)性(步驟64),這個(gè)存取程序就被標(biāo)記為無效(步驟66),且在執(zhí)行以前必須重新編譯。如果對(duì)目標(biāo)表的相關(guān)性不是插入或修改相關(guān)性(步驟64),新產(chǎn)生關(guān)鍵字的原始表中,存取程序的相關(guān)性就在步驟68中確定。如果存取程序?qū)δ副淼南嚓P(guān)性是刪除,級(jí)串或修改相關(guān)性(步驟70),存取程序就是無效的(步驟72),如果對(duì)原始表的相關(guān)性不是消除,級(jí)串或修改相關(guān)性(步驟70),存取程序仍然是有效的(步驟74),而且不需要重新編譯。
當(dāng)建立的一個(gè)新的無關(guān)關(guān)鍵字時(shí),無需嚴(yán)格按照?qǐng)D4中建立的順序來進(jìn)行相關(guān)性檢查,只須使相同的相關(guān)性引起存取程序的無效。這樣,當(dāng)一個(gè)無關(guān)關(guān)鍵字被建立時(shí),如果一個(gè)存取程序具有1)對(duì)目標(biāo)表有插入或更新相關(guān)性,或者2)對(duì)該新建立的無關(guān)關(guān)鍵字的母表有刪除,更新或級(jí)聯(lián)相關(guān)性時(shí),該存取程序必須被無效。
下面結(jié)合圖3中的實(shí)施來描述圖4中建立的存取程序變量規(guī)則的應(yīng)用。對(duì)于這些例子,我們假定表T4是目標(biāo)表,無關(guān)關(guān)鍵字是根據(jù)T2中的B在表T4中新建立的關(guān)鍵字。
對(duì)命令40而言的存取程序?qū)Ρ鞹4具有一個(gè)插入相關(guān)性。這將要求把該存取程序無效。一旦比存取程序被重新消譯,消譯程序就必須把附加的編碼插入該存取程序中,以便檢查表T4和T2之間的參考限制。這些編碼原先并不存在,原因是原先在這兩個(gè)表之間沒有關(guān)系。
命令42在表T2或T4中不會(huì)產(chǎn)生變量。因此,命令42不會(huì)引起該存取文件無效。
命令44對(duì)表T2會(huì)產(chǎn)生一個(gè)插入相關(guān)性,而對(duì)表T4不會(huì)產(chǎn)生任何相關(guān)性。由于對(duì)母表中的插入相關(guān)性不是那種使一個(gè)程序無效的相關(guān)性,因此,命令44不要求使一個(gè)存取程序無效。命令46和48都會(huì)對(duì)圖表T2產(chǎn)生更新相關(guān)性,因此都要求使存取程序無效。
命令50對(duì)表T4產(chǎn)生一個(gè)不要求使存取程序無效的選擇相關(guān)性。命令52對(duì)表T4產(chǎn)生一個(gè)使存取程序無效的更新。命令54會(huì)對(duì)表T2產(chǎn)生一個(gè)刪除相關(guān)性,對(duì)表T4中產(chǎn)生一個(gè)級(jí)聯(lián)相關(guān)性。母表T2中的刪除相關(guān)性要求使程序無效。
圖5中的流程圖示出了當(dāng)一個(gè)無關(guān)關(guān)鍵字從目標(biāo)表中刪除之后必須加予檢查以判定存取程序是否應(yīng)該無效的相關(guān)性。在圖4所示的情況下,檢查各個(gè)相關(guān)性的次序是不重要的,但是,使用所有可能的相關(guān)性關(guān)系的正確子集來使一個(gè)存取程序無效是很重要的。
在步驟80,一個(gè)現(xiàn)有的無關(guān)關(guān)鍵字從目標(biāo)表中刪除。每個(gè)從屬的存取程序?qū)倓h除的無關(guān)關(guān)鍵字而言相對(duì)于母表的存取程序依賴性在步驟82中被判定。如果該程序?qū)δ副?4有一個(gè)更新相關(guān)性,則在步驟86中判定該程序?qū)δ繕?biāo)表的相關(guān)性。如果目標(biāo)表相關(guān)性是關(guān)鍵字相關(guān)性(步驟88),則程序被標(biāo)為無效(步驟90),如果不是,則再進(jìn)行另外的檢查。
如果對(duì)母表的相關(guān)性不是更新相關(guān)性(步驟84),或者曾經(jīng)是而現(xiàn)在對(duì)目標(biāo)表的相關(guān)性不是關(guān)鍵字相關(guān)性(步驟88),則進(jìn)行一次檢查以確定將程序是否對(duì)母表有刪除或級(jí)聯(lián)相關(guān)性(步驟92)。如果是,則程序被無效(步驟94)。如果不是,則檢查該程序是否對(duì)母表存在關(guān)鍵字相關(guān)性(步驟96)。如果是,則在步驟98中判定該存取程序?qū)δ繕?biāo)表的相關(guān)性,如果該程序?qū)δ繕?biāo)表具有更新相關(guān)性(步驟100),則被標(biāo)為無效(步驟102)。
如果從步驟96走的是“否”路徑,在程序?qū)δ繕?biāo)表的相關(guān)性在步驟104中加以確定。測試步驟106在步驟104或者100之后執(zhí)行,視情況而定。在步驟106中,檢查存取程序?qū)δ繕?biāo)表是否有插入性。如果是,則在步驟103中該存取程序被標(biāo)為無效。如果已經(jīng)檢查過的相關(guān)性組合中沒有一個(gè)為“真”,則程序保持無效(步驟110)。
概括起說,不論何時(shí)只要一個(gè)現(xiàn)有無關(guān)關(guān)鍵字釋放,一個(gè)存取程序只要有下列相關(guān)性就肯定被無效1)對(duì)剛釋放的無關(guān)關(guān)鍵字而言,對(duì)母表的更新相關(guān)性和對(duì)目標(biāo)表的關(guān)鍵字相關(guān)性;2)對(duì)目標(biāo)表的插入相關(guān)性,3)對(duì)目標(biāo)表的更新相關(guān)性和剛釋放的無關(guān)關(guān)鍵字對(duì)母表的關(guān)鍵字相關(guān)性;或者4)對(duì)于剛釋放的無關(guān)關(guān)鍵字而言對(duì)母表具有刪除或者級(jí)聯(lián)相關(guān)性。如果一個(gè)存貯程序沒有上敘敘述的相關(guān)性中的任一個(gè),無關(guān)關(guān)鍵字丟掉時(shí)它無須被無效。
現(xiàn)在來結(jié)合圖3中的實(shí)例描述圖5中建立的存貯程序相關(guān)性規(guī)則的應(yīng)用。在這些程序中,假定表T4為目標(biāo)表,無關(guān)關(guān)鍵字B正從表T4中釋放。
對(duì)命令40而言,存貯程序?qū)Ρ鞹4有插入相關(guān)性,這要求該存貯程序被無效。存取程序中對(duì)B關(guān)鍵字的關(guān)系進(jìn)行限制檢查的編碼不再有效或者必需,將在重新編譯時(shí)刪掉。
命令42不會(huì)對(duì)表T2或者T4產(chǎn)生任何相關(guān)性。因此,命令42不要求使存取程序無效。
命令44對(duì)表T2產(chǎn)生一個(gè)插入相關(guān)性,對(duì)表T4不產(chǎn)生相關(guān)性,因此,不要求使存取程序無效。
命令46對(duì)表T2產(chǎn)生一個(gè)更新相關(guān)性,對(duì)表T4產(chǎn)生一個(gè)關(guān)鍵字相關(guān)性,這將使存取程序無效。命令48只在表T2中產(chǎn)生一個(gè)更新相關(guān)性,因此不需要使程序無效,這是因?yàn)閷?duì)表T4不存在關(guān)鍵字相關(guān)性。
命令50產(chǎn)生一個(gè)對(duì)表T4的選擇相關(guān)性,這將不會(huì)使存取程序無效。命令52產(chǎn)生對(duì)表T4的更新相關(guān)性,但是不對(duì)表T2產(chǎn)生相關(guān)性。這不會(huì)導(dǎo)致程序無效。命令54產(chǎn)生一個(gè)對(duì)表T2的的刪除相關(guān)性和一個(gè)對(duì)表T4的級(jí)聯(lián)相關(guān)性,這就要求使存取程序無效。
如上所述,當(dāng)一個(gè)存取程序?qū)σ粋€(gè)無關(guān)關(guān)鍵字的目標(biāo)表和母表存在有某種相關(guān)性時(shí),增加或者去掉該無關(guān)關(guān)鍵字將要求使該存取程序無效。導(dǎo)致一個(gè)存取程序無效的相關(guān)性是該存取程序?qū)δ繕?biāo)表和母表所具有的所有可能類型的依賴性的一個(gè)子集。沒有包括在該子集中的相關(guān)性的型典不要求使存取程序無效。這樣,在許多情況下,增加或者去掉一個(gè)無關(guān)關(guān)鍵詞并不要求相關(guān)于包含該關(guān)鍵字的表的所有存取程序無效。
一個(gè)無關(guān)關(guān)鍵字被去掉或建立時(shí)對(duì)相關(guān)性類型的檢查處理可以相當(dāng)有效地進(jìn)行。存取程序?qū)δ繕?biāo)表的相關(guān)性作為位映象存貯在數(shù)據(jù)庫中。直接檢查每個(gè)存取程序的位映象就發(fā)現(xiàn)該存貯程序是否需要被無效。由于相關(guān)性檢查可以高效率地被進(jìn)行,因此,作這些檢查作費(fèi)的少量時(shí)間大大短于不需重新編譯時(shí)不進(jìn)行重新編譯而節(jié)省的時(shí)間。
雖然本發(fā)明是根據(jù)一個(gè)最佳實(shí)施例來圖示和描述的,但是本技術(shù)領(lǐng)域內(nèi)的熟練人員可以不離開本發(fā)明的原則范圍對(duì)本發(fā)明作出各種形式或者細(xì)節(jié)上的變動(dòng)。
權(quán)利要求
1.一種選擇數(shù)據(jù)庫存取程序并使之無效的方法,其特征在于下列步驟·當(dāng)一個(gè)從屬數(shù)據(jù)庫目標(biāo)中的無關(guān)關(guān)鍵字被建立,取消或者改變時(shí),確定存取程序?qū)樵摕o關(guān)關(guān)鍵字定義一個(gè)主關(guān)鍵字的從屬目標(biāo)和母目標(biāo)的依賴性的類型,·使對(duì)上述的從屬和母目標(biāo)的相關(guān)性位于所有可能的相關(guān)性類型的一個(gè)選定子集中每個(gè)存取程序無效。
2.根據(jù)權(quán)利要求1的方法,其特征在于上述的可能的相關(guān)性類型包括選擇、刪除、插入、更新、級(jí)聯(lián)和關(guān)鍵字相關(guān)性。
3.根據(jù)權(quán)利要求2的方法,其特征在于預(yù)先選定的子集包括·外來關(guān)鍵字建立時(shí)對(duì)從屬目標(biāo)的插入和更新相關(guān)性及對(duì)母表的刪除、更新和級(jí)聯(lián)相關(guān)性;當(dāng)外來關(guān)鍵字被丟失時(shí)對(duì)從屬表的插入相關(guān)性、對(duì)母表的刪除和級(jí)聯(lián)相關(guān)性、對(duì)母表的更新相關(guān)性和對(duì)從屬表的關(guān)鍵字相關(guān)性的組合以及對(duì)從屬表的更新相關(guān)性和對(duì)母表的關(guān)鍵字相關(guān)性的組合。
4.一種在數(shù)據(jù)庫系統(tǒng)中把存取程序標(biāo)為無效的方法,其特征在于下列步驟·如果在一個(gè)其中母目標(biāo)具有一個(gè)主關(guān)鍵字的從屬目標(biāo)中刪除或者增加一個(gè)外來關(guān)鍵字而使從屬目標(biāo)和母目標(biāo)之間的關(guān)系改變的話,判定任何存取程序中的過程碼是否必須改變,·把過程碼必須改變的所有存取程序標(biāo)為無效。
5.根據(jù)權(quán)利要求4的方法,其特征在于上述的判定步驟包括下列步驟·判定存取程序?qū)膶倌繕?biāo)和母目標(biāo)的相關(guān)性的類型,·選出那些對(duì)母表和從屬表的依賴性屬于所有可能的相關(guān)性類型的一個(gè)預(yù)選定子集中的存取程序,這些選出的存取程序要求過程碼發(fā)生變化。
6.一種在二個(gè)數(shù)據(jù)庫目標(biāo)之間的關(guān)系發(fā)生變化時(shí)維護(hù)數(shù)據(jù)庫的參考完整性的方法,其特征在于下列步驟·判定存取程序?qū)?shù)據(jù)庫目標(biāo)的相關(guān)性,·把上面判定的相關(guān)性和所有可能的存取程序依賴性類型的一個(gè)選定子集加以比較,·如果一個(gè)存取程序的判定的相關(guān)性屬于上述的預(yù)定子集,則把該存取程序標(biāo)為無效。
7.根據(jù)權(quán)利要求6的方法,還包括下列步驟·當(dāng)一個(gè)存取程序被標(biāo)為無效時(shí),在它下次被存取時(shí)對(duì)它進(jìn)行重新編譯。
8.根據(jù)權(quán)利要求6的方法,其特征在于一個(gè)數(shù)據(jù)庫目標(biāo)包含一個(gè)主關(guān)鍵字,另一個(gè)數(shù)據(jù)庫目標(biāo)包含一個(gè)必須與主關(guān)鍵字一致從而維護(hù)參考完整性的無關(guān)關(guān)鍵字。
9.根據(jù)權(quán)利要求8的方法,其特征在于所述的關(guān)系變化包括無關(guān)關(guān)鍵字的增加或刪除。
10.如權(quán)利要求9所述的方法,其特征在于所述的可能的相關(guān)性類型包括選擇、刪除、插入、更新、級(jí)聯(lián)和關(guān)鍵字相關(guān)性。
11.根據(jù)權(quán)利要求10,其特征在于預(yù)定的子集包括外來關(guān)鍵字建立時(shí)對(duì)從屬目標(biāo)的插入和更新相關(guān)性,以及對(duì)母表的刪除、更新和級(jí)聯(lián)相關(guān)性,無關(guān)關(guān)鍵字刪除時(shí)對(duì)從屬表的插入相關(guān)性,對(duì)母表的刪除和級(jí)聯(lián)相關(guān)性,以及對(duì)母表的更新相關(guān)性和對(duì)從屬表的關(guān)鍵字相關(guān)性的組合,以及對(duì)從屬表的更新相關(guān)性和對(duì)母表的關(guān)鍵字相關(guān)性的組合。
全文摘要
本發(fā)明對(duì)于數(shù)據(jù)庫系統(tǒng)中的每個(gè)存取程序判定其對(duì)所依賴的每個(gè)數(shù)據(jù)庫目標(biāo)的相關(guān)性。一旦數(shù)據(jù)庫目標(biāo)之間的關(guān)系改變時(shí),判定每個(gè)存取程序?qū)@些目標(biāo)的相關(guān)性類型。如果一個(gè)存取程序?qū)σ粋€(gè)受到影響的數(shù)據(jù)庫目標(biāo)的相關(guān)性屬于一個(gè)預(yù)先選定的相關(guān)性類型子集,則該存取程序被無效(接著再重新編譯)。如果存取程序的相關(guān)性不在預(yù)先選定的相關(guān)性類型子集中,則該程序保持有效,不需要重新編譯。
文檔編號(hào)G06F17/30GK1050938SQ9010766
公開日1991年4月24日 申請(qǐng)日期1990年9月13日 優(yōu)先權(quán)日1989年10月13日
發(fā)明者加里·蘭德爾·霍恩, 蒂莫西·雷·馬爾克姆斯 申請(qǐng)人:國際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1