專利名稱:用于保持關系型數據庫內參照關系完整性的方法和設備的制作方法
此項發(fā)明總體上涉及數據處理系統(tǒng)的改進,具體地涉及數據處理系統(tǒng)中關系型數據庫的改進。更加具體地來說,此項發(fā)明涉及盡管關系型數據庫中有一個數據表生成或改動仍可維護這個數據庫的參照關系完整性的方法。
采用數據處理系統(tǒng)的一個明顯優(yōu)點就是能夠系統(tǒng)地處理和利用大量數據。典型情況下,這些大量數據以某種有序方式存放在一個可用數據處理系統(tǒng)中任何一個處理器直接或間接地迅速訪問的所謂數據庫中。
近來,隨著關系型數據庫的出現,數據庫管理系統(tǒng)應用的成熟程度已達到了一個新水平。關系型數據庫是一種由許多數據表構成的數據庫。構成這種數據庫基礎的關系模型包括三個主要子部分。一個規(guī)定關系型數據庫所必須符合的結構的結構子部分,一個決定數據必須據此在關系數據庫中進行處理的方式的數據處理子部分和一個控制數據庫一個局部中的變化影響數據庫其余部分的方式的參照關系完整性子部分。
參照關系完整性可以通過遵守一些盡管難以實現但在有關文獻中已是熟知的特選的約束來達到。例如,主要的參照關系約束就是認定某個指定的“外來關鍵字”的非空值僅當它們也作為某個指定的數據表的“主關鍵字”的值出現時才是有效的。用關系型數據庫的術語來說,“雙親”數據表就是在兩個數據表關系中包含有主關鍵字的數據表。與之相似,“從屬”數據表是在上述關系中包含有外來關鍵字的數據表。
經過思考就可明白,某個單一的數據表在任意多個關系中可以既是雙親表又是從屬表。一個數據表可以稱作是某個雙親數據表的“后代”,只要它是那個數據表的從屬表或者該雙親數據表的某個從屬表的后代。相反地,一個數據表被稱作是某個第二數據表的“先輩”,只要它是那個表的雙親表或某個將該第二表作為后代包含在內的表的雙親表。而且,一個數據表可以是其自身的后代和先輩,只要它是與許多其它數據表互連在一個所謂的“環(huán)”中。對于一個所謂的“自參照”表中某個單一的約束而言,一個數據表也可以既是雙親數據表又是從屬數據表。
為了控制關系型數據庫的參照關系完整性,有必要將一個關系規(guī)則與每個參照關系約束聯(lián)系起來。在這些關系中必須予以論述的三個動作是更新、插入和刪除操作的結果。就這種數據庫中數據表的關系型特性來看,顯然在一個數據表中這三個動作中的任何一個都會對數據庫中的另一個數據表有影響。因而,通常有一系列規(guī)則與每個此類動作相聯(lián)系。
管理插入的規(guī)則相當簡單。主關鍵字可以插入;但是,外來關鍵字僅當其滿足基本的參照關系約束時才可插入。就是說,外來關鍵字的非空值僅當其也作為主關鍵字的值出現時才可插入。類似地,對外來關鍵字的更新僅當新的外來關鍵字也作為有效的主關鍵字出現時才有可能。在所描述的本方法的實施例中,對主關鍵字的更新是“受限制的”,就是說,它們僅當那個主關鍵字沒有任何從屬項時才是允許的。當然,可以實現這樣一個系統(tǒng),使得對主關鍵字的更新在每個從屬關鍵字中以所謂“級聯(lián)(coscade)”操作方式自動完成或者導致每個從屬關鍵字“置空(setnull)”。
所描述的本方法的實施例中的刪除操作運用了全部上述三個關系規(guī)則。因而,可以有一個“限制”、“級聯(lián)”或“置空”的刪除規(guī)則。在這種方式下,數據庫中任何一處刪除的影響都可以根據其對從屬數據表的影響來明確地定義。用關系型數據庫的術語來說,任何一個與某個第二數據表的刪除操作有關聯(lián)的數據表被稱作是與該第二數據表“刪除相關的”。
對于刪除相關性,通常將兩個附加的限制施加于一組數據表內的關系上。首先,在有兩個或更多個表的環(huán)中,一個表不可以是與其自身刪除相關的。其次,如果某個數據表是通過多重路徑而與另一個數據表刪除相關的,有關刪除操作的關系規(guī)則必須是一致的并且必須不是置空。
因此,任何企圖進行的對關系型數據庫結構的修改都必須小心地通過這些關系規(guī)則的每一個以保持參照關系完整性。關系型數據庫中所包含的大量相關聯(lián)的數據表和這些表之間可能存在的多重關系使得在企圖對該數據庫的結構進行修改之后檢驗這些關系變得相當困難。因而,顯然需要有一種方法,可以用來有效并且迅速地確定對關系型數據庫結構的企圖修改是否能保持始終如一的參照關系完整性。
因此,本發(fā)明的一個目的就是提出一種經過改進的關系型數據庫。
本發(fā)明的另一個目的是提出一種經過改進的關系型數據庫,使得參照關系完整性在對其中關系作了修改之后得以保持。
本發(fā)明的又一個目的是提出一種經過改進的關系型數據庫,使得參照關系完整性在對其中關系作了修改之后得以保持,并且使得這些關系無需復查整個數據庫結構而得以檢驗。
上述目的的達成如下所述。通過確定對關系型數據庫中的某個數據表所提出的生成或改動所導致的每個新的參照關系約束的有效性,本發(fā)明的方法和裝置可以用來保持該數據庫的參照關系完整性。首先針對已知的無錯條件,即新的參照關系約束不會影響其它數據表的條件,對新生成或修改過的數據表的所有關系進行檢查。然后,檢查自參照關系以檢測出已知的出錯情況。據此,建立起該數據庫某個選定部分的模型,其中包括新生成或修改過的數據表、從屬于新生成或修改過的數據表的所有數據表、由那些與新生成或修改過的表刪除相關的從屬表衍生出的所有數據表、對以上所列任何一個數據表而言是雙親表的所有數據表、以及與以上所列的某個雙親表有級聯(lián)刪除規(guī)則關系的任何一個先輩數據表。而后新的參照關系約束的有效性可通過僅檢查數據庫中由該模型所代表的那部分來確定所提出的關系是否能使參照關系完整性得以實現來進行檢驗。
可認為是創(chuàng)新特性的本發(fā)明特征列在后面所附權利要求書中。然后,此發(fā)明本身及其一個優(yōu)選的應用方式、進一步的目的和優(yōu)點可以通過參照下面有關一個說明性的實施例的詳細描述結合附圖一起閱讀而得以最好地理解。
圖1是一個可以用來實現本發(fā)明的方法的數據處理網絡的圖示;
圖2是多個數據表的圖示,可以用來說明這類數據表的相互關系;
圖3A、3B和3C繪出了一個說明可以在加入一個提出的新的參照關系約束之后用來檢驗參照關系完整性是否得以維護的本發(fā)明的方法的邏輯流程圖;
圖4繪出了一個說明將選定的從屬表加入數據庫模型的方式的邏輯流程圖;
圖5繪出了一個說明將選定的雙親表加入數據庫模型的方式的邏輯流程圖;
圖6A和6B繪出了一個說明將選定的附加約束加入數據庫模型的方式的邏輯流程圖;以及圖7繪出了一個說明檢查該簡化了的數據庫模型內的多重刪除相關關系以檢驗參照關系完整性在該關系型數據庫中得以保持的方式的邏輯流程圖。
參照這些圖,特別是參照圖1,其中繪出了一個可用來實現本發(fā)明的方法的數據處理系統(tǒng)8的圖示??梢钥闯觯瑪祿幚硐到y(tǒng)8可以包含眾多的網絡,譬如局城網(LAN)10和32,其中每個最好分別包含眾多的單獨的計算機12和30。當然,熟悉此技術的人會認識到與某個主處理器配接的眾多的交互式工作站(IWS)可以用于每個此類網絡。
正如在這種數據處理系統(tǒng)中所常見的,每個獨立的計算機可以與存儲設備14和/或打印機/輸出設備16配接。根據本發(fā)明的方法,一個或多個這種存儲設備14可以用來存儲構成關系型數據庫的多個數據表。根據本發(fā)明的方法,對該數據庫所提出的修改將受到檢查以確定參照關系完整性是否將得以保持。
仍參照圖1,可以看出,數據處理網絡8還可以包含多個計算機主機,譬如計算機主機18,它最好可以通過通訊線路22與局城網(LAN)10配接。計算機主機18還可以與可作為局城網(LAN)10的遠程存儲器的存儲設備20配接。相似地,局城網(LAN)10可以經由通訊線路24通過子系統(tǒng)控制單元/通訊控制器26和通訊線路34與網間連接服務器28配接。網間連接服務器28最好是一臺獨立的計算機或交互式工作站(IWS),起到將局城網(LAN)32聯(lián)接到局城網(LAN)10的作用。
參照圖2,其中繪出了多個數據表的圖示,可以用來說明這類數據表的相互關系。可以看出,數據表40用圖作了說明,其中包含了與某個虛構的機構中各部有關的信息。數據表40中的信息列在三個獨立的列中,其中包括部編號;部名稱;以及部負責人。這些列分別標為42、44和46。
相似地,數據表48表示與該虛構的機構中各處有關的數據表。如上所述,這個數據表分成四列,其中包括處編號;處名稱;處負責人;以及該處所屬的部的編號。這些列標號為50、52、54和56。
最后,數據表58是這個虛構的機構的雇員數據表,并且分成六列,其中包括雇員姓名;雇員編號;處編號;部編號;該雇員的主管人;以及該主管人的雇員編號。這些列分別標號為60、62、64、66、68和70。
這些各不相同的數據表的相互關系可以根據其中所示的一個或多個列而予以說明。例如,在部數據表40與處表48之間的關系中,部編號可以被當作部數據表40中的一個主數據關鍵字。相似地,部編號在處數據表48中是作為一個外來關鍵字出現的。如上所述,參照關系完整性要求部編號的非空值不可列入處數據表48的列56,除非該值是作為部數據表40的列42中的一個主關鍵字出現的。以這種方式,兩個相關數據表的參照關系完整性就可得以保持。
相似地,雇員數據表58包含有若干個可回溯到部數據表40或者處數據表48的關鍵字。例如,處編號,如雇員數據表58的列64所示,是雇員數據表58中的一個外來關鍵字和處數據表48中的一個主關鍵字。此外,示出在雇員數據表58的列66中的部編號是一個為了使參照關系完整性得以保持還必須位于部數據表40的列42內的外來關鍵字。
相關數據表的另一個方面可以根據雇員數據表58而予以說明。就是說,雇員編號,如示出在列62中的,是雇員數據表的一個主關鍵字。主管人的雇員編號,如雇員數據表58的列70中所示,因而就是一個外來關鍵字,并且為了讓主管人的雇員編號成為有效的,它還必須出現在列62,即雇員數據表58中的主雇員編號數據關鍵字。這種類型的關系被稱作是自參照的。
因此,參照圖2,熟悉此技術的一般人員會認識到,在關系型數據庫中可以有多個數據表是相關的,并且有許多不同關系可以存在于這多個數據表之間。
參照圖3A、3B和3C,當結合在一起考慮時,它們繪出了說明可以用來在加入某個新提出的參照關系約束之后檢驗參照關系完整是否得以保持的本發(fā)明的方法的邏輯流程圖。這個進程從塊72處開始。這里介紹的方法首先檢查目標表,即在本方法的描述中正在生成或改動的數據表,的所有關系,以確定是否有任何無錯條件存在。
這個進程從塊74開始,在此啟動從屬限制標志以表明所提出的參照關系約束刪除規(guī)則是否是限制(Restrict)。然后,塊76示出從屬級聯(lián)標記設置為偽。其后,塊78用以示出其中目標表為一從屬表的第一約束的取得。塊80接著被用來確定是否所有的約束都已處理,并且如果不是,塊82示出對于所考慮的其中的目標表為一從屬表的約束的刪除規(guī)則是否為限制的確定。如果不是,塊84表示從屬限制規(guī)則標記設置為偽。
然后,塊86示出對于所檢查的約束中刪除規(guī)則是否是級聯(lián)的確定,并且如果是,塊88表示從屬級聯(lián)標記設置為真。其后,塊90示出其中目標表為一從屬表的下一個約束的獲得,并且該進程返回到塊80。
在塊82對所考慮的約束中的刪除規(guī)則為限制、或者在塊86對該刪除規(guī)則非級聯(lián)作了確定的情況下,該進程就可以到達塊90以取得下一個需要考慮的約束。在檢查了其中目標表為一從屬表的所有約束之后,即如塊80所確定的,該進程就可以到達塊92以檢查那些其中目標表為雙親表的關系。
塊92示出將雙親級聯(lián)標記置偽的初始化,并且其后塊94表示其中目標表為一雙親的第一約束的取得。然后,塊96用以示出對于其中目標表為一雙親的所有約束是否都已處理的確定。如果不是,塊98示出對于所考慮的約束的刪除規(guī)則是否是級聯(lián)的確定。如果所考慮的約束的刪除規(guī)則是級聯(lián),則塊100示出雙親級聯(lián)標記設置為真,并且該過程到達塊102。塊102示出其中目標表為一雙親的下一個需要考慮的約束的取得。相似地,如果塊98中所示的確定結果表明刪除規(guī)則不是級聯(lián),則該進程也會到達塊102以取得下一個需要考慮的約束。其后,該進程返回到塊96以確定其中目標表為一雙親的所有約束是否都已處理。
然后,該進程到達塊104,它示出對于從屬限制標志是否為偽或者主體級聯(lián)標志是否為真的確定。如果這些條件都不存在,則該進程退出并表示沒有錯誤,如塊106中所示。以上所述的部分邏輯流程圖用以檢查目標表的所有關系,以確定是否刪除規(guī)則對于目標表為一從屬表的所有關系為限制并且對于目標表為一雙親的所有關系非級聯(lián)。在這種條件下,提出的新約束不會對參照關系完整性有不良影響,并且檢查無需繼續(xù)進行。
在此方法的下一部分中,該進程通過塊108進入一個用來檢查任何有可能存在于所考慮的數據庫內的自參照約束的新部分。塊110用以確定目標表是否包含有任何自參照約束,包括新提出的約束。如果有,塊112表示對新提出的約束是否為自參照的的確定。其后,塊114示出對現有自參照約束是否使用級聯(lián)刪除規(guī)則的判定以及如果現有自參照約束不使用級聯(lián)刪除規(guī)則。則塊116接著示出對于新提出的約束是否是級聯(lián)刪除規(guī)則的確定。如果是,該進程帶著出錯標記在塊118處退出。
在現有自參照約束使用級聯(lián)刪除規(guī)則約束或者新提出的約束不使用級聯(lián)刪除規(guī)則的情況下,該進程就可以到達塊132。再參照塊112,如果新提出的約束是自參照約束,該進程到達塊120。塊120用以示出對于現有自參照約束是否使用置空刪除規(guī)則的確定。如果是,該進程帶著出錯消息退出,如塊122中所示。如果現有自參照約束不使用置空刪除規(guī)則,則塊124示出對于現有自參照約束是否有與新提出的自參照約束不同的刪除規(guī)則。如果刪除規(guī)則不同,該進程又會到達示出該進程帶著出錯消息退出的塊122。
在現有自參照約束與提出的自參照約束有相同的刪除規(guī)則的情況下,該進程到達塊126。塊126示出通過確定從屬級聯(lián)標志是否為真來確定現有非自參照約束是否使用級聯(lián)刪除規(guī)則。如果是,塊128示出對于新的約束是否使用級聯(lián)刪除規(guī)則的確定。如果否,該進程再次帶著出錯消息退出,如塊130中所示。
在現有非自參照約束不使用級聯(lián)刪除規(guī)則即如塊126中所確定的或者新提出的約束使用級聯(lián)刪除規(guī)則的情況下,該進程就會到達塊132。塊132示出對于新提出的約束是否為自參照的確定。如果是,塊134表示該進程無出錯指示而退出。邏輯流程圖的上述部分已被用來確定是否有多于一個自參照約束以及它們的刪除規(guī)則是否不相同,或者刪除規(guī)則是否為置空,如果是這樣則必定有出錯條件存在。相似地,如果存在任何其它的有級聯(lián)刪除規(guī)則的約束并且所有自參照約束都不使用級聯(lián)刪除規(guī)則,必定會有錯誤出現。至此,如果目標關系為自參照約束,就不會有錯誤出現并且該進程無需再進行下去。在此應該指出,此后在所示的邏輯流程圖中只有非自參照約束將加以考慮。
至此,該進程通過塊136進入了所示邏輯流程圖,它示出了所考慮的數據庫的某個選定部分的模型的建立,可以檢查這個模型以確定在對其中某個數據表作了提出的生成或改動的情況下參照關系完整性是否得以保持。上述模型可以用一張圖來形象地表示,其中節(jié)點代表數據表而弧線代表數據表之間的關系。這個進程從塊138處開始,它說明一個代表目標表的新節(jié)點與現存的節(jié)點的鏈接及對該節(jié)點的標識。然后,塊140表示對圖4中所示的加從屬(AddDependents)過程的調用。
參照圖4,加從屬過程如圖所示,并且從塊174處開始。其后,塊176示出其中所考慮的表為一雙親的第一約束的獲得。然后,塊178示出對于是否所有約束都已處理的確定。如果是,加從屬過程結束,如塊194中所示。
在并非所有約束都已處理的情況下,如塊178所確定的,塊180接著示出對節(jié)點鏈的掃描以查看是否有代表該從屬表的節(jié)點存在。其后,塊182示出對是否存在這種節(jié)點的確定。如果否,塊184示出將代表作為該表的從屬表的一個表的新節(jié)點鏈接到現有節(jié)點并標識這個節(jié)點。在如塊182中所示的確定結果發(fā)現已有一個節(jié)點存在的情況下,或者在將代表該表的新節(jié)點鏈接到各現有節(jié)點之后,即如塊184中所示,該過程到達塊186。塊186說明將一段新弧線鏈接到各現有弧線,并鏈接到各雙親和從屬表節(jié)點。其后,該弧線以某種有助于在建模過程完成之后檢驗參照關系完整性可否得以保持的方式予以標識或標志。弧線所代表的是數據庫模型中表示該數據庫中兩個數據表之間關系的部分。
然后,塊188示出對剛加入的約束是否使用級聯(lián)刪除規(guī)則的確定。如果是,從塊174開始的加從屬過程被遞歸調用,如塊190所示,以加入級聯(lián)刪除關系中的下一個后代表。以這種方式,目標節(jié)點的從屬表以及任何通過某個級聯(lián)刪除規(guī)則而與一個從屬表相連接的從屬表被加入到正在建立的數據庫模型中。那些熟悉此技術的人會認識到,必須的僅僅是循著級聯(lián)刪除規(guī)則向下到從屬表,因為否則刪除相關關系就是不可能的。在所考慮的約束的刪除規(guī)則不是級聯(lián)的情況下,或者在加入所有具有級聯(lián)刪除規(guī)則的從屬表之后,該過程進行到塊192。塊192示出對其來說所考慮的表為一雙親的下一個約束的取得。在所有的約束都已處理之后,如塊178中所示確定結果所表明的,該過程到達塊194并退出加從屬過程。
再參照圖3A、3B和3C,塊142接著示出在由至此所述建模進程所生成的節(jié)點鏈中第一節(jié)點的取得。然后,塊144示出對于所有已標識節(jié)點是否都已處理的確定。如果否,該進程到達塊146。塊146示出其中與正在處理的節(jié)點相應的表為一屬表的第一非自參照約束的取得。
然后,塊148示出對于所有約束是否都已處理的確定。如果否,塊150用以說明對于該節(jié)點是否存在一個雙親弧線、或該雙親弧線是否未得以標識、或該雙親弧線的刪除規(guī)則是否不等同于該約束中雙親表的刪除規(guī)則的確定。如果這些條件無一得到滿足,則該進程到達塊164。塊164說明其中所考慮的與該節(jié)點相應的表為一從屬表的下一個非自參照約束的取得。其后該進程返回到塊148以確定是否所有的約束都已處理。
在塊150中所述條件中任何一個得以滿足的情況下,該進程到達塊152。塊152示出對節(jié)點鏈的掃描以查看是否有代表該雙親表的節(jié)點存在。塊154則表示對于該節(jié)點是否存在的確定。如果否,則塊156示出將一個新節(jié)點鏈接到各現有節(jié)點,并且該過程到達塊158。在代表該雙親的節(jié)點存在的情況下,如塊154中所確定的,該進程還會從塊154到達塊158。
然后,塊158說明將新弧線鏈接到與各雙親節(jié)點和從屬節(jié)點相應的各現有弧線。塊160則表示對于是否已有一個節(jié)點加入鏈中的確定。如果已有一個節(jié)點加入,該進程到達塊162。塊162示出為該雙親表調用圖5中所示的針對的加雙親(AddParent)過程。
參照圖5,加雙親過程如圖所示,并且從塊196所示處開始。其后,塊198說明其中所考慮的表為一從屬表的第一約束的取得。然后,塊200中示出對于是否所有約束都已處理的確定。如果否,塊202示出對于所考慮的約束的刪除規(guī)則是否為級聯(lián)的確定。
如果所考慮的約束的刪除規(guī)則是級聯(lián),則塊204示出對節(jié)點鏈的掃描以查看是否有某個代表該進程所定位的雙親表的節(jié)點存在。塊206則表示對于該節(jié)點是否存在的確定。如果該節(jié)點不存在,塊208表示將代表該表的新節(jié)點鏈接到各現有節(jié)點。在已有該節(jié)點存在的情況下,則該過程到達塊210,它示出將新弧線鏈接到各現有弧線并鏈接到各雙親表和從屬表節(jié)點。從塊196處開始的加雙親過程則被遞歸調用,如塊212中所示,以加入可能存在的任何額外的先輩表。
在所考慮的約束的刪除規(guī)則非級聯(lián)的情況下,如塊202中所確定的,或者在所有雙親表都已加入該模型之后,該過程到達塊214。塊214示出其中該表為一從屬表的下一個約束的取得。其后,該過程返回到塊200以確定是否所有約束都已處理。在所有這類約束都已處理之后,從加雙親過程退出,如塊216中所示。
再次參照圖3A、3B和3C中所示的邏輯流程圖,在通過使用圖5中所示的加雙親過程而將所有必要的雙親表都已加入該模型之后,該進程返回到塊164。塊164說明其中所考慮的表為一從屬表的下一個非自參照約束的取得。再參照塊148,在所有約束都已處理之后,該進程到達塊170。塊170示出鏈中下一個節(jié)點的獲得。其后,該進程通過塊172并返回到塊144以確定是否所有已標識的節(jié)點都已處理。如果所有已標識的節(jié)點都已處理,該進程到達塊166。塊166示出對圖6A和6B中所示的加約束(AddConstraint)過程的調用。此后,該進程結束,如塊168中所示。
參照圖6A和6B,加約束過程如圖所示,并且從塊218所示處開始。其后,塊220示出對節(jié)點鏈的掃描以查看是否有某個代表該雙親表的節(jié)點存在。對于是否存在該節(jié)點的確定如塊222中所示。如果該節(jié)點不存在,塊224說明將代表該表的新節(jié)點鏈接到各現有節(jié)點。應當指出,這個節(jié)點將不予標識。如果已有一個節(jié)點存在,如由塊222所確定的,或者在將一個新節(jié)點鏈接到各現有節(jié)點之后,如塊224中所示,則該過程到達塊226。塊226表示將新弧線鏈接到各現有弧線并鏈接到各雙親表和從屬表節(jié)點。這個弧線僅當其代表此刻正定義的約束時才得以標識。
然后,塊228示出對于該節(jié)點是否已存在的確定。如果否,塊232示出其中該表為一從屬表的第一約束的取得。然后,塊234示出對于是否所有約束都已處理的確定,并且如果是,加約束過程結束,如塊242中所示。
在并非所有約束都已處理的情況下,如由塊234所確定的,則塊236示出對于所考慮的約束的刪除規(guī)則是否為級聯(lián)的確定。如果是,從塊218處開始的加約束過程被遞歸調用,如塊238中所示。在所考慮的約束的刪除規(guī)則非級聯(lián)的情況下,如塊236中所確定的,則塊240接著示出其中所考慮的表為一從屬表的下一個約束的取得。
再參照塊228,如果所考慮的節(jié)點已存在,該過程通過塊230并繼續(xù)進行塊244中所示的確定。塊244示出對于該已存在節(jié)點是否為已標識節(jié)點的確定。如果是,塊226表示對于該主體弧線是否使用級聯(lián)刪除規(guī)則的確定。如果是,該過程帶著出錯消息退出,如塊248中所示。如果雙親弧線刪除規(guī)則非級聯(lián),塊250示出對于新約束的刪除規(guī)則是否為級聯(lián)的確定。如果是,該過程也會帶著出錯消息退出,如塊252中所示。
再參照塊244,如果已存在的節(jié)點未予標識,塊254示出對圖7中所示的核查多重刪除相關系(CheckMutipleDeleteConnections)過程的調用。其后,在不論哪種情況下,加約束過程結束,如塊242中所示。
參照圖7,其中示出了與上面圖6B的描述內容有關的核查多重刪除相關關系過程。這個過程從塊256處開始,并且其后塊258示出鏈接到所考慮的節(jié)點的第一從屬弧線的獲得。然后,塊260示出對于是否所有從屬弧線都已處理的確定。如果所有從屬弧線都已處理,該過程結束,如塊284中所示。
在并非所有從屬弧線都已處理的情況下,塊262示出對于該從屬節(jié)點是否得以標識的確定。如果該從屬節(jié)點未予標識,塊264示出對從塊256處開始的核查多重刪除相關關系過程的遞歸調用,以考慮下一個從屬弧線。在該從屬節(jié)點已標識的情況下,如由塊262所確定的,該過程到達塊266。塊266示出對于該從屬節(jié)點是否是代表目標表的節(jié)點的確定。如果是,塊268示出對于該從屬弧線是否已標識的確定。在該從屬弧線已標識的情況下,該過程到達塊282,它表示其中所考慮的表為一從屬表的下一個約束的取得。
在該從屬弧線未予標識的情況下,則塊270示出對于該從屬弧線的刪除規(guī)則是否為置空的確定。如果該刪除規(guī)則為置空,該過程帶著出錯消息退出,如塊280中所示。如果該從屬弧線的刪除規(guī)則非置空,該過程到達塊272以確定該從屬弧線和已標識弧線的刪除規(guī)則是否不同。如果刪除規(guī)則不同,該過程也會帶著出錯消息退出,如塊280中所示。在已標識弧線和該從屬弧線的刪除規(guī)則并無不同的情況下,該過程到達塊282。塊282說明其中該表為一從屬表的下一個約束的取得。
再參照塊266,如果其中所示的確定結果表明該從屬節(jié)點并非代表目標表的節(jié)點,該過程到達塊274以確定新的約束是否使用級聯(lián)刪除規(guī)則。如果新的約束不使用級聯(lián)刪除規(guī)則,該過程到達塊282。塊282示出其中該表為一從屬表的下一個約束的取得。
在新的約束使用級聯(lián)刪除規(guī)則的情況下,塊276示出對于從屬弧線和雙親弧線的刪除規(guī)則是否都為置空的確定。如果都是,該過程帶著出錯消息退出,如塊280中所示。如果從屬弧線和雙親弧線的刪除規(guī)則并非都是置空,該過程到達塊278以確定從屬弧線和雙親弧線的刪除規(guī)則是否不同。如果刪除規(guī)則不同,則該過程帶著出錯消息退出,如塊280中所示,在從屬弧線和雙親弧線刪除規(guī)則相同的情況下,該過程返回到塊282,它示出其中該表為一從屬表的下一個約束的取得。
參照上面的說明,那些熟悉此技術的人會認識到,專利申請人在此公開的方法提供了這樣一種方式,據此可以通過首先針對已知的無錯條件或能導致出錯條件的自參照約束檢查打算生成或改動的表的關系來檢驗對關系型數據庫所提出的改動,以確定參照關系完整性是否得以保持。其后,此處所述的方法通過首先從目標表出發(fā)并在其后加入所有與目標表刪除相關的表建立起關系型數據庫的一個部分的一個模型。然后,該過程加入了所有先前未加入該模型的雙親表和所有通過級聯(lián)刪除規(guī)則與這些雙親表相聯(lián)系的先輩表。
應當指出,模型中的每個節(jié)點或弧線當考慮屬表時是加以標識的當循著級聯(lián)弧線向上通過雙親表或先輩表時則不加標識。參照上面的說明,對節(jié)點或弧線進行標識的重要意義對于那些熟悉此技術的人來說是顯而易見的。一旦在某個由兩個或更多個表構成的環(huán)中由于某個表與其自身刪除相關而導致違反限制時,總會有某個已標識的節(jié)點與此有關。而且,如果某個表通過多重途徑與另一個表刪除相關并且其中該表為一從屬表的各個適用的關系并沒有相同的刪除規(guī)則。這個刪除相關的表將總是一個已標識的節(jié)點,并且總有某個已標識的弧線與此有關。在建立了數據庫中有可能受到所提出的新的參照關系約束影響的部分的模型之后,本發(fā)明的方法就只檢查這些表,根據參照關系完整性的保持情況來確定所提出的改動是否有效。
盡管此發(fā)明已參照一個優(yōu)選實施例得以具體地展示和敘述,那些熟悉此技術的人可以理解其中可以作各種形式上和細節(jié)上的改變而并未脫離此發(fā)明的精神和范圍。
權利要求
1.數據處理系統(tǒng)中的一種方法,用以確定在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于下述步驟辯識所述眾多相關數據表中哪些將受到所述新參照關系約束存在的影響;以及僅在所述辯識出的相關數據表上檢驗所述新參照關系約束的有效性。
2.如權利要求1所述的數據處理系統(tǒng)中的一種方法,用以確定在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于辨識所述眾多相關數據表中哪些將受到所述新參照關系約束存在影響的所述步驟包括建立所述關系型數據庫一個選定部分的模型。
3.如權利要求2所述的數據處理系統(tǒng)中的一種方法,用以確定在含有眾多相關數據表的關系型數據庫中由某個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于建立所述關系型數據庫一個選定部分的模型的所述步驟包括建立這樣一個模型,其中包括所述選定數據表;所有從屬于所述選定數據表的數據表;所有由與所述數據表刪除相關的所述從屬數據表衍生出的數據表;所有對于先已包括在內的數據表而言是雙親表的數據表;以及任何與先已包括在內的雙親表有級聯(lián)關系的先輩數據表。
4.數據處理系統(tǒng)中的一種方法,用以確定在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于下述步驟檢查所述選定數據表的所有關系以確定是否有所述眾多數據表中的任何一個將受到所述新參照關系約束存在的影響;在所述眾多數據表中任何一個將受到影響的情況下,辨識所述眾多數據表中的哪些將受到所述新參照關系約束的影響;以及僅在所述辨識出的相關數據表上檢驗所述新參照關系約束的有效性。
5.如權利要求4所述的數據處理系統(tǒng)中的一種方法,用以確定在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于辨識所述眾多數據表中哪些將受到所述新參照關系約束存在影響的所述步驟包括建立所述關系型數據庫一個選定部分的模型。
6.如權利要求5所述的數據處理系統(tǒng)中的一種方法,用以確定在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于建立所述關系型數據庫一個選定部分模型的所述步驟包括建立這樣一個模型,其中包括所述選定數據表;所有從屬于所述選定數據表的數據表;所有由與所述選定數據表刪除相關的所述從屬數據表衍生出的數據表;所有對于先已包括在內的數據表而言是雙親表的數據表;以及任何與先已包括在內的雙親表有級聯(lián)關系的先輩數據表。
7.一種裝置,用以確定數據處理系統(tǒng)內在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于用于辨識所述眾多相關數據表中哪些將受到所述新參照關系約束存在影響的裝置;以及用于僅在所述辨識出的相關數據表上檢驗所述新參照關系約束有效性的裝置。
8.如權利要求7所述的一種裝置,用以確定數據處理系統(tǒng)內在含有眾多相關數據表的關系型數據庫中由一個選定數據表的生成或改動所帶來的新的參照關系約束的有效性,其特征在于所述用于辨識所述眾多相關數據表中哪些將受到所述新參照關系約束存在影響的裝置包括用于建立所述關系型數據庫的一個選定部分模型的裝置。
全文摘要
通過確定在關系型數據庫內由所提出的一個數據表的生成或改動所帶來的每個新參照關系約束的有效性來維護該數據庫的參照關系完整性。首先從其中新參照關系約束不會影響其它數據表的已知無錯條件來檢查新生成或改動了的數據表的所有關系。然后,檢查自參照關系以找出已知的出錯情形。其后,建立該數據庫的一個選定部分的模型,新的參照關系約束的有效性通過僅檢查數據庫中該模型所代表的部分以確定所提出的關系是否使參照關系完整性保持而得以檢驗。
文檔編號G06F17/30GK1047744SQ90103758
公開日1990年12月12日 申請日期1990年5月23日 優(yōu)先權日1989年5月24日
發(fā)明者加里·蘭德爾·霍恩, 蒂姆·雷·麥爾克姆斯 申請人:國際商業(yè)機器公司