專利名稱:用于數據存儲與檢索的方法與裝置的制作方法
技術領域:
本發明提供本質上與已知的概念不同的且對傳統計算相關聯的許多缺點實現改進的計算方法的基礎。
傳統的計算方法系統通常從準備需求什么及如何實現這一需求的詳細規范開始。這一初始階級通常充滿著困難。在見到至少一部分系統已經操作以前,通常并不了解實際上需要的是什么。此外,許多系統是如此之大與復雜,甚至極難提出一個內部完全一致的系統規范。
建立一個傳統的計算機系統的第二階段是將系統規范傳達給專業程序員,在這一階段中通常會遇到進一步的困難。撇開在解釋或單純實現規范中所提出的需求不說,面對傳統的計算的最大問題之一便是生成說明該系統干什么與如何干以及該計算機程序的后續維護的文檔。在需要將一個附加的域加到一個現有的記錄結構上時便會出現在維護現有系統中所經常遇到的問題。通常必須修正該計算機系統內訪問包含該記錄的文件的所有程序。
已有許多研究顯示甚至高達80%的現代編程工作是花在維護現有系統上的。從而只允許20%的可利用的編程工作是花在開發新的應用上的。
即使在最基本的級上也會出現困難。例如,當將數據存儲在磁性介質上時,通常是以固定長度或可變長度記錄兩者之一存儲的。尤其是當需要分類所存儲的數據與/或希望快速存取時,所存儲的數據是加索引的并且最好是固定長度記錄。索引可作為原數據的一部分存儲或與之分開存儲。索引是固定長度的。固定長度記錄具有明顯的缺點,即必須剪裁該數據以符合所選擇的記錄長度。
非常可觀的人力資源已經花費在設計計算機數據庫系統上。這種系統的費用與普及表明現代社會中對這種系統的潛在需求。系統需求變得越來越復雜,并且其一個方面已成為對記錄與處理多對多關系(relationship)的需求。有些系統聲稱已符合這些要求。但迄今所知,它們都呈現為具有一定局限性與/或非常復雜的處理要求。
本發明力求采用與作為基礎的傳統計算系統不同的概念性途徑減少所有上述缺點。
按照本發明的一個方面,提供了一種數據存儲與檢索方法,包括形成具有一個關鍵域的記錄,該關鍵域包含兩個數,一個標識實體類型而一個則標識所標識的類型的一個實體的一種屬性。
按照本發明的另一方面,提供了數據存儲與檢索的一種方法,包括形成具有一個關鍵域的記錄,該關鍵域包含三個數,一個標識實體類型、一個標識所標識的類型的一個實體,而一個則標識該實體的一種屬性。
按照本發明的另一方面,提供了一種數據存儲與檢索的方法,包括形成具有一個關鍵域的記錄,該關鍵域包含從一個將數字分配給字的查找表或文件導出的數字。
按照本發明的另一方面,提供了一種數據存儲與檢索的方法,包括形成數據記錄與控制數據處理流的記錄,及將所述記錄一起存儲在一個公用文件中。
按照本發明的另一方面,提供了一種數據存儲與檢索的方法,包括作為(該記錄具有一個包含信息的關鍵域)記錄存儲的數據之間的關系的細節,這些信息能夠標識包含所存儲的關系的細節的數據記錄的關鍵域。
按照本發明的另一方面,提供了實現前面五段中任何一段中所描述的方法的裝置。
下面只是以示例的方式并參照附圖描述本發明的一個實施例及其類型;附圖中
圖1示出按照本發明的一個實施例形成的一個典型記錄,圖2示出按照本發明的一個實施例形成的一個典型記錄的關鍵域,圖3示出利用部分關鍵域來以數字形式存儲壓縮的字母數字信息,圖4a與4b示出按照本發明所描述的實施例形成的實際記錄的示例,圖5a與5b示出語義網絡,在一個事例中描繪實體類型與屬性間的關系,在另一事例中描繪實體類型與應用間的關系,圖6示出描繪應用與操作員之間的關系的語義網絡,以及圖7示出描繪實體類型與主題詞項之間的關系的語義網絡。
首先,必須說明選擇來形成關鍵域的信息,由于這本身是本發明的概念的一個重要方面。為了便于引用,在下面的說明中采用了一定的命名法。這一命名法的基礎如下在首先考慮一個信息項時,考慮該項的類型。即考慮“實體類型(entity type)”。
其次考慮該特定的項本身,即考慮“實體”(entity)。
接著考慮關于該實體的已知或想要知道的事物。即考慮一個實體的“屬性”。
下面給出一個簡單的實例;根據一個稱作ABCLimited(有限公司)的假想的公司,-實體類型為“公司”-實體為“ABC Limited”-ABC Limited的一種屬性為其實際“營業地址”-ABC Limited的另一屬性為其實際“營業電話號碼”。
顯然,在一個系統中可記錄許多不同的實體類型,在一個實體類型中可存在許多實體,而任一實體可存在許多屬性。如果將實體類型認為是一個實體,則實體類型本身可具有屬性,例如,特征“營業地址”可認為是實體類型“公司”的一種屬性,即所有公司都有營業地址。
同時,任何一個實體可屬于若干不同的實體類型,并且任何一種屬性可以是一個以上實體類型的屬性。例如,考慮既是客戶又是供應商的公司。實體類型客戶與供應商的實體值兩者是相同的,即該公司的實際名稱。類似地,客戶地址與供應商地址的屬性值兩者是相同的。然而,供應商與客戶的聯系名稱的屬性值很可能是互相不同的。
如果有人試圖維護這些復雜的交叉關系,在傳統的系統中便會出現困難,在一個實體屬于若干不同的實體類型時出現這些困難。這便是,當人們打算避免分開記錄各種關系時。且不說數據存儲所需的空間,由于在必須更新數據時會產生的困難,存在著強烈的愿望要避免分開存儲各關系。最好公用的數據只存儲一次。這樣便不存在同一數據的不同表項中出現差異的危險。只需要更新一個表項,并且減少了數據項。但是在傳統的系統中難以得到這種好處。
考慮另一個簡單的例子ABC Limited有十名雇員將“公司”作為實體類型,“ABC Limited”作為實體,“雇員名”作為屬性描述,而諸如“Kevin Smith”作為屬性值。然而“雇員名”本身可認為是一個實體(它可認為是實體“ABC Limited”的一個子實體)。即,實體(或子實體)“雇員名”可具有“營業電話號碼”作為其屬性描述。如果分開存儲各關系,相同的電話號碼存儲了十次,每一雇員一次。再者如果電話號碼改變了,便存在著電話號碼的全部十個實例沒有一致地更新的相當大的危險性。當然,最好是將電話號碼只存儲一次。然而,屬性描述“營業電話號碼”的屬性值實際上是公司與雇員之間的關系的一種屬性。如果這一關系斷開了,即Kevin Smith停止作為ABC Limited的一名雇員,則顯然該屬性值(即實際電話號碼)不再有效。實體“KevinSmith”完全可能采用一個新值作為屬性描述“營業電話號碼”,但與ABC Limited的關系斷開了,結果,顯然該關系的屬性(營業電話號碼)不再有效。解除關系同時消除了屬性。按照這些概念的數據存儲是傳統的系統所不能達到的。反之,本發明是以按照這種概念的數據存儲為基礎的。
如上關于“雇員名”的值所指出的,實體可具有子實體。從所描述的認識中應理解,即使由于作為解除了關系(即受ABC Limited雇用)的結果而消除了該屬性,同時消除了以前的屬性值(即實際號碼)“Kevin Smith”很可能保留一個“營業電話號碼”。“Kevin Smith”保留帶有描述“營業電話號碼”的屬性這一事實表明“KevinSmith”實際上是作為一個獨立的實體考慮的。這一特定的實體原來是實體“ABC Limited”的一個子實體。該子實體“Kevin Smith”將具有帶“家庭住址”描述的一種屬性。然而“家庭住址”本身可具有一種屬性。一個例子可能是帶有描述“應納稅值”的一種屬性。從而,具有描述“家庭住址”的屬性的值本身是作為一個實體考慮的。這里,我們得到“Kevin Smith”作為“ABC Limited”的一個子實體,而“家庭住址”作為“Kevin Smith”的一個子實體。這可認為是實體的兩個遞降級。在描述的本發明的實施例中,可利用高達109個值來標識獨立的實體值。通過遞降一級,即考慮第一級子實體,又能利用109個值。如果最高級的實體值各有與之關聯的一個獨立的子實體級,則能夠看出可以存儲109×109個值,并且對于實體的各子級依此類推。
通常,人們還必須考慮記錄在磁性介質上的物理位置。這很可能是已經采用一個散列例程選定了的,從而對該記錄的指針直接與磁性介質上存儲該記錄的物理位置的地址相關。結果,對傳統系統中的記錄的存取通常包含磁性介質上的物理位置之間的可觀的移動。采用本發明可以避免這一點,最終得到存取與處理時間的改進。
回到實際存儲的信息以及實際上與該信息相關的或從其產生的知識的一般性考慮;如果單純地觀察數據庫內的一個記錄,便沒有關于數據的意義的指示。這便是,記錄并不存儲數據的上下文。在使用本發明的系統中,人們用提出問題來檢索存儲在一個記錄中的數據,對問題的回答利用關鍵域高效地導航通過這些記錄。從而,在檢索某一記錄時,對該記錄的分析或導航已定義了正在考慮的數據的上下文。由于上下文是這樣定義的,不需要將它存儲在記錄本身中。這是嚴格地與傳統的數據存儲系統對立的。再者,具有最重大的意義。即,能夠改變數據庫的任何一個獨立部分而無須考慮該系統的其余部分上的潛在后果。這便是,只須保證各獨立關系是正確地記錄的便能保證整個系統的完整性。這是與傳統的系統極端嚴格對立的。
在傳統的系統中,對系統的任何部分的改變必須考慮對該系統的整個其余部分的潛在的后果性影響。通常,這事實上是超出負責了解與充分地處理由系統的一部分的改變所引發的所有后果的人員的現實能力的。至少,這種傳統的系統中的改變單純在維護該系統中便招致巨大的開銷。花費在維護系統中的時間與人力當然不能花費在提高生產力上,即在擴充該系統或建立新系統上。
這一特征的一個重要方面便是確認是在數據庫內而不是在一個獨立的程序內進行的。
從而,很明顯,本發明所達到的是將傳統上在計算機程序中編碼的規則與過程真正地作為所存儲的數據本身的一部分有效地存儲。同時,數據的上下文不是作為該數據的部分存儲的,它是從數據檢索過程本身產生的。
這便是,在數據檢索實踐中存在著內在的知識。但是,這些知識的出現,或者作為最低限度它們的使用,是以前未曾認識的。再者,使用這些知識的潛力以便建立一個不需要在維護作為整體的系統的完整性中花費大量人力的一個系統,是以前未曾認識的。
到達一個記錄所取的路徑可認為是導航通過所存儲的數據。下面說明用來實現導航的機制。
在本發明的系統中,簡單地保持到達一個記錄所取的路徑的一個記錄,便能“反向”導航通過數據庫。這一能力是通常所希望的。通常在傳統的系統中沒有這種能力,而在存在時則包含要應用非常復雜的規則與過程。
在傳統的計算中,人們建立一個原型來論證與/或證明所提出的應用。隨后,必須在整個工作系統之前編碼該原型。通常,編碼階段是最費時與容易出錯的。利用本發明,能夠在“活的”系統上建立原型(因為對系統的其余部分的完整性沒有潛在的后果),并且該原型立即是所要的應用的最終活版本。
這些考慮連同上述的關于記錄位置的長處(在ABCLimited雇員電話號碼的例子中),與傳統的計算技術相比,在效率上得到顯著的改進。改進了數據檢索的存取時間。極大地改進了應用開發時間,并且在傳統系統的維護開銷與本發明的系統的幾乎完全不存在維護開銷之間不存在可以比較之處。
本發明還產生其它優點。這些優點之一便是整個系統只受一個非常小的“核心”程序控制。整個核心程序能保存在傳統的計算硬件的處理存儲器中(即使有許多用戶及使用虛擬的,即頁式硬件系統)。現在描述的實施例是在IBM AS400機上實現的。
本發明產生的另一優點涉及該核心程序的更新。如果任何時候考慮要更新核心程序時,多半是使關于以一定記錄類型存儲的數據能夠進行某種新形式的處理,能夠非常方便地實現更新的核心程序。在一般情況中,不需要經常更新核心程序。然而,一旦需要更新,可以在不改動應用規則及過程下進行。這是可能的,因為傳統上被認為是“應用程序”的是不作為“程序”對待的。它們并不構成核心程序的一部分或者以任何方式改變核心程序。如上所述,傳統的應用程序的等價物,按照本發明實際上是作為數據本身的一部分存儲的與/或部分地作為包含在檢索數據的上下文或導航中的一部分內在地存儲的。
極大地避免了文檔問題,因為實際上不存在傳統意義上的程序。從而,與傳統的系統相比,實際上不需要文檔。
本發明的系統能夠實現逆關系的定義。這是本發明的一種特別有利的特征。
這里所描述的本發明的實施例主要包含一個單一數據庫文件,該文件中存儲有各種類型的記錄。記錄具有固定的長度,并且具有一個固定長度的、相對短的關鍵域。數據通常以存在于數據之間的關系的形式存儲。與傳統的程序概念觀點和使用截然不同,數據處理是利用存儲在數據庫中的記錄完成的。減少了傳統配置中固有的嚴重缺點并能得到其它效益。
對于關鍵域后面的固定長度記錄的其余部分,按照本發明的,存儲在數據庫內的記錄可具有許多不同的數據結構。在一個特定類型的記錄內可存在不同的結構。從而,便于按照它們的功能來考慮記錄。以下是功能上不同的記錄類型關系記錄、簡單數據記錄、選擇性記錄、菜單記錄、代用記錄(surrogate record)及事務記錄。
雖然功能不同,由于它們都具有相同的固定長度且都具有相同的關鍵域結構,所以所有這些記錄類型可以存儲在一個公用的數據庫中。
如上所述,數據通常是以關系的形式存儲的,并且對應的記錄在此稱作關系記錄。有時存在著要存儲的獨立數據,而為這一目的使用簡單數據記錄。選擇性記錄是給于用來控制數據處理的記錄的名字。選擇要進行的不同操作是用所謂菜單記錄進行的,所謂代用記錄是用來存儲交叉參照信息的記錄。事條記錄是用來實現獨立檢查跟蹤的。這一檢查跟蹤不是系統所存儲的用戶數據的內在的部分。所有這些類型的記錄是存儲在同一數據庫中的并且它們都具有相同的基本結構。下面描述不同類型的記錄的形成與使用。然而首先給出公用記錄格式,特別是關鍵域的說明。
簡單地說,用在本發明的這一實施例中記錄長度為128字節。其中,28個字節用來構成關鍵域。關鍵域可認為是由各長度為四個字節的七個域構成的,各四字節域由作為一個四字節整數存儲的九個十進制位構成。如上所述,關鍵域由數字構成;即它是純數字的。然而,在大多數實際計算使用中將需要標識字母型或字母數字型數據。在本發明的實施例中,對于字母型或字母數字型與數字值之間的至少大部分翻譯,采用了一個獨立的查找表。這便是本發明的許多優點從中產生的關鍵域的不同部分的特殊結構與意義。
上面提到的查找表可認為是,并且在此后稱作字典。關鍵域的各部分的結構和意義與系統用關系的形式存儲數據這一事實相關。
從建立一個字典開始已完成了本發明的一種實現。該字典是通過將大量英語及其它基于阿拉伯字符的語言的常用字及專用名輸入一個傳統的計算機數據庫而建立的。將一個數字分配給名字,該數字是與傳統數據庫中的字相關聯存儲的。已決定用8個十進制位來記錄數字,設定字的最大數目為108個。在分配數字給初始輸入的字時,這些字是按字母表序列排列的,并選擇了在整個0至108的范圍上大致上均勻的數字分布。
在隨后的系統開發與操作中,將進入該系統的每一個字加在字典上,當然是如果該字尚未出現在字典中。
在構成要存儲的數據項的關鍵域或索引時,便使用與名字相關聯的數字值。
本發明的一個突出特征是采用一個固定長度的關鍵域,對于用戶它可呈現為可變長度的,已決定所生成長度為128個字節的固定長度記錄的本發明的一種實現方式。前面28個字節構成該記錄的關鍵域(或索引)。然而,本發明也能用可變長度記錄實現。
以下述方式在本發明的這一實施例中完成固定長度的關鍵域-以數字形式在關鍵域中存儲數據,-使用字典,-在信息上應用數據縮減來構成關鍵域,以及-通過確定要使用的數據來構成關鍵域。
采取了這些步驟之后,本創造性概念便能實現進一步的獨一無二特征。
現在返回到如何達到這種存儲的實踐細節,把注意力集中在附圖中的圖1至3上。回憶一下各記錄的長度為128字節,而記錄的關鍵域使用前28個字節。關鍵域包含標識實體類型、實體屬性的數據,實體類型、實體與屬性中每一種的實際值是作為一個單獨的128字節記錄存儲的。一個記錄的28字節關鍵域是通過將存儲的數據的實體類型、實體與屬性的數字值的連接而構成的。各數字值為4個字節長,且由9個十進制位構成。每4個字節能具有2×109個不同的值(允許正與負值)。因此顯然選擇各9個十進制位4個字節來標識實體類型(同樣用于實體及同樣用于屬性)將滿足該系統的全部的應用。實體類型、實體及屬性中每一種的數字值是用字典獲得的(字典用于構成實際相關記錄的關鍵域)。
在關鍵域中,分配22個十進制位用來存儲正在記錄的項的字母數字型(自然語言)描述。這一描述是以數字形式存儲的,借此達到同一個固定長度的存儲域來存儲呈現為可變長度的數據項。圖2與3表示用于這一目的的22個十進制位。在本實施例中,決定前五個“字”已足以記錄任何項的字母數字描述。作出這一選擇并分配了22個十進制位用來存儲它們,以下述方式將兩者結合在一起順序地縮減該描述的前五個字的意義。回憶一下,用8個十進制位來唯一地定義字典中的字,對五個字中的每一個所存儲的十進制位的個數為第一個字8位(即全部存儲)第二個字5位第三個字4位第四個字3位第五個字2位合計22位這便是,數據壓縮得到僅僅唯一地標識第一個字的一個存儲值;字典中一個以上的字與第二至第五個字解壓縮值匹配的可能性逐漸增加。然而,對于根據存儲在數據庫中的記錄的諸如字母數字分類的關鍵域的功能,所得到的正確結果往往是足夠的,可以接受作為一種系統制約。
該系統能夠存儲2×106實體類型,每一實體類型2×109個實體,及每一實體2×109屬性。
各記錄的關鍵域或索引便是這樣根據從下述連接的數字值構成的一個唯一的數的實體類型+實體+屬性+描述4字節+4字節+4字節+22位本發明的一個特別重要的增強方面產生于只考慮實體類型與屬性描述相連接而成的數字值便能得到一個唯一的數這一創見性認識。
即 實體類型數+屬性描述數4字節+4字節得出一個唯一的數。這一唯一的數定義該代用數的目的與上下文,但并不定義該代用數本身。此后說明代用數。
附圖中的圖1至4示出按照本發明的上述實施例構成的記錄的例子。這些圖示出長度各為4字節的各種記錄域。在圖4a與4b中示出了最多12個這種域,為了便于參照,將域標記為A至L。域A至G構成關鍵域,即記錄的前28個字節。對于關系記錄,域H至L為記錄的最后20個字節。對于關鍵域后面的記錄的其余部分,其它類型的記錄通常具有不同的數據結構。在每一個域內部,單個的位將依次地稱作1至9。這樣,記錄的第一位稱作A1,而記錄的最后一位稱作L9。這一命名法純粹是為了參照方便,在本發明的實施例中并無意義。
圖1示出按照本發明的實施例的一個關系記錄的128字節記錄是如何由一個28字節關鍵域、15字節公用數據及85字節用戶數據構成的。
圖2示出28字節關鍵域是如何由各長四個字節的七個域構成的。第一個域包含實體類型數。第二個域包含一個版本號。第三與第四個域分別包含實體數與屬性數。域E、F與G包含數字形式的不同類型數據。每一個四字節的域由9個十進制位構成。
域A不止包含實體類型數,具體地說,位A1、A8與A9具有特殊意義。
位A1具有值“0”、“3”、“5”或“8”。值“0”表示該記錄包含數據。值“3”表示該記錄定義菜單。然而,菜單只是數據的一種特定形式。本發明的實施例中所使用的另一種記錄類型為選擇性記錄(Option record)。選擇性記錄是用于過程控制的。一個選擇性記錄能控制其它記錄的處理,它們是諸如簡單數據、菜單記錄或其它選擇性記錄。為了得到一個選擇性記錄的位A1的值,將“5”加在表示數據或菜單的值上。從而,位A1中的值“8”表示用于控制菜單處理的一個選擇性記錄。
前面已指出,域A中包含實體類型以外的數據。詳細地說,實體類型數只包括六個十進制位,它們是位A2至A7(含A2與A7),位A8可具有值“0”或“9”。值“0”表示一個實體標識符,而值“9”則表示實體類型內的屬性描述與/或屬性值,即子實體。
位A9用于表示域E、F及G的第一部分中的標識符的類型。位A9可具有值“0”、“1”、“2”、“3”、“4”、“5”、“7”與“8”中任何一個。不同的值的意義如下0-名稱5-不帶段標題的正文1-號碼6-不用
2-日期 7-未壓縮的8字符id3-同義詞8-未壓縮的10字符id4-帶段標題的正文9-不用值“0”表示實體類型標識符,即初始菜單與實體記錄。這一值不用于第二級菜單或實體記錄。
存儲在域B中的版本號包含該數據是公用的還是私有的指示。按照這一設定值,例如,不同的操作員(operator)可以檢索一個記錄的“同一個域”的不同的值。它也用在多語種應用中,即以不同的語言存儲相同的數據。
如上所述,域B存儲記錄的版本號。如果域B中所存儲的值(認為全部9位集體表示一個正常的十進制數)小于000010000,則整個記錄的內容對公共存取公開。如果域B中的值大于或等于000010000,則整個記錄的內容限制在由域B中存儲的值所標識的用戶組的成員。從而,可以存儲一個記錄的99999個版本供不同的用戶組存取。
私有數據的概念能以各種方式利用。當人們認為所存儲的用戶數據的一個用戶視圖是由多個(但可變數目的)固定長度記錄構成,從而用戶記錄具有可變長度時,這一點具有特殊的優點。可將域B的內容設置為使之表示該記錄包含私有的信用控制信息。只有具有適當的用戶組的成員資格的人(并具有適當安全級許可證)能夠存取包含在該記錄中的數據。在關于規則與過程(即等價于傳統的程序)的存儲中也可以使用公用與私有數據之間的區別。當記錄中的一部分數據是供公眾使用的而一部分數據是只供私人存取時,這是有意義的。作為域B的使用的一個例子,一個供與該系統一起使用的商業上制備的“應用程序”可將域B的內容設定為表示公用數據。用戶可能制備來補充該應用程序的任何擴展可作為私有數據存儲。從而,能夠安全地實現該應用程序的任何隨后的版本,只改寫該應用程序中標志為公用數據的部分。用戶定義的擴展將不被更新過程所改寫,而在傳統的系統中則是通常會被改寫的。區分私有與公用數據的域B的潛在使用的另一個例子為利用這一區別來標識存儲在該記錄中的“私有”求助文本。這便是,能夠非常容易地實現一個設計成滿足特定用戶或用戶組的求助系統。
如上所述,域C與D分別包含實體數與屬性描述數。代用是一種記錄類型數。對于一個代用記錄,域C的值永遠為0,如圖4B中所示的記錄的情況。這一實現產生于實體類型數與屬性數的連接提供一個唯一的數這一認識。為了導航通過數據庫,這一唯一的數是與代用數一起使用的,有如下面所說明的。
雖然所有記錄都是存儲在一個單一的文件中的,可認為關鍵域是用來標識該文件內的不同數據表的,當然還標識唯一的記錄。在這一意義上,可認為域A、B、C與D標識一個特定的表,而域E、F與G則標識表內的記錄。事實上,由域E、F與G構成的記錄標識符是加上位A9前綴的,A9為該記錄標識符的實際部分。
圖3示出域E與F連同域G的前四位如何典型地用于存儲由某些字母數字型信息的數據壓縮構成的22個十進制位的。位G5用作能夠區別復制的后綴。位G6、G7與G8用作一個第二后綴。這一記錄后綴使得能夠以相同的關系類型簡單地存儲相同記錄之間的多種關系。通常設定為省缺值的位G9被設定為值“9”。如果位A9具有值“0”,則域E、F與G(前4位)可包含允許復制的一個壓縮的名或一個18位未壓縮的數,或者不允許復制的一個22位數。這些不同的可能性是由選擇性記錄決定的。如果位A9具有值“1”,則域E、F與G(前4位)可在E中存儲一個9位數或如上所述的一個18或22位數。從而,如果該記錄(從用戶觀點)能夠用數來標識,A9設定為“0”的一個記錄將在域E、F與G中包含一個壓縮的名。A9設定為“1”的一個記錄將包含一個數(18、19或22位)。如果一個記錄由一個9位數與一個18位數兩者標識,則位A9將設定為“0”且域E、F與G(第一部分)將包含18位。
域E、F與G的前4位只包含前面描述的22位壓縮的字母數字型數據,如果記錄id是“名”(name),即如果位A9具有值“0”。
一個選擇性記錄的域E永遠為“0”。
與域E一樣,域F的內容取決于由位A9控制的記錄類型。如果位A9為“0”,則域E與F包含該22位壓縮名的前18位。如果位A9具有值“1”,則在域E中存儲建立該記錄的日期并在域F中存儲建立該記錄的時間。如果位A9的值為“7”,則域E中存儲未壓縮的8字符id的前4個字符而域F中則存儲后4個字符。
如果一個特定的記錄是用數字標識的(位A9=1),則除非域E與G的前面部分包含一個允許復制的18位名或一個22位名,否則域G的前4位為“0”。如果記錄是用名標識的,則域G的前4位為該22位壓縮的名的最后4位。如果位A9具有值“7”,則域G的前4位將為“0”。如果位A9具有值“8”,則域G的4個字節中的前2個字節為未壓縮的名的最后兩個字節。
8個字符的未壓縮的名與10個字符的未壓縮的名之間的差別在于使用8個字符允許存在復制品而采用10個字符禁止存在復制品。但是,復制關系能夠用位G6至G8建立。在用來實現本發明的上述實施例的特定計算機(IBMAS400)上,許多目標是用10個字符的名來標識的。
位G5的值通常具有值“1”,但也能用作一個后綴以便允許存在復制品;在采用一個未壓縮的8字符ID時,位A9具有值“7”。然而如果所采用的是10字符未壓縮ID,則在存儲該未壓縮的名中,位G5是用作該域的前兩個字節部分以存儲該未壓縮的名的后兩個字節。
位G6-G8(含G6與G8)以另一種后綴的方式用來允許相同的兩個記錄之間的相同類型的多種關系的存儲。然而,必要時,位G9能用作一個第三后綴,用于在記錄中存儲額外的數據。在所描述的實施例中,并未使用第三后綴而位G9已設定為省缺值“9”。
各記錄是一種屬性的一次重復,即包含一個屬性值,它可能跨越若干個域,如果它不是一個關系,最多可利用85個字節。如果它是一個關系,可利用65個字節,另外,加上交叉參照域。位G9可有效地用來擴充在一種屬性的一次重復中所能存儲的數據量。由于在一個記錄中存儲了一個交叉參照,該記錄中將值“9”賦予了位G9,在對應的記錄中便沒有必要將位G9設定為值“8”。利用位G5至G8,4×85字節加65字節可用于一個記錄的一次重復。
本發明所描述的實施例的進一步增強可利用G9的值“0”至“4”(含“0”與“4”)作為記錄上的“標記”或“廢棄(overrides)”。這些設施的詳細的潛在用途在這里不作詳細描述。
在本發明的實現的實施例中,核心程序讀取一個給定的關鍵域的所有記錄,即這包括在0至9(含0與9)范圍內的位G9的所有的值的一次搜索。從而,所有記錄一次定位,即使通常只有一個(G9=“9”)。這改進了處理時間。
下面是基本實體數據的項的一個例子。考慮一個電話號碼的存儲。將位A9設定為值“0”并且存儲在域E、F與G的前面部分中的22位包含“電話號碼”,如果有必要復制,則帶有供允許復制的后綴用的空間。這是用于實體本身而不是一個子級的項。實體數與屬性數兩者均為0。即域C與D均為0。
對于關系記錄,各記錄的用戶數據部分存儲作為交叉參照的任何相關記錄的關鍵域部分諸如包含與之存在著一個關系的數據的記錄。該相關記錄的關鍵的其余部分能從存取過具有該交叉參照的記錄的上下文中確定。注意圖4a與4b。交叉參照數據是存儲在域I、J、K與L中的。域I包含該相關記錄的域A的一份拷貝。
域A至G永遠是關鍵域,除了代用記錄以外域H至L用于存儲交叉參照,在代用記錄中域H包含相關記錄的代用數。在只記錄了一個記錄時,例如當存儲的是“高度”的實際值而不是存儲一個關系時,域H至L(含H與L)用于存儲用戶數據。否則,域H包含直接與討論中的記錄相關的任何記錄的代用品。即圖4中所示的兩個記錄的域H的內容是相同的。可以看出,包含在兩個記錄的域H中的值實際上是這兩個記錄中的第一個的實體數(即域C的內容)。
域I至L的內容取決于所存儲的是否是一個關系的細節。如果所存儲的數據不涉及一個關系,但同時正在記錄一個以上的記錄,則域I的內容與正在同時寫入的另一個記錄的域A的內容相同。在這些環境中,域J、K與L的內容分別與另一記錄的域J、K與L的內容相同。
域I、J、K與L包含交叉參照;除非該記錄為一個代用記錄或者此時只記錄一個記錄。在后面的兩種情況中,域I至L包含一部分用戶數據。在代用記錄的情況中在一個關系中,存儲兩個記錄的代用數。在記錄了一個第四記錄時,一個代用記錄的域J至L包含所寫入的第四記錄的關鍵域的一部分(即E至G)。關系記錄考慮ABC Ltd的電話號碼的存儲。為了存儲這一信息,在盤上寫入三個記錄。這三個記錄是(1)一個代用記錄、(2)電話號碼的用戶、(3)用戶的電話號碼。記錄2與3實際上是互逆的。
首先寫入代用記錄。將位A8的值設定為“9”,這將該記錄標識為一個代用記錄。將實體數寫入域C中并將屬性數寫入域D中。從而,能夠構成關鍵域。
域A的值是已知的。在系統級上選擇企業或電話號碼作為最基本的(即借助它寫入代用記錄),這一選擇是由一個選擇性記錄控制的。在本例中域A的值標識實體類型客戶。
域B為版本號,它簡單地記錄該數據是公用的還是私人存取的,或者是一種或另一種語言。
域C為零。
域D存儲按照菜單選擇的屬性描述的壓縮形式,即屬性描述的代用品,諸如用于講話的電話號碼。這便是,域D的內容實際上是屬性的代用數。
域E的內容是正在建立的關系的代用數。
代用數是以下述方式確定的。首先,準備一個抽象的記錄關鍵域,其中將值“9”賦予所有的位E1至E9(含E1與E9)。然后試圖在數據庫內定位指針。向后讀取一個記錄來定位這一實體類型與屬性組合的上一個代用記錄。在域E的值上加“1”,如果不存在前面的代用品,該值將是“1”。這便給出域E的新值,即在寫入當前正在準備的記錄時所使用的代用數。
域F的值永遠是零。
域G的內容與正常實體記錄的情況相同。在本發明所描述的實現的情況中,一個代用記錄的域G的值為000010019,因為復制代用品是排除在外的。
域A、B與D的連接所提供的數是唯一的。從而,域A、B、D與E的連接所提供的數是唯一的。說明這一點特別重要,代用數只與它所作用的上下文相關。域A、B與D的內容定義該上下文。這便是,關鍵項包含域A、B、D與代用數(域E)。從而,本發明的實現不受一個9位的代用數的限制。
域H至L包含兩個相關的記錄的代用數,如果這兩個記錄中的一個或兩個是用代用品標識的話。通常,域H至L不用于這一目的,除非同時寫入的是四個記錄而不是三個。通常只寫入三個記錄。但是在各種時間上寫入四個記錄,例如為了制備菜單。在這一情況中,四個記錄是代用記錄、屬性值記錄、屬性內的序列號、其中出現屬性的菜單名。要寫入的第二記錄(關系性記錄)這里所描述的第二與第三記錄實際上可以互相交換而沒有任何明顯的影響。
域A包含實體類型數(電話號碼)。
域B包含版本號。
域C包含實體數,這是實際電話號碼的代用品。寫入該記錄時,確定代用品,然后將其用作標識符。
域D包含屬性數。即“用來講話的電話號碼”,這是屬性描述的代用品。
按照前一段,要指出,記錄過程比這里描述的要復雜得多。對于新的實體或用名標識的獨立數據,它包含用字典來交叉檢驗以及有可能寫入新的記錄到字典中。
域E、F與G的前一半用于存儲壓縮的名(即ABCLtd)。域G的后一半用于后綴信息,如上所述。
域H為代用數,它與代用記錄的域E的內容相同,從而,域H的值與所有相關記錄中的相同(除代用記錄外,由于沒有必要在該記錄內存儲該數兩次)。
域I具有與相關(即第三)記錄的域A相同的值。即帶有其前綴與后綴的實體數。
域E的位E6至E9(含E6與E9)設定為等于相關(即第三)記錄的位G6至G9。這便是后綴。從而,能夠識別是否存在任何復制品。其目的是當存在復制品時知道其關鍵項。
位E2至E5(含E2與E5)如果不為零則包含相關記錄的版本號。這能夠確定相關記錄的域B的值。即用戶組數。(實際上,用戶組數通常是域B的實際值)。
位E2至E5(含E2與E5)可全部為“0”,在這一情況中,域B中的值為用戶組數,如果位E2至E5中任何一個具有非零值,則位E2至E5包含相關記錄的域B的值。這便是,相關記錄的位B6至B9(含B6與B9)分別等于位E2至E5的值,而位B1至B5含B1與B5)的值為零。關系的第三記錄第三記錄以第二記錄相同的方式寫入,但是反方向的。
從第二與第三記錄中可以看出,能夠標識代用記錄,但在交叉參照中只有相關記錄的部分關鍵項。然而由于上下文,便有可能確定第二(相關)記錄的完整關鍵項。
為了達到這一點,不能利用代用品,因為第二記錄的域E、F與域G的前一半未曾記錄在交叉參照中(第三記錄的域I至L)。
但是,已經通過相關記錄的實體記錄到達或標識了第三記錄(或高級屬性值代用品),而實體記錄中包含丟失的信息。核心程序中的一個數組中記錄實體記錄的域E、F與域G的前面部分的內容。核心程序保持高達99級的全部歷史過程(使用這一數據代用品)。這便能在系統內進行回溯。采用一個暫時存儲文件能跟蹤99級以上。
域A至G使用28個字節。另外65個字節用于用戶數據(由于我們考慮的是一個關系的存儲)。通常,15個字節分配給公用數據(其中包含一個事務數,不利用AS400相對記錄號設施)。域H的4個字節包含代用品數。包含交叉參照信息的其余16個字節是存儲在域I至L中的。
所描述的配置的優點在于,如果ABC Ltd.改變了其名稱,第三記錄的關鍵將不改變電話號碼。當然第二記錄是要改變的。
從而,本發明的系統提供多級數據記錄,這與必須刪除所有子級并重新輸入所有相關數據的系統不同。在本發明中,有可能簡單地“移動”不再有效的子級;并且所有下面的級也“自動地”移動;因為代用數并不改變。屬性值從一種實體類型與屬性描述移動到另一種。反之,如果不再有效的子級是要重寫而不是“移動”,則代用數將會改變。
如果正在改變從實體類型數、屬性數及版本號的連接所構成的整個值,上一段中所描述的配置便不能工作;因為可能已經用該唯一的數發布了所使用的代用數。
本發明所達到的性能增益是該系統在任何一個時間只讀取非常少的記錄。這對于用戶效率是非常有利的。總的說來,該系統與大多數傳統的系統相反,只使用簡單的小步驟,在傳統的系統中要執行的處理步驟的數目能花用充分長的時間而使用戶不能集中注意力。就虛擬系統計算機硬件而言,本發明使用非常少的分頁。選擇性記錄傳統上以計算機程序編碼的規則與過程在本發明中是與數據一起存儲的。這已經利用記錄方便地實現,這些記錄中的關鍵域中的4字節實體類型數是留出空白的。為了便于引用,這些記錄可稱作選擇性記錄。選擇性記錄可用來調整數據檢索的路徑。這便是,一個選擇性記錄的內容能用于響應一個特定的輸入來確定存取哪些記錄。這可用來在系統內實現“相對”安全性。“相對”一詞在這里并不意味任何對安全性的潛在損害,事實上恰恰相反。相對安全性是經常想要的,但在傳統的系統中很少達到。它是將不同的安全級分解,尤其是動態地分配給系統的單個用戶的能力。這可以是按照正在使用的應用變化的一種安全級。當然,在選擇性記錄中分配一位能為任何特定的功能分配10種安全級。存儲了許多安全碼來控制許多不同功能的安全性。
選擇性記錄用來定義用在一個特定的表中的有效記錄標識符。選擇性記錄用來確定顯示數據的方式。選擇性記錄用來控制分配代用數。選擇性記錄用來控制作用在相繼的記錄之間的間隔數。即,代用記錄的間隔設定為“1”,而正文的段標題或短名的間隔設定為“10000”。
正文是用代用品標識的,然后用文檔中的段標題序列數或段數,然后用前五個字。正文是一種記錄類型(結構)而不是功能。正文是存儲在其初始輸入時分配的代用數所標識的序列中的。結果,能夠改變序列數或字,同時保持該正文的唯一標識。
應指出,正文是集成在數據庫中的而不是獨立處理的。
參照數可用來為批處理設定優先級。
所有這些類型的設施都是由選擇性記錄控制的。一個選擇性記錄的關鍵域可以為實體類型、實體與屬性設定一省缺值。其目的為減少所需的選擇性記錄的數目。然而地址的選擇性記錄具有為實體類型設定的一省缺值,但對于屬性則是特異的。
一個菜單記錄用于指定要使用的是哪一省缺值及哪些選擇性記錄。
位A1的值加上“5”標識該選擇性記錄是與數據還是與菜單有關。
位A2至A7(含A2與A7)存儲實體類型數,但其省缺設定值為零。
在本發明所描述的實現中不使用位A8,因此將其設定為“0”或“9”。這永遠與使用它的數據記錄中的相同。
位A9設定為值“1”,因為該記錄是用一個選擇性數標識的。
域B包含版本號。它可以是零,并且是由一個選擇性記錄確定的。雖然是一種通用設施,私有與公用數據之間的區別對于選擇性記錄特別有用,由于它能為不同的用戶編碼不同的規則(例如在一張電子表格的一個單一“單元”內)。這一設施也能用來標識一個選擇性記錄的一個用戶版本,并且如果找到這一用戶版本,便用它來取代其公用版本。
域C包含實體數,對于一個選擇性記錄,它通常為零。
域D包含屬性數。對于一個選擇性記錄,域D的值為零,除非該表需要特殊的特征,在這一情況中,它們通常涉及一種特定的屬性。例如,地址的選擇性記錄內用郵政編碼標識的地址。
域E與F的值都是零。
域G包含選擇性記錄的號碼,利用位G1至G5(含G1與G5)。在本發明的所描述的實現中不允許復制選擇性記錄,從而G6至8分配相應的值“001”。位G9分配值“9”。
選擇性記錄不包含交叉參照域。從而,可以得到85個字節來存儲用戶數據。通過寫入一個第二記錄可將其擴充到170個字節,在第二記錄中位G9的值設定為“8”而不是“9”。從而,這是不需要重構整個數據庫便能作出顯著改變的一個例子。
選擇性記錄能與特定的應用相關聯。對于這種使用,將一個應用數作為關鍵域的一部分方便地存儲在域C中。
可以認為選擇性記錄是一個過濾器,它控制著對該選擇性記錄所作用的表的存取。選擇性記錄的使用。
選擇性記錄可以只用于限制對視圖的存取,即排除編輯。從而,如果要求安全性存取來實現地址改變,則要提供另一個選擇性記錄來使這一功能得以實施。
選擇性記錄可用來標識一個出口程序。此外,選擇性記錄能利用出口程序控制本發明的系統讀取不是用本發明的系統記錄的數據文件。
選擇性記錄可用來實現對用戶安全級的動態改變。
在各記錄的公用數據區內分配了三個字符作為記錄標識符。這三個字符中的每一個可分配A至N或“0”至9(含A、V、0與9)范圍內的一個字符或一定的特殊字符。這便是容許的標識符的總數為403個。然而,這并不限制標識符的總數在六萬四千種記錄類型上因為標識符與記錄的特定結構相關,比如名。這些是記錄類型,即屬性值類型。在標題實體下的標識符總數是6萬4千個。類似地,在標題屬性下的可能表項的總數是6萬4千個,其中每一個可重復十億次。
在增加新記錄時,選擇性記錄定義三個字符記錄類型碼。
通常,檢索的是一個完整的表。這便是,檢索所有記錄(服從安全性)而不只是由一個選擇性記錄所定義的相同記錄類型的記錄。
對于數據庫內的一個單一的表可存在許多選擇性記錄。從而,在一個單一的表中允許不同的記錄類型。
在一個選擇性記錄內,有一個字節控制存儲在使用該選擇性記錄加在數據庫中的記錄中的名的長度。從而,盡管傳統上改變或允許使用一個25個字符名長度比24個字符名長度的開銷高得多;利用本發明,只須在將數據寫到盤上時使用一個不同的選擇性記錄即可。名長度是寫入的記錄的公用數據區的一部分。
選擇性記錄也可用于實現提交控制。這一方面,選擇性記錄能用于設置事務界限。具體地,一個選擇性記錄可存儲提交控制的開始序列而另一個選擇性記錄可控制提交控制過程的完成。在傳統的配置中,如果不仔細考慮插入點兩側上的提交控制過程步驟上的后果,便不可能在一個提交控制過程內插入額外步驟。然而,利用本發明的配置能夠避免考慮這些后果。
選擇性記錄用于控制要同時檢索的記錄的數目。選擇性記錄內的一個字符用于這一目的,從而很容易地在0至9(含0與9)的范圍內控制要顯示的記錄的數目,其中0可以是高的而不是低的。
選擇性記錄可用于控制段標題與段正文。即,它們可用于顯示長的或短的名(任何長度或256個字符)。
選擇性記錄可用于定義是否將出現一個長名。
一般地講,顯示器屏幕上的一行相當于一個記錄。在這一配置中,一個長名是每記錄一行而名可以是一萬行長。
選擇性記錄可用來控制處理,例如在拒絕對要求的信息的存取時向用戶提示一條消息。類似地,選擇性記錄用于控制處理流程。例如使用戶返回到一張菜單或返回到主相關實體記錄。
能夠用選擇性記錄達到的處理控制是極為靈活的。例如,這樣的選擇性記錄實現起來非常直觀,在輸入一個電話號碼時該記錄標識該電話號碼的擁有者,將處理切換到一張菜單,以便選擇該擁有者的其它屬性供調查。
一個選擇性記錄可包含用來存取另一個表的下一個選擇性記錄的號碼。
菜單記錄也包含選擇性記錄號碼。將這一號碼加在正在使用的選擇性記錄中的數上便得出處理中所使用的實際數。
事務處理可用來實現布爾邏輯。例如,考慮包括5項的一個表。如果顯示控制字符設定為值“1”,處理便搜索一個單一的記錄。這時,控制事務處理的選擇性記錄便規定找到或找不到該記錄時要采取什么行動。從而,能夠設置選擇性記錄作為數據庫內的決策者。
作為一個例子考慮在一個定貨系統中的價格更新。想要實現依賴時間的定價。這能夠利用加上日期與時間標記的關鍵域來實現,即將域E設定為日期并將域F設定為時間。日期的第9位用來檢驗日期是否正確地存儲。域F的第一位用來檢驗時間記錄的準確性。將選擇性記錄設置成向后讀取該表直到定位了與當前日期與時間比較時具有有效的關鍵域的一個記錄為止。使用本系統,能夠在輸入一個新的價格時容易地實現價格期限。即在時間上向后讀取,有效地找出以交易的日期以前最近的日期與時間記錄的價格。這是與傳統的系統相反的,在傳統的系統中通常給定該價格一個有效日期范圍(從一個日期到另一個日期)。這種系統的困難之處在于如果交易日期越出了記錄在數據庫中的價格的日期范圍應施行什么處理。然而,在按照本發明的實現中,的確需要編碼一個期滿日期,因為每當輸入一個新的價格時原來的價格便立即變成多余與無效的了。所有以后的交易便立即在該新的價格上進行。同樣,能夠“編碼”折扣、市場區域等。
需要指出的重要事情是所有這些“處理”都是在數據庫自身內部編碼和進行的。處理既不存儲在傳統意義上的“程序”中,也不受其控制。例如,只是寫入一個額外的記錄到數據庫中指明實行何種新的折扣而已。這避免了傳統的系統中的主要缺點之一,在傳統的系統中通常需要建立一個復制的數據庫(編碼新的價格),導致將數據庫的兩個拷貝維護成互相一致的困難,直到復制品取代原來的數據庫而使價格改變生效為止。
選擇性記錄用于以類似于錯誤捕捉的方式控制處理。這便是,在響應一個用戶查詢沒有找到記錄或找到一個以上的記錄時系統的應答是受一個選擇性記錄控制的。進一步的處理也能受選擇性記錄控制。例如,如果響應一個查詢未檢索到所選擇的數據項,選擇性記錄可提供用戶實際上將該數據增加到數據庫中的選擇余地。類似地,能將選擇性記錄設定為在檢索到了一個所請求的數據項時自動地前進到或者不前進到下一處理階段。例如,如果輸入一個地址,通知用戶實際上已在數據庫內定位了該地址可能并無多大用處。進行到處理的下一階段檢索出相關的姓名并將其提交給用戶用于檢驗可能更有用處。事實上,與菜單一起使用選擇性記錄這一概念引導到建立過程的概念。取決于正在獨立地完成的各步驟的需求,過程執行若干順序的處理步驟。這可以認為是“一個項”的菜單的一種形式,它們具有在它們的每一個之間自動前進的能力。
公用數據區格式與其它記錄相同。
如上所述,在選擇性記錄內,一位控制顯示或存取的記錄的數目。如果該位具有值“1”且該選擇性記錄指定自動前進,這時該選擇性記錄便變成了一個過程。
過程可用來強加數據錄入。例如,如果正在使用每次存取一個記錄的一個菜單,便可用一個選擇性記錄來檢驗所指定的記錄是否存在,如果沒有定位,它便促使輸入該值。
省缺選擇性記錄中將與實體類型、實體及屬性相關的各域的值設定為零。然而,有可能實現不同級上的省缺,在這一情況中,這些域內的值可以不全為零。例如,如果屬性不是空白的,則屬性數不是零。
域L包含選擇性記錄號。菜單為了存取本發明的數據庫中的記錄,必須指定實體類型數與屬性數。所進行的實際處理通常涉及使用一個選擇性記錄,它包括使用由菜單記錄存取的一個選擇性記錄號。菜單記錄也能編碼成指示該選擇是否作為在實體或屬性級上的一種省缺值。選擇性記錄的位A1具有值“5”或更高。這便是,為了形成一個選擇性記錄,將“5”加在正在由選擇性記錄存取或控制的記錄的類型的位A1的值上。記錄類型碼,上面提到的三個字符記錄類型碼,以字母“F”起始。這三個字符記錄類型碼是數據庫內的各記錄內的公用數據的一部分。作為該碼的第一字符的字母“F”指示要使用的是哪一種數據結構。
對于與應用相關的菜單記錄,域C的值為應用號。對于一個與應用無關的菜單,域C的值為零。對應的選擇性記錄確定菜單記錄應具有哪種類型。
菜單記錄由位A1具有值“2”或“3”來標識。值“2”表示菜單記錄是用于控制到達當前位置的路徑的,而值“3”則表示菜單是用于在選擇或找到一個記錄后控制路徑的。
除了位A1的值以外,菜單記錄的關鍵域是與前面對其它記錄類型一般性的描述的相同方式構成的。例如,菜單名是作為實體類型編碼的。
菜單記錄的公用數據區具有與任何正常記錄類型相同的格式。
位于記錄的公用數據區中的三個字符記錄類型碼具有這樣一種格式,其中第一字符是出口程序名的一部分。例如,關于出口程序,三個字符的記錄類型碼的第一字符與程序名的第四字符相同。利用這種命名法,所有出口程序都具有第一字符為E的一個名(表示Erros,給予本發明的系統的名稱),后面跟隨著兩個字符的版本號。從而,如果想要增加一種不同記錄數據結構,不需要改變核心程序的主體,只要附加一個出口程序或輸入一個現有的出口程序即可。事務概要為各個事務寫入一個事務記錄。事務記錄的實體類型數設定為零。因為它是一個數據記錄,位A1具有值“0”。位A8為“0”。因為它是一個數字,位A9具有值“1”。
事務數是通過將域D的所有位設定為值“9”,然后向后讀取直到定位了上一個事務數為止而生成的。然后在上一個事務數上加上值“1”,從而形成新的事務數。這一過程與上面關于代用數的生成的描述相同。
通常,一個事務記錄可存儲諸如用戶號、公司、部門、日期與時間、應用號等細節。事務概要的使用能夠容易地實現一個“取消”設施。導航與瀏覽設施人們可瀏覽或航行通過數據庫,在實體類型、實體與屬性之間移動。利用關鍵域,尤其是屬性的域I至L,人們能標識實體類型與標識符。存儲在域I中的值標識實體類型。這便是,它標識相關記錄的域A的值,與該屬性的交叉參照域中具有值“9”相比,只是在相關記錄中位A8設定為“0”。相關記錄的版本號能從位I2至I5的觀察中確定。如果所有這些位具有值“0”,則相關記錄的域B包含用戶號。然而,如果位E2至E5不全為零,則相關記錄的位B1至B5為零,而位B6至B9分別具有位E2至E5的值。
從而,確定了相關記錄的域A與B的值。
相關記錄的實體數與屬性數,即域C與D之值,為零。這便是這樣,因為正在考慮的是數據樹的起始點(或頂)。
通常,在屬性記錄與相關記錄之間域E與F的值保持不變。然而,域J的最后4位給出相關記錄的域G的最后4位,盡管這通常意味著沒有改變。
從而,相關記錄的整個關鍵域已從上下文中構成。再者,這種構成一個相關記錄的關鍵域的過程能用在向前或向后的方向中。
只利用屬性便能得到更多的信息。例如,考慮“消息”與“接收的消息”之間的差別,前者簡單地列出所有消息,而后者只列出發送給討論中的特定用戶的那些消息。上下文作為一個特定查詢的結果,只能存取一個特定的上下文中的數據。從而,在觀察一個特定記錄的內容時,便知道了存儲在該記錄中的信息的上下文。再者,信息永遠不會超出上下文。應用結構一個應用可認為是對整個數據庫的一個過濾器。例如,人們可能希望將數據庫的一個子集分配給發票處理。一個應用允許訪問與發票處理相關的記錄、過程等。
應用是一種實體類型。這在附圖中的圖5a與5b中所示的語義網絡中示出。
一個菜單過濾一個應用中的各實體類型所能得到的屬性。從而,只需要存儲屬性一次。
如果想要訪問所有屬性,則必須使用一個與應用無關的菜單(即不過濾)。這是與“編碼”一個應用程序內所需要的屬性的傳統方法相反的。總的概念是將處理與“編碼的程序”分離,并將處理作為實際數據存儲的一部分。
應用的一個例子用附圖中圖6中所示語義網絡表示。該應用是“安全性”,其中可得到實體類型“應用”。該實體類型的一種屬性是“授權給”。這又是與將安全性編碼在各應用內的傳統配置相反的。
操作員只能使用他能訪問的應用,因為他具有作為一個用戶的適當屬性,即數據與規則認為是基本上相同的。從而,一個用戶以他導航通過數據相同的方式導航通過規則。
該系統內還可得到一個起動應用。這一應用使人們能改變起動過程而不用改變核心程序。屬性“授權的應用”列出能用來運行的應用。列出了這些應用之后,人們便開始導航通過數據庫。
利用這一技術,嵌套的應用便能容易地實現,并且安全檢查可以包含在各級上。
類似地,有可能編碼一個新的文檔建立應用。這一應用中可包含過程來要求諸如作者姓名等數據。文件只需要一個文件(或數據庫)。各記錄的關鍵域是唯一的,因此不需要建立一個以上的文件。然而,為了操作的原因,可能希望將數據庫分裂成若干不同的文件。例如,為了將用戶數據與公用數據分開,可能希望進行這種分裂。類似地,為了將應用定義數據與該應用作用的數據分開,可能希望進行這種分裂。從而,為了分發的目的,人們能改變應用而不用改寫該應用作用的用戶數據。因此,第三方的“軟件”能以直接相似于傳統的系統的方式利用本發明的系統來實現。
希望建立一個以上文件的另一組環境是希望清除或存檔數據。在數據中包括消息或文獻時這可能特別適用。
希望建立一個以上文件的另一實例是用戶數據具有特定的行業或類型時,例如涉及美術的數據庫。
有可能希望建立一個以上文件的另一個實例是要存儲涉及諸如計算機終端及可以通過這些終端訪問該計算機的操作員等的表的配置數據時。
在這里所描述的發明的實施例中,一共使用了七種不同的文件。這些文件中包括(1)字典(2)用戶數據(3)私有數據(4)公用應用數據(諸如國家列表)(5)公用應用數據;特定的(藝術史)不是一般的(6)應用定義(包含辭典)(7)配置文件(8)消息正文文件(9)事務概要該系統的唯一其它部分便是核心程序,它包含少于一兆字節的指令。辭典一個重要的特征便是辭典,它與字典文件不同。辭典構成主數據庫的一部分,并且“辭典”是一種實體類型。與只包含單個的字的字典不同,辭典中包含短語(任何語言的)。用來定義數據庫的一個應用的結構的每一個術語都必須首先進入辭典中。作為這一過程的一部分,分配一個代用數。
整個系統中用作標識符的每一個字都必須包含在字典中。然而,辭典中并不必要包含整個字典。
辭典是術語的中央倉庫。定義數據庫的結構的每一個術語都必須包含在辭典中。從而,為了增加一個新的實體類型,首先必須將該實體類型名放在辭典中。附圖中的圖7中所示的語義網絡示出了這一點。
隨后,便能訪問辭典來發現該特定的名是否是一個實體類型。
辭典強制使用標準的字與短語。從而,位G5可以允許復制,但它們將各有一個不同的代用數。
作為字典與辭典之間的區別的一個實例字典中只存儲字“red”一次。而辭典中字“red”可能存儲若干次,例如第一次出現作為一種顏色而作為第二個實例則關于政治。從而,能查詢辭典來檢索出字“red”的潛在意義的一張清單。
辭典允許人們找出系統中關于字“red”有哪些其它知識。
在所有事務處理中并不都使用辭典。例如,考慮屬性描述“isa”。雖然短語“isa”有可能從辭典中檢索到;緊接著導航通過數據庫,因為處理是從初始的辭典查找通過實體類型到實體的。“辭典”是一種實體類型而“實體類型”則在辭典中。多個用戶組一個系統上有可能容納多個用戶組。人們可以為私有用戶數據建立一個獨立的文件,并且可以方便地增加一個新的用戶組。在搜索記錄中,核心程序總是尋找用戶組號。
一個用戶組的成員能向另一個用戶組的成員發送消息。
使用用戶組號作為關鍵域的一部分,便達到了內在的安全性。不能做到屬于不同的用戶組的數據之間的交叉訪問。從而,防止對其它組的數據或者反過來是非常直觀的,因為這是有關的記錄的關鍵域的一部分。核心程序結構(1)“請求處理”程序。主操作接口。(2)存取數據庫的主程序。總控制程序。它進行其它程序的所有調用。(3)“數據庫更新”程序,它還提供與用戶的文本處理接口。(4)出口程序ERROS或用戶定義的,諸如數學/打印/不同的屏幕顯示。出口程序出口程序方便地采用下述命名約定,其中一部分上面已提到過。出口程序的第一個字符永遠是字符E(表示ERROS,關于本發明的系統所使用的名)。第二個字符指明該程序的發行號。第三個字符標識程序的修改。第四個字符是這一出口程序所處理的記錄類型的三個字符記錄標識符的第一個字符。出口程序名的第五個字符指明該程序的版本號。這一字符可以分配A至Z范圍內(含A與Z)的任何字符或0至9(含0與9)范圍內的任何數字或某些特殊字符。出口程序名的第六至第十字符標識用戶組號。這可以是零,指出任何用戶組都能利用它。
用戶特定的選擇性記錄識別應使用該程序的哪一版本,及對于一個特定的用戶組,該程序是否是他們自己的用戶組的或者該選擇性記錄所調用的程序是否是一個公用版本。
這一命名約定能夠容易地避免混淆同一程序的不同版本,并且每一個節點都能為各用戶組定義要使用的是該程序的哪一版本。其中可包含諸如不同屏幕圖畫這樣的簡單選擇或包含更深奧的需求。
出口程序可包含在一個程序庫中。給予該程序庫的名最好采用下述命名約定。庫名的第一個字符為字符E。第二個字符標識發行號。第三個字符標識修改。第四個字符標識修改級。這一命名約定對某些計算機硬件類型特別有用。例如,IBM AS400機一張庫清單,其中各任務具有一張相關的庫清單。
按照本發明的系統的一個主要優點是只需小量的存儲器常駐代碼(核心程序)。這一優點來自這樣的事實,核心程序是充分小的,它永遠能夠常駐在諸如IBM AS400這樣的機器上的內存中。結果,極大地避免了對程序分頁的需求。求助系統通過將求助文件指定為一個實體類型,便方便地實現了一個聯機求助設施。從而,以一個實體類型“求助”、一個實體“業務”與一種屬性“電話號碼”,便能構成“業務”與“電話號碼”之間的關系的一個代用記錄,該記錄中包含這一組合的一個描述。由于在不同的上下文中考慮時,實體類型變成了實體,為了實現求助系統,只需核心程序非常少的處理即可。求助正文是為一個特定的實體類型存儲的,而不是為各單個實體存儲的。
求助菜單不必要是應用特定的。
從而,求助系統的使用與對數據庫上任何其它類型的記錄的數據的訪問相同。以前面所描述的相同方式導航通過相關記錄。
上述聯機求助系統完全避免了建立一個完全獨立的聯機求助數據庫及相關的程序組的傳統方法。
上面給出的本發明的特定描述是在1993年10月4日提交的英國專利申請9320404.8號中所提出的。從該日期起已實現及試驗了各種修改。這些修改中值得一提的是一個實施例,其中上述選擇性記錄在功能上已與上述菜單記錄合并。原理保持不變,但利用一個單一的記錄類型來替代以前的兩個記錄類型。如上所述,存在著代用記錄來記錄代用數,它們可以認為是本系統的主要內部標識符。然而附加數據也能存儲在代用記錄中。這些附加數據應與該代用品所涉及的記錄的內容相關,并且最好與相關記錄的內容一起顯示。
從1993年10月起,已經獨立測試了本發明的初始實現。這些測試計算出開發一個新的應用(即“程序”組)的效率與傳統的編程技術相比提高了500%以上。測試同時報告了完成的應用的操作速度中相同數量級的提高。
權利要求
1.一種數據存儲與檢索的方法,包括構成具有一個關鍵域的記錄,該關鍵域為至少兩個標識符的數字連接。
2.權利要求1中所提出的一種方法,其中該關鍵域包含一個實體類型標識符及一個屬性標識符。
3.權利要求2中所提出的一種方法,其中該關鍵域是至少三個標識符的一個數字連接,包含權利要求2中所指定的那些標識符及一個實體標識符。
4.前述任一權利要求中所提出的一種方法,其中該關鍵域部分表示該記錄的非關鍵域部分的結構。
5.前述任一權利要求中所提出的一種方法,其中該數字值是從一張字與/或短語表中得出的,表中的各項已預先賦予一個數字值。
6.前述任一權利要求中所提出的一種方法,其中某些記錄存儲數據而其它記錄則存儲數據間的關系的細節。
7.前述任一權利要求中所提出的一種方法,其中某些記錄存儲數據而其它記錄則控制數據處理。
8.前述任一權利要求中所提出的一種方法,其中一項信息的存儲包括構成與記錄三個記錄,各個記錄中包含能夠識別其它兩個記錄的標識符。
9.前述任一權利要求中所提出的一種方法,其中該關鍵域中包含一個從字母數字型描述導出的數,該數是從一張字表中導出的,在該字表中已為表中的各項預先賦予了一個數字值,在第一個字之后,該字母數字型描述中的字是賦予遞減的有效位數的。
10.一種數據存儲與檢索系統,包括構成具有一個關鍵域的記錄的裝置,該關鍵域是至少兩個標識符的一個數字連接。
全文摘要
數據存儲與檢索的方法與系統,包括構成具有一個關鍵域的記錄,該關鍵域是至少兩個標識符的數字連接。關鍵域最好包含一個實體類型標識符及一個屬性標識符,再包含一個實體標識符更好,其中實體類型是通用的,諸如“公司”,實體是特定的,諸如ABC Limited,而屬性則為諸如“電話號碼”。該數字值最好從字與/或短語表中得出,表中各項都事先分配有一個數字值。最好某些記錄存儲數據而其它記錄存儲數據之間的關系的細節。有利地,某些記錄存儲數據而其它記錄控制數據處理。
文檔編號G06F17/30GK1132564SQ9419366
公開日1996年10月2日 申請日期1994年10月4日 優先權日1993年10月4日
發明者羅伯特·迪克遜 申請人:羅伯特·迪克遜