專利名稱::用于在單個語句中更改集值和標量值列的sql語言擴展的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)庫系統(tǒng),尤其涉及一種系統(tǒng)和方法,用來使用嵌套關(guān)系SQL語言擴展而在一個步驟中以任意方式更改帶有分層結(jié)構(gòu)的各種表(諸如嵌套表和存儲復(fù)雜結(jié)構(gòu)對象或XML的表格),并用來提供有效獲取復(fù)雜和部分更新的各種機制(諸如改變描述符并發(fā)揮查詢最優(yōu)化和查詢執(zhí)行技術(shù))。
背景技術(shù):
:SQL查詢語言向用戶提供查詢(并更改)使用關(guān)系數(shù)據(jù)模型存儲的表列數(shù)據(jù)。該關(guān)系數(shù)據(jù)模型指示表中的每個單元(一行的一列)是單個標量(或原子)值。結(jié)構(gòu)化查詢語言(SQL)是用以與關(guān)系數(shù)據(jù)庫通信的美國國家標準化組織(ANSI)標準。SQL語句被用以執(zhí)行諸如更新數(shù)據(jù)或從關(guān)系數(shù)據(jù)庫中檢索數(shù)據(jù)的任務(wù)。盡管許多數(shù)據(jù)庫系統(tǒng)使用SQL,但是其中許多數(shù)據(jù)庫還具有通常僅在它們的系統(tǒng)上使用的它們自己的專用擴展。然而,諸如“Select”、“Insert”、“Update”、“Delete”,“Create”和“Drop”的標準SQL命令可被用來完成處理關(guān)系數(shù)據(jù)庫所需的許多事情,并相信對數(shù)據(jù)庫領(lǐng)域技術(shù)人員是眾所周知的。最近對關(guān)系數(shù)據(jù)模型的擴展放松了將單個標量值存儲在單元中的限制,并允許表中的每個單元本身成為值的集合。該集合內(nèi)的每個元素本身還可包含一個集合,即集合可任意層深度嵌套。帶有這樣的具有多個值的集值單元的表可泛稱為嵌套表。這種開發(fā)顯示了如何擴展SQL語言以在這樣的嵌套表中更改集值的問題。例如,需要用于更改集值單元以允許在任意嵌套層上標量值的同步改變的技術(shù)。嵌套表的當(dāng)前實現(xiàn)及相關(guān)聯(lián)標準提供了用于查詢和更新嵌套表中集合的擴展。然而,在常規(guī)嵌套表系統(tǒng)中對于集值單元中標量值的每個層次,每次都僅在一個層次上更新嵌套標量值,因而在多層單元中改變存儲值需要多次更新。例如,美國專利6,564,203描述用于更新邏輯上駐留于嵌套集列中的一個或多個嵌套集合中的數(shù)據(jù)的技術(shù)。檢測在一個或多個嵌套集合上操作的數(shù)據(jù)操縱語言(DML)語句,并對作為DML語句目標的嵌套集內(nèi)的每個單獨元素執(zhí)行一次觸發(fā)器代碼。該觸發(fā)器代碼可包括對父值的引用;然而,觸發(fā)器被設(shè)計成在更新、插入或刪除數(shù)據(jù)庫表的行或表視圖時觸發(fā)。換言之,一次僅更新一行。該過程是緩慢并乏味的,且不允許在任意指定嵌套層次上更新。美國專利6,493,708揭示了一種機制,該機制使用包括各種LEVEL語句以標識分層結(jié)構(gòu)層次的CREATEDIMENSION語句來定義一分層維、其各個層次和各層次間關(guān)系。維數(shù)表將粒度間的分層關(guān)系嵌入該維的各個層次中,假設(shè)這些層次從較細到較粗地排列。然而,沒有一種一般機制被教導(dǎo)用于更新嵌套表的相應(yīng)行中的值,這些行未必作為相同數(shù)據(jù)的較細/較粗表示而彼此相關(guān)。SQL2003標準指定兩類集合-數(shù)組和多重集。表的列可以是這兩類集合之一。在實現(xiàn)數(shù)組和多重集的現(xiàn)有數(shù)據(jù)庫系統(tǒng)中,該標準指定用于更改全部集值列(其中舊值被全新值所替換)的語法和語義?,F(xiàn)有技術(shù)沒有指定遞增地更改集值列的任何方法。需要一種對這樣的集合執(zhí)行增量更改的技術(shù),因為當(dāng)僅需更改其一小部分時用新集合替換整個集合是非常昂貴的。本發(fā)明解決本領(lǐng)域中的這些需要。
發(fā)明內(nèi)容本發(fā)明通過提供一種使用SQLUPDATE語句的嵌套擴展在嵌套表中更新集值列的新方法來符合本領(lǐng)域中的上述需要。所提議擴展使用與用來更改表的標量值列的常規(guī)UPDATE語句(稱為外部UPDATE)的語法和語義類似的一種語法和語義來更改集值列。因為使用與外部層次上表相同的語法和語義結(jié)構(gòu)使處理關(guān)系表更改的現(xiàn)有實現(xiàn)能重新使用其實現(xiàn)技術(shù)來處理更改集值列的更新,這也是需要的。此外,根據(jù)本發(fā)明的這種UPDATE擴展使得對嵌套集的更新的規(guī)范能嵌于分層結(jié)構(gòu)中任意深度層上的。新語法以平行于數(shù)據(jù)結(jié)構(gòu)本身的方法嵌于外部UPDATE語句中。因而該語法更直接地映射到數(shù)據(jù)的用戶概念模型中,因此更易于理解。對UPDATE語句的提議擴展使用允許更新有效處理的相同語句來同時更新集值列和其它標量值列。根據(jù)本發(fā)明使用變化描述符來實現(xiàn)UPDATE語句的相關(guān)數(shù)據(jù)庫系統(tǒng)包括,解析數(shù)據(jù)庫更改(查詢)語句并產(chǎn)生對由UPDATE語句指定的表變化的邏輯描述的解析器,產(chǎn)生將執(zhí)行更改的執(zhí)行算法的查詢優(yōu)化器,以及實現(xiàn)執(zhí)行算法的查詢執(zhí)行引擎。執(zhí)行算法由以下步驟組成(i)確定需要更新的復(fù)雜結(jié)構(gòu)類型列(例如嵌套表)中的行,并計算要更新的復(fù)雜結(jié)構(gòu)類型列中列的新值,以及(ii)將經(jīng)計算新值應(yīng)用于復(fù)雜結(jié)構(gòu)類型列中。為了集值列的更改,步驟(ii)使用表示集值列中值的變化以及復(fù)雜結(jié)構(gòu)類型列的分層結(jié)構(gòu)中要更新值的位置的集聚的一種數(shù)據(jù)結(jié)構(gòu)(變化描述符)。在步驟(ii)中,查詢執(zhí)行引擎讀取變化描述符并將其所描述的變化應(yīng)用于集值列,除此之外還將標量更新用于標量值列。用于實現(xiàn)UPDATE擴展的方法使用一種稱為變化描述符的技術(shù),該描述符是將所有標量和集值變化集聚成提供對要在集值列中作出變化的完整描述的單一值的數(shù)據(jù)結(jié)構(gòu)。變化描述符告知查詢執(zhí)行引擎什么要變化和何處要變化,并被包裝為常規(guī)的標量但帶有在指定分層層次上更改標量所需的所有分層結(jié)構(gòu)信息。因而變化描述符啟用單個操作中在各粒度層次上多個更新的有效應(yīng)用。通過更新僅受由UPDATE操作中SET短語在各嵌套層上更改的特定標量字段影響的索引,并且還更新那些對應(yīng)于由UPDATE操作更改的實際元素的索引行,變化描述符還啟用有效索引維護算法的實現(xiàn)。變化描述符還具有從其應(yīng)用本身分離變化計算的優(yōu)點(也稱為萬圣節(jié)保護),即防止更新語句對它本身的副作用。如果計算和變化的應(yīng)用未能強分離這可能會發(fā)生,因為第一階段可受不恰當(dāng)?shù)挠绊?,作為看到對?shù)據(jù)的中間變化的結(jié)果可產(chǎn)生第二階段。因而本發(fā)明啟用嵌套關(guān)系SQL語言擴展的使用以在一個步驟內(nèi)用任意方法更改帶有分層結(jié)構(gòu)的表(諸如嵌套表和存儲復(fù)雜結(jié)構(gòu)化對象或XML的表),并提供有效獲取復(fù)雜和部分更新的各種機制(變化描述符、查詢最優(yōu)化和查詢執(zhí)行技術(shù)的發(fā)揮)。本發(fā)明的SQL語言擴展還在適于實現(xiàn)本發(fā)明的數(shù)據(jù)庫中啟用用于管理和查詢復(fù)雜結(jié)構(gòu)類型的關(guān)系或XML數(shù)據(jù)的豐富和有效支持。結(jié)合附圖閱讀前面的
發(fā)明內(nèi)容和以下說明性實施例的詳細描述,能得到更好的理解。為了說明本發(fā)明各實施例,在附圖中示出本發(fā)明的示例性結(jié)構(gòu);然而,本發(fā)明并不限于所揭示的特定方法和裝置。在附圖中圖1示出通過列舉滿足查詢中謂詞的行并計算每行薪水(Salary)列的新值而實現(xiàn)的薪水標量的嵌套表更新。圖2-4示出根據(jù)本發(fā)明包括顯示變化描述符內(nèi)容及其應(yīng)用效果的嵌套UPDATE語句的三個示例。圖5示出使用常規(guī)SQLServer系統(tǒng)中的常規(guī)UPDATE指令來解析、最優(yōu)化和執(zhí)行表的常規(guī)更新的步驟。圖6示出本發(fā)明的嵌套更新情形,從而查詢執(zhí)行過程被更改成根據(jù)本發(fā)明計算變化描述符。具體實施例方式本發(fā)明的主題是專門為滿足法定要求而進行描述的。然而,該描述本身并不是要限制本專利的范圍。相反,發(fā)明者已經(jīng)預(yù)期到已聲明主題也能結(jié)合其它現(xiàn)有或以后的技術(shù)用其它方式體現(xiàn),以包括不同的步驟或類似于本文檔中所述步驟的組合。此外,盡管術(shù)語“步驟”在此可用以暗示所用方法的不同方面,該術(shù)語不應(yīng)被解釋為暗示在此揭示的不同步驟之間或當(dāng)中的任何特定次序,除非有必要明確說明單獨步驟的次序時。數(shù)據(jù)庫和存儲器管理領(lǐng)域中的技術(shù)人員將理解,本發(fā)明對支持諸如MYSQL的嵌套表的任意擴展關(guān)系數(shù)據(jù)庫系統(tǒng)是有用的。相應(yīng)地,可理解參照圖1-6在此描述的本發(fā)明可應(yīng)用于所有這樣的系統(tǒng)中。定義復(fù)雜結(jié)構(gòu)類型復(fù)雜結(jié)構(gòu)類型由一個字段、屬性和方法的集組成。每個字段或?qū)傩钥梢允且韵轮?標量類型;-復(fù)雜結(jié)構(gòu)類型本身;-其中每個元素是復(fù)雜結(jié)構(gòu)類型的多重集。復(fù)雜結(jié)構(gòu)類型被限制為是非遞歸的。換言之,復(fù)雜結(jié)構(gòu)類型不能包括該相同類型字段的屬性。在此定義的復(fù)雜結(jié)構(gòu)類型包括嵌套表、集值表、和其它多維數(shù)據(jù)結(jié)構(gòu)。多重集多重集是一類集合。它是帶有可能復(fù)制本的一個無序?qū)ο蠹6嘀丶谒x了所包含元素類型的意義上具有強類別性。本文檔將使用符號Multiset<T>來表示類型為T的元素的多重集。在復(fù)雜結(jié)構(gòu)類型和多重集值類型中,具有任意深度嵌套層次都是可能的。復(fù)雜結(jié)構(gòu)類型可用以下語法來規(guī)范地表示。在該示例中,AddressType具有稱為PhoneNo的集值字段,并分類為Multset<PhoneNoType>classAddressType{SqlStringStreet,SqlStringCity,SqlStringCountry,Multiset<PhoneNoType>PhoneNos}其中PhoneNoType被定義為classPhoneNoType{SqlStringAreaCode,SqlStringNumber,SqlStringExtension}以下表使用以上定義的類型。首先一MULTISET類型為AddressType的Multiset創(chuàng)建。然后該類型被用以定義Employees(雇員)表的列CREATETYPEAddressesTypeASMULTISET(AddressType)CREATETABLEEmployees(EmpIDint,F(xiàn)irstNamevarchar(30),LastNamevarchar(30),Salaryint,AddressesAddressesType)本發(fā)明實施例本發(fā)明提供一種用于對帶有復(fù)雜結(jié)構(gòu)的表(即包含結(jié)構(gòu)化列和多重集值列的表)提供數(shù)據(jù)更改能力的技術(shù)。在本發(fā)明優(yōu)選實施例中,這些特征是用于更新存儲在關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的SQLServer引擎的一部分。例如,本發(fā)明結(jié)合常具有比1NF(或“平直”)關(guān)系模型復(fù)雜的數(shù)據(jù)模型的應(yīng)用程序使用。它們模擬的數(shù)據(jù)類型具有復(fù)雜的內(nèi)部結(jié)構(gòu)和/或包括這些值的多重集。通常,這樣的應(yīng)用程序使用一個平直表集來模擬該數(shù)據(jù)。復(fù)雜結(jié)構(gòu)類型和多重集提供一種用來建立其邏輯模式更自然地映射到原始數(shù)據(jù)模型的這類數(shù)據(jù)的模型。本發(fā)明可用于更新嵌入這樣的復(fù)雜結(jié)構(gòu)類型內(nèi)的多重集中的關(guān)系數(shù)據(jù)。如在下面將要詳細解釋的,本發(fā)明還包括用SQL在平直表的最外層上提供的豐富程度和表達能力來更改多重集數(shù)據(jù)的能力。根據(jù)本發(fā)明,SQL語句正在被增強以支持對表的集值列(多重集)的更改。根據(jù)本發(fā)明在增強以支持對表集值列(多重集)的更改的SQL語句是UPDATE語句。常規(guī)UPDATE語句的一般格式如下所示,其中由<>包圍的語法元素是后來在描述中擴展的非終結(jié)詞UPDATE<target-table>SET<scalar-column-modificationl>,<scalar-column-modification>,.......WHERE<search-condition>其中<target-table>是要更改的表,<scalar-column-modification>指定標量值列的更改并具有以下形式<target-columnl>=<value-expression>其中<target-column>是要更改的列的名字,且<value-expression>是提供給應(yīng)修改的<target-column>以新值的標量值表達式。根據(jù)本發(fā)明的UPDATE語句的提議擴展在可用于更改集值列的SET短語中引入另一類更改(<collection-column-modification>)。<collection-column-modification>是以下形式之一(UPDATE<collection-valued-column>SET...WHERE<search-condition>)或(DELETEFROM<collection-valued-column>WHERE...)或(INSERTINTO<collection-valued-column>VALUES(...))換言之,使用類似于針對外部表的INSERT/UPDATE/DELETE的INSERT/UPDATE/DELETE語法。內(nèi)部UPDATE的SET短語可使用同樣遞歸地嵌套的句法方法來指定對外部集值列內(nèi)集值列的更改,并因而啟用任意嵌套層次中集值列的更改。實際上,通過將INSERT/UPDATE/DELETE嵌入外部UPDATE語句的SET短語,集值列上的更改被模型化為外部表上的UPDATE。如上所述,將所有標量和集值變化集聚成提供要根據(jù)本發(fā)明在復(fù)雜結(jié)構(gòu)、對象值或集值列中作出變化的完整描述的單一值的數(shù)據(jù)結(jié)構(gòu)在此被稱為“變化描述符”。變化描述符告知UPDATE指令在復(fù)雜結(jié)構(gòu)類型分層結(jié)構(gòu)中什么要改變和何處變化,并被包裝為常規(guī)標量從而允許UPDATE指令在指定分層層次上更新標量。通過更新僅受由UPDATE操作中SET短語影響的標量或集值字段所影響的索引,并還僅更新那些對應(yīng)于由UPDATE操作更改的實際元素集的索引行,變化描述符還啟用有效索引維護算法的實現(xiàn)。因而本發(fā)明使用變化描述符來實現(xiàn)對不是標量卻具有分層結(jié)構(gòu)的表的復(fù)雜和部分更新。變化描述符的實現(xiàn)示例將參照對Employees表的更新提供如下,該表帶有標量值列FirstName(名)、LastName(姓)和EmployeeID(工號)、Salary(薪水)以及存儲一地址集稱為Address(地址)的集值列。集值列中每個地址具有以下標量值列Street(街道)、City(城市)、State(州)、ZipCode(郵編)以及稱為PhoneNo(電話號碼)的集值列。例如EmployeesEmployeeIDFirstNameLastNameSalaryAddressesStreetCityStateZipCodePhoneNosAreaCode(區(qū)號)Number(號碼)Extension(分機)常規(guī)UPDATE語句的語法僅允許通過分配新值給它們來整個地更改表的列。作為示例,如果表“Employees”中的雇員1234和1235有10%的加薪,則該操作可用以下常規(guī)語法來實現(xiàn)UPDATEEmployeesSETSalary=Salary*1.1WHEREEmpID=1234OREmpID=1235使用兩個階段來處理這樣的UPDATE。在第一個階段期間,列舉要改變的行并計算要更改的列的新值。該過程產(chǎn)生表示要執(zhí)行改變的數(shù)據(jù)流,在此稱為δ流。在第二階段中,按這樣的δ流來更改各列。另一方面,根據(jù)本發(fā)明,UPDATE語句使用同一使用兩個階段的機制的變體來更改復(fù)雜結(jié)構(gòu)集值列的各個部分。在第一階段中,根據(jù)本發(fā)明,δ流使用集聚所有集值列變化的新數(shù)據(jù)結(jié)構(gòu)。如圖1所示,更新的第一階段通過列舉滿足查詢中謂詞的各行并計算每一行中Salary列的新值來實現(xiàn)。這將產(chǎn)生更新的δ流。第二階段包括將δ流應(yīng)用于表本身以便執(zhí)行先前收集的變化的步驟。如在此所述的,變化描述符技術(shù)是一種擴展上述δ流概念用以實現(xiàn)復(fù)雜結(jié)構(gòu)或集值列的較細粒度的而非全部的變化。要應(yīng)用于集值列作為嵌套更新一部分的變化集可視為δ流本身。該δ流嵌套于表示表格變化的最頂層δ流內(nèi)。對包含在集值列內(nèi)的集值列的改變還可再次表示為進一步嵌套的δ流。變化描述符是嵌套δ流的緊縮和標量表示。將其表示為標量值使它在產(chǎn)生最頂層的表層δ流期間能與常規(guī)表列的其它新值一起被無隙收集。這使標量和多層嵌套更新能在同一語句中混合在一起。更新的第二階段的實現(xiàn)使人理解,變化描述符并不包含集值列的全部新值而僅包含要應(yīng)用的細粒度化變化集。該實現(xiàn)還知道集值列的存儲格式,并能將包含在變化描述符內(nèi)的信息翻譯成物理操作。因此,變化描述符格式是相當(dāng)靈活的,但又不是依賴于實現(xiàn)的,且可用于各種其它類型的諸如XML的復(fù)雜結(jié)構(gòu)、對象類型以及集值列。圖2-4示出嵌套更新語句的三個示例,以及對應(yīng)的描繪變化描述符內(nèi)容及其應(yīng)用效果的圖表。第一語句(圖2)將改變兩個雇員的記錄,同時加薪10%并更新在華盛頓州的地址的郵編。UPDATEEmployeesSETSalary=Salary*1.1,(UPDATEAddressesA(addr)SETaddr.ZipCode=‘98074’,WHEREaddr.State=‘WA’)WHEREEmpID=1234OREmpID=1235第二語句(圖3)是類似的,但它還更新正在更新的地址內(nèi)包含的某些電話的AreaCode(區(qū)號)字段。這示出在同一語句中更新分層結(jié)構(gòu)中三個層次上標量值的能力(Salary在層1,郵編在層2,而區(qū)號在層3)。UPDATEEmployeesSETSalary=Salary*1.1,(UPDATEAddressesA(addr)SETaddr.ZipCode=‘98074’,(UPDATEaddr.PhoneNosP(phone)SETphone.AreaCode=‘425’WHEREphone.AreaCode=‘206’)WHEREaddr.State=‘WA’)WHEREEmpID=1234OREmpID=1235在第三示例(圖4)中,與加薪一起,兩個雇員還移除了他們在西雅圖的地址。UPDATEEmployeesSETSalary=Salary*1.1,(DELETEFROMAddressesWHERECity=‘Seattle’)WHEREEmpID=1234OREmpID=1235改變描述符的代碼實現(xiàn)用于根據(jù)本發(fā)明實現(xiàn)變化描述符的代碼進行操作,用來建立變化描述符并消費變化描述符。該變化描述符從分層結(jié)構(gòu)中的自底向上建立,并且接收該變化描述符的操作者根據(jù)以上詳細陳述的語法將它們分開。語法指定在分層嵌套表結(jié)構(gòu)中的更新位置并保持多值存儲數(shù)據(jù)的分層記錄。由于變化描述符包括位置信息以及標量信息,單元內(nèi)的分層數(shù)據(jù)可使用查詢執(zhí)行算法中的單個步驟來更新,如以上示例所述。圖5和6示出以上圖2-4示例中本發(fā)明的變化描述符的實現(xiàn)。圖5示出使用常規(guī)SQLServer系統(tǒng)中常規(guī)UPDATE指令來解析、優(yōu)化以及執(zhí)行單元的常規(guī)更新的步驟。圖6示出本發(fā)明的嵌套更新情形,從而查詢執(zhí)行過程被更改成根據(jù)以上語法來計算變化描述符。如圖所示,關(guān)系數(shù)據(jù)庫系統(tǒng)包括解析所接收的SQL語句并產(chǎn)生用戶要求數(shù)據(jù)庫完成的(例如插入、更新、或刪除數(shù)據(jù))邏輯描述的解析器,以及產(chǎn)生使用本領(lǐng)域中眾所周知技術(shù)的執(zhí)行算法的查詢優(yōu)化器。根據(jù)本發(fā)明,圖5的常規(guī)查詢執(zhí)行被更改成還包括計算變化描述符用于作出在變化描述符中陳述的嵌套表中每個變化的步驟。此外,根據(jù)本發(fā)明查詢執(zhí)行引擎被增強以讀取變化描述符并將如變化描述符所述的變化應(yīng)用于表中。在圖6示例中,更新地址以及薪水。一旦收集了各個變化,它們就被應(yīng)用于與本發(fā)明SQLServer系統(tǒng)相關(guān)聯(lián)的數(shù)據(jù)庫(未示出)中的Employees表。本領(lǐng)域技術(shù)人員將從圖6理解,通過更新僅受由UPDATE操作中SET短語在各嵌套層上更改的特定標量字段影響的索引,并還更新那些對應(yīng)于由UPDATE操作被更改的實際元素的索引行,本發(fā)明的變化描述符還啟用有效索引維護算法的實現(xiàn)。變化描述符還具有從其應(yīng)用本身分離關(guān)于變化的計算的優(yōu)點(也稱為萬圣節(jié)保護),即防止更新語句對它本身的副作用。如果計算和變化的應(yīng)用在兩個獨立步驟中未被強分離這可能會發(fā)生,因為第一階段可受不恰當(dāng)?shù)挠绊?,作為看到?shù)據(jù)中間變化的結(jié)果可產(chǎn)生第二階段。本領(lǐng)域技術(shù)人員還將理解,本發(fā)明對將大數(shù)據(jù)類型存儲為數(shù)據(jù)庫管理系統(tǒng)內(nèi)用戶定義類型字段是特別有利的。要理解可對所述實施例作變化而不背離本發(fā)明的寬泛發(fā)明概念。例如,盡管本發(fā)明實施例已如上在微軟的SQLServer數(shù)據(jù)庫管理系統(tǒng)的環(huán)境中進行了描述,要理解本發(fā)明可被包括在支持使用SQLUPDATE語句的任何數(shù)據(jù)庫管理系統(tǒng)(例如面向?qū)ο髷?shù)據(jù)庫、XML數(shù)據(jù)庫等)中。此外,盡管本發(fā)明的某些方面已被描述為包括在諸如SQLServer的關(guān)系數(shù)據(jù)庫系統(tǒng)的環(huán)境中,可以理解本發(fā)明的那些方面不必受限于在該環(huán)境中的實現(xiàn)。相應(yīng)地,可以理解本發(fā)明并不限于所揭示的特定實施例,但旨在包括如所附權(quán)利要求中定義的本發(fā)明精神和范圍內(nèi)的所有變體。權(quán)利要求1.一種在關(guān)系數(shù)據(jù)庫系統(tǒng)中更新復(fù)雜結(jié)構(gòu)類型列內(nèi)值的方法,其特征在于,包括以下步驟使用集聚復(fù)雜結(jié)構(gòu)列的分層結(jié)構(gòu)任何層上的值的變化的數(shù)據(jù)結(jié)構(gòu),來表示所述復(fù)雜結(jié)構(gòu)類型列中值的更改;以及響應(yīng)于所述數(shù)據(jù)庫上的數(shù)據(jù)更改語句,計算所述數(shù)據(jù)結(jié)構(gòu)以確定要用所述集聚變化來更新所述復(fù)雜結(jié)構(gòu)類型列中的哪個值。2.如權(quán)利要求1所述的方法,其特征在于,還包括在所述復(fù)雜結(jié)構(gòu)類型列的分層結(jié)構(gòu)內(nèi)的不同層次上同步更新多個標量值的步驟。3.如權(quán)利要求1所述的方法,其特征在于,還包括在所述關(guān)系數(shù)據(jù)庫系統(tǒng)的復(fù)雜結(jié)構(gòu)類型列中同步更新表中的標量值以及復(fù)雜結(jié)構(gòu)類型值的步驟。4.如權(quán)利要求1所述的方法,其特征在于,還包括將INSERT/UPDATE/DELETE語句嵌入UPDATE語句的SET短語中。5.如權(quán)利要求4所述的方法,其特征在于,還包括將多個嵌套SET短語嵌入對應(yīng)于所述復(fù)雜結(jié)構(gòu)類型列的分層結(jié)構(gòu)內(nèi)每一層的最外部UPDATE語句。6.如權(quán)利要求4所述的方法,其特征在于,所述計算步驟包括更新僅受由UPDATE語句中SET短語在各嵌套層上更改的特定標量字段影響的索引,并更新那些對應(yīng)于由UPDATE語句更改的實際值的索引行的步驟。7.如權(quán)利要求1所述的方法,其特征在于,還包括將所述集聚變化應(yīng)用于所述復(fù)雜結(jié)構(gòu)類型列的步驟,其中所述應(yīng)用步驟與所述計算步驟分開以便提供萬圣節(jié)保護。8.一種響應(yīng)于數(shù)據(jù)庫更改語句以存儲和更新至少一個復(fù)雜結(jié)構(gòu)類型列中值的關(guān)系數(shù)據(jù)庫系統(tǒng),其特征在于,包括一解析器,解析數(shù)據(jù)庫更改語句并產(chǎn)生對由數(shù)據(jù)庫更改語句提議的數(shù)據(jù)庫變化的描述;一查詢優(yōu)化器,產(chǎn)生實現(xiàn)所述數(shù)據(jù)庫更改語句的執(zhí)行算法;以及一查詢執(zhí)行引擎,使用所述執(zhí)行算法以計算所述數(shù)據(jù)庫更改語句的數(shù)據(jù)結(jié)構(gòu)以確定要更新復(fù)雜結(jié)構(gòu)類型列內(nèi)的哪些值,其中所述數(shù)據(jù)結(jié)構(gòu)將所述復(fù)雜結(jié)構(gòu)類型列中的值表示為在所述復(fù)雜結(jié)構(gòu)類型列的分層結(jié)構(gòu)的任一層次上值的變化的集聚,并且所述查詢執(zhí)行引擎將所述變化應(yīng)用于要被更新的復(fù)雜結(jié)構(gòu)類型列中的值。9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述查詢執(zhí)行引擎在所述復(fù)雜結(jié)構(gòu)類型列的分層結(jié)構(gòu)內(nèi)的不同層次上同步更新多個標量值。10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述查詢執(zhí)行引擎在所述關(guān)系數(shù)據(jù)庫系統(tǒng)的復(fù)雜結(jié)構(gòu)類型列中同步更新表中的標量值以及復(fù)雜結(jié)構(gòu)類型值的步驟。11.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述解析器解析數(shù)據(jù)庫UPDATE語句的SET短語。12.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述解析器在對應(yīng)于所述復(fù)雜結(jié)構(gòu)類型列的分層結(jié)構(gòu)中每一層的最外部UPDATE語句內(nèi)的多個嵌套SET短語中解析所述UPDATE語句。13.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述查詢執(zhí)行引擎更新僅受由UPDATE語句中由SET短語在各嵌套層上更改的特定標量字段影響的索引,并僅更新那些對應(yīng)于由UPDATE語句更改的實際值的索引行。14.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述查詢執(zhí)行引擎將所述集聚的變化與所述數(shù)據(jù)結(jié)構(gòu)的計算分開應(yīng)用于所述復(fù)雜結(jié)構(gòu)類型列,以便提供萬圣節(jié)保護。15.一種更新關(guān)系數(shù)據(jù)庫系統(tǒng)集值列中值的方法,其特征在于,包括以下步驟使用集聚集值列內(nèi)的值的變化的數(shù)據(jù)結(jié)構(gòu),來表示所述集值列中對值的更改;以及響應(yīng)于所述數(shù)據(jù)庫上的數(shù)據(jù)更改語句,計算所述數(shù)據(jù)結(jié)構(gòu)以確定要用所述集聚變化來更新所述集值列中的哪些值。16.如權(quán)利要求15所述的方法,其特征在于,還包括在所述集值列的不同層次上同步更新多個標量值的步驟。17.如權(quán)利要求15所述的方法,其特征在于,還包括同步更新所述關(guān)系數(shù)據(jù)庫系統(tǒng)的表中的標量值以及集值列中值的步驟。18.一種響應(yīng)于數(shù)據(jù)庫更改語句以存儲和更新至少一個集值列中值的關(guān)系數(shù)據(jù)庫系統(tǒng),其特征在于,包括一解析器,解析數(shù)據(jù)庫更改語句并產(chǎn)生對由數(shù)據(jù)庫更改語句提議的數(shù)據(jù)庫變化的描述;一查詢優(yōu)化器,產(chǎn)生實現(xiàn)所述數(shù)據(jù)庫更改語句的執(zhí)行算法;以及一查詢執(zhí)行引擎,使用所述執(zhí)行算法以計算所述數(shù)據(jù)庫更改語句的數(shù)據(jù)結(jié)構(gòu)以確定要更新集值列內(nèi)的哪些值,其中所述數(shù)據(jù)結(jié)構(gòu)將所述集值列中的值表示為在所述集值列的分層結(jié)構(gòu)的任一層次上值的變化的集聚,并且所述查詢執(zhí)行引擎將所述變化應(yīng)用于要被更新的復(fù)雜結(jié)構(gòu)類型列中的值。19.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述解析器解析數(shù)據(jù)庫UPDATE語句的SET短語。20.如權(quán)利要求19所述的系統(tǒng),其特征在于,所述解析器在對應(yīng)于所述復(fù)雜結(jié)構(gòu)類型列的每一層的最外部UPDATE語句內(nèi)解析多個嵌套SET短語中的所述UPDATE語句。21.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述查詢執(zhí)行引擎更新僅受由UPDATE語句中SET短語在各嵌套層上更改的特定標量字段影響的索引,并更新那些對應(yīng)于由UPDATE語句更改的實際值的索引行。22.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述查詢執(zhí)行引擎將所述集聚變化與所述數(shù)據(jù)結(jié)構(gòu)的計算分開應(yīng)用于所述集值列,以便提供萬圣節(jié)保護。全文摘要一種使用UPDATE語句的嵌套擴展在嵌套表中更新集值列和其它復(fù)雜結(jié)構(gòu)列的技術(shù),該擴展使用與用來更改表的標量值列的UPDATE語句(稱為外部UPDATE)的語法和語義類似的一種語法和語義來更改集值列。使用與外部層次上表相同的語法和語義結(jié)構(gòu)使處理關(guān)系表更改的現(xiàn)有實現(xiàn)也能重新使用其實現(xiàn)技術(shù)來處理更改集值列的更新。該UPDATE擴展使得嵌套集的更新的規(guī)范能被嵌入在分層結(jié)構(gòu)中任意層上。該新語法以平行于數(shù)據(jù)結(jié)構(gòu)本身的方法嵌于外部UPDATE語句中,并因而該語法更直接地映射到數(shù)據(jù)的用戶概念模型中。用于實現(xiàn)UPDATE擴展的方法使用一種變化描述符,該描述符是將所有標量和集值變化集聚成可應(yīng)用于已變化集值列的單一值的數(shù)據(jù)結(jié)構(gòu)。該技術(shù)還可用于對諸如對象或XML的其它類復(fù)雜結(jié)構(gòu)列的更改。該變化描述符包括單元的分層信息,從而使能單個操作中在各粒度層次上多個更新的有效應(yīng)用,并通過更新僅受由UPDATE操作影響的索引,及僅更新那些受UPDATE操作影響的索引行而使能有效索引維護算法的實現(xiàn)。文檔編號G06F17/00GK1875358SQ200480003258公開日2006年12月6日申請日期2004年7月29日優(yōu)先權(quán)日2003年10月24日發(fā)明者B·拉塔克瑞施納,S·斯特凡尼,A·瑟納,J·A·布萊克雷,O·N·希利格申請人:微軟公司