專利名稱:關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,具體涉及一種關(guān)系型數(shù)據(jù)庫(kù)的序列號(hào)應(yīng)用方法和系統(tǒng)。
背景技術(shù):
關(guān)系型數(shù)據(jù)庫(kù)是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù),是當(dāng)今最主流的數(shù)據(jù)庫(kù)產(chǎn)品。經(jīng)過幾十年的發(fā)展,關(guān)系型數(shù)據(jù)庫(kù)已被廣泛應(yīng)用于不同行業(yè)和領(lǐng)域,如,甲骨文公司的Oracle、MySQL,微軟公司的 SQLServer,IBM 公司的 DB2 等。在關(guān)系型數(shù)據(jù)庫(kù)中,數(shù)據(jù)表用來(lái)存儲(chǔ)數(shù)據(jù)對(duì)象,一般包括字段名稱,取值和數(shù)據(jù)類型等屬性。數(shù)據(jù)表中,主鍵是一個(gè)字段或者一個(gè)字段集合用于唯一的標(biāo)識(shí)表中每一行數(shù)據(jù)。一般而言,數(shù)據(jù)表會(huì)自動(dòng)生成等間隔數(shù)值的序列號(hào)作為表中的主鍵。而不同公司的數(shù)據(jù)庫(kù)產(chǎn)品都有其各自的序列號(hào)管理和生成方式,例如Oracle的序列被定義成一個(gè)對(duì)象進(jìn)行管理,使用時(shí)遵循Oracle定義語(yǔ)法,如通過Sequence_name. nextval獲取序列號(hào)當(dāng)前值;SQLServer使用Identity屬性創(chuàng)建自增數(shù)據(jù)列,由數(shù)據(jù)庫(kù)自動(dòng)管理序列號(hào)的遞增;MySQL使用Auto_increment屬性創(chuàng)建自增數(shù)據(jù)列,由數(shù)據(jù)庫(kù)自動(dòng)管理序列號(hào)的遞增;DB2使用的序列被定義成一個(gè)對(duì)象進(jìn)行管理,使用時(shí)遵循DB2定義語(yǔ)法。在不同的行業(yè)應(yīng)用和項(xiàng)目中,由于項(xiàng)目規(guī)模和需求的不同,往往會(huì)使用不同的數(shù)據(jù)庫(kù)產(chǎn)品,這就導(dǎo)致在跨類型數(shù)據(jù)庫(kù)程序遷移時(shí),需要通過對(duì)程序中大量數(shù)據(jù)庫(kù)操作代碼進(jìn)行相應(yīng)的改造,才能適應(yīng)不同數(shù)據(jù)庫(kù)序列號(hào)生成和使用方式造成的差異??傊?,需要本領(lǐng)域技術(shù)人員解決的技術(shù)問題就是在跨類型數(shù)據(jù)庫(kù)程序遷移時(shí),如何降低因序列號(hào)生成和使用方式差異造成的代碼改造成本。
發(fā)明內(nèi)容
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法和相應(yīng)的系統(tǒng)。依據(jù)本發(fā)明的一個(gè)方面,提供了一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法,包括序列定義,預(yù)置序列號(hào)映射表,所述序列號(hào)映射表中存儲(chǔ)有與數(shù)據(jù)表序列標(biāo)識(shí)對(duì)應(yīng)的一條或多條記錄,所述記錄包括一個(gè)或多個(gè)字段,所述字段包括序列號(hào)名稱、序列號(hào)當(dāng)前值;序列取值,根據(jù)序列號(hào)名稱匹配所述序列號(hào)映射表,若存在匹配記錄,則從所述記錄中獲取對(duì)應(yīng)的序列號(hào)當(dāng)前值,按照對(duì)應(yīng)的序列號(hào)增長(zhǎng)值計(jì)算序列號(hào)返回值;返回所述序列號(hào)返回值;使用所述序列號(hào)返回值更新所述記錄中對(duì)應(yīng)的序列號(hào)當(dāng)前值??蛇x地,所述序列號(hào)映射表記錄的字段還包括序列號(hào)當(dāng)前狀態(tài);
所述序列取值中,若存在匹配記錄之后還包括判斷序列號(hào)當(dāng)前狀態(tài)是否可用,若為非可用狀態(tài),則返回當(dāng)前序列不可用提示信
肩、O可選地,所述序列取值還包括若所述序列號(hào)當(dāng)前狀態(tài)為可用狀態(tài),則進(jìn)一步判斷所述序列號(hào)當(dāng)前狀態(tài)是否為鎖定狀態(tài),若為鎖定,則等待預(yù)定時(shí)間間隔后重新判斷所述當(dāng)前序列號(hào)狀態(tài)是否為鎖定狀態(tài),直到超出等待時(shí)間閾值,并返回當(dāng)前序列不可用的提示信息;若不為鎖定,則修改所述序列號(hào)當(dāng)前狀態(tài)為鎖定狀態(tài);以及在計(jì)算出序列號(hào)返回值后,將所述序列號(hào)當(dāng)前狀態(tài)置為可用狀態(tài)??蛇x地,所述方法還包括序列池定義,所述序列池以鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)所述序列號(hào)映射表中對(duì)應(yīng)的記錄;所述序列池還包括對(duì)指定序列號(hào)名稱的序列操作方法,包括新增序列號(hào),用于向所述序列號(hào)映射表中增加一條新的序列記錄;和/或刪除序列號(hào),用于按照指定的序列號(hào)名稱,從所述序列號(hào)映射表中刪除一條對(duì)應(yīng)的序列記錄;和/或獲取序列號(hào),用于將所述序列取值中包括的步驟封裝在所述獲取序列號(hào)的方法中??蛇x地,所述序列池中的序列操作方法還包括序列池初始化,包括從所述序列號(hào)映射表中獲取全部有效記錄按照鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)到內(nèi)存中;所述獲取序列號(hào)中,返回序列號(hào)返回值后還包括判斷當(dāng)前返回值是否超出更新閾值,若未超出,則僅更新內(nèi)存中對(duì)應(yīng)的序列號(hào)當(dāng)前值;若超出更新閾值,則同時(shí)更新內(nèi)存和所述序列號(hào)映射表中對(duì)應(yīng)的序列號(hào)當(dāng)前值。根據(jù)本發(fā)明的另一方面,提供了一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用系統(tǒng),包括序列定義模塊,用于預(yù)置序列號(hào)映射表,所述序列號(hào)映射表中存儲(chǔ)有與數(shù)據(jù)表序列標(biāo)識(shí)對(duì)應(yīng)的一條或多條記錄,所述記錄包括一個(gè)或多個(gè)字段,所述字段包括序列號(hào)名稱、序列號(hào)當(dāng)前值;序列取值模塊,用于根據(jù)序列號(hào)名稱匹配所述序列號(hào)映射表,若存在匹配記錄,則從所述記錄中獲取對(duì)應(yīng)的序列號(hào)當(dāng)前值,按照對(duì)應(yīng)的序列號(hào)增長(zhǎng)值計(jì)算序列號(hào)返回值;返回所述序列號(hào)返回值;使用所述序列號(hào)返回值更新所述記錄中對(duì)應(yīng)的序列號(hào)當(dāng)前值??蛇x地,所述序列號(hào)映射表記錄的字段還包括序列號(hào)當(dāng)前狀態(tài);所述序列取值模塊還用于,若存在匹配記錄之后還包括判斷序列號(hào)當(dāng)前狀態(tài)是否可用,若為非可用狀態(tài),則返回當(dāng)前序列不可用提示信
肩、O可選地,所述序列取值模塊還用于若所述序列號(hào)當(dāng)前狀態(tài)為可用狀態(tài),則進(jìn)一步判斷所述序列號(hào)當(dāng)前狀態(tài)是否為鎖定狀態(tài),若為鎖定,則等待預(yù)定時(shí)間間隔后重新判斷所述當(dāng)前序列號(hào)狀態(tài)是否為鎖定狀態(tài),直到超出等待時(shí)間閾值,并返回當(dāng)前序列不可用的提示信息;若不為鎖定,則修改所述序列號(hào)當(dāng)前狀態(tài)為鎖定狀態(tài);以及在計(jì)算出序列號(hào)返回值后,將所述序列號(hào)當(dāng)前狀態(tài)置為可用狀態(tài)。可選地,所述系統(tǒng)還包括序列池模塊,所述序列池以鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)所述序列號(hào)映射表中對(duì)應(yīng)的記錄;所述序列池模塊還包括新增序列號(hào)單元,用于向所述序列號(hào)映射表中增加一條新的序列記錄;和/或刪除序列號(hào)單元,用于按照指定的序列號(hào)名稱,從所述序列號(hào)映射表中刪除一條對(duì)應(yīng)的序列記錄;和/或獲取序列號(hào)單元,用于將所述序列取值中包括的步驟封裝在所述獲取序列號(hào)的方法中??蛇x地,所述序列池模塊還包括序列池初始化單元,用于從所述序列號(hào)映射表中獲取全部有效記錄按照鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)到內(nèi)存中;所述獲取序列號(hào)單元,還用于判斷當(dāng)前返回值是否超出更新閾值,若未超出,則僅更新內(nèi)存中對(duì)應(yīng)的序列號(hào)當(dāng)前值;若超出更新閾值,則同時(shí)更新內(nèi)存和所述序列號(hào)映射表中對(duì)應(yīng)的序列號(hào)當(dāng)前值?,F(xiàn)有技術(shù)中,由于不同類型數(shù)據(jù)庫(kù)對(duì)序列號(hào)使用方式存在的差異,因此,當(dāng)程序在不同類型數(shù)據(jù)庫(kù)間遷移時(shí),必須對(duì)程序中原有的數(shù)據(jù)庫(kù)操作代碼進(jìn)行適應(yīng)性改造,導(dǎo)致遷移成本大幅增加。而本發(fā)明通過定義序列號(hào)映射表存儲(chǔ)各數(shù)據(jù)表對(duì)應(yīng)的序列號(hào),并按照統(tǒng)一規(guī)則對(duì)序列號(hào)進(jìn)行取值和更新,其所獲取的序列號(hào)可被應(yīng)用于任一類型數(shù)據(jù)庫(kù),消除了不同類型數(shù)據(jù)庫(kù)中序列號(hào)的生成機(jī)制帶來(lái)的差異,程序代碼可按統(tǒng)一的規(guī)則使用序列號(hào),即使改變數(shù)據(jù)庫(kù)也無(wú)需對(duì)程序代碼做出修改,因此,取得了降低數(shù)據(jù)庫(kù)遷移改造成本的有益效果。上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式
。
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法的流程示意圖;圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法中序列取值的流程示意圖;圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。參見圖1,圖1示出了本發(fā)明提供的一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法實(shí)施例一的流程示意圖,本實(shí)施例的內(nèi)容具體包括步驟101,序列定義,包括預(yù)置序列號(hào)映射表,所述序列號(hào)映射表中存儲(chǔ)有與序列標(biāo)識(shí)對(duì)應(yīng)的一條或多條記錄,所述記錄包括一個(gè)或多個(gè)字段,所述字段包括序列號(hào)名稱、序列號(hào)當(dāng)前值。本領(lǐng)域技術(shù)人員容易理解,本發(fā)明實(shí)施例中所述的序列號(hào)映射表可基于多種數(shù)據(jù)格式文件,只要能實(shí)現(xiàn)對(duì)序列記錄的存儲(chǔ)、讀取即可,例如可擴(kuò)展標(biāo)記(ExtensibleMarkup Language, XML)文件、文本文件等。在本發(fā)明另一優(yōu)選實(shí)施例中,序列號(hào)映射表采用數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,并使用結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language, SQL)對(duì)該表中
的記錄執(zhí)行新增、修改、刪除操作,下面給出所述序列號(hào)映射表的一個(gè)結(jié)構(gòu)定義示例
權(quán)利要求
1.一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法,其特征在于,包括序列定義,預(yù)置序列號(hào)映射表,所述序列號(hào)映射表中存儲(chǔ)有與數(shù)據(jù)表序列標(biāo)識(shí)對(duì)應(yīng)的一條或多條記錄,所述記錄包括一個(gè)或多個(gè)字段,所述字段包括序列號(hào)名稱、序列號(hào)當(dāng)前值;序列取值,根據(jù)序列號(hào)名稱匹配所述序列號(hào)映射表,若存在匹配記錄,則從所述記錄中獲取對(duì)應(yīng)的序列號(hào)當(dāng)前值,按照對(duì)應(yīng)的序列號(hào)增長(zhǎng)值計(jì)算序列號(hào)返回值;返回所述序列號(hào)返回值;使用所述序列號(hào)返回值更新所述記錄中對(duì)應(yīng)的序列號(hào)當(dāng)前值。
2.如權(quán)利要求1所述的方法,其特征在于,所述序列號(hào)映射表中記錄的字段還包括序列號(hào)當(dāng)前狀態(tài);所述序列取值中,若存在匹配記錄之后還包括判斷序列號(hào)當(dāng)前狀態(tài)是否可用,若為非可用狀態(tài),則返回當(dāng)前序列不可用提示信息。
3.如權(quán)利要求2所述的方法,其特征在于,所述序列取值還包括若所述序列號(hào)當(dāng)前狀態(tài)為可用狀態(tài),則進(jìn)一步判斷所述序列號(hào)當(dāng)前狀態(tài)是否為鎖定狀態(tài),若為鎖定,則等待預(yù)定時(shí)間間隔后重新判斷所述當(dāng)前序列號(hào)狀態(tài)是否為鎖定狀態(tài),直到超出等待時(shí)間閾值,并返回當(dāng)前序列不可用的提示信息;若不為鎖定,則修改所述序列號(hào)當(dāng)前狀態(tài)為鎖定狀態(tài);以及在計(jì)算出序列號(hào)返回值后,將所述序列號(hào)當(dāng)前狀態(tài)置為可用狀態(tài)。
4.如權(quán)利要求1、2或3所述的方法,其特征在于,所述方法還包括序列池定義,所述序列池以鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)所述序列號(hào)映射表中對(duì)應(yīng)的記錄; 所述序列池還包括對(duì)指定序列號(hào)名稱的序列操作方法,包括新增序列號(hào),用于向所述序列號(hào)映射表中增加一條新的序列記錄;和/或刪除序列號(hào),用于按照指定的序列號(hào)名稱,從所述序列號(hào)映射表中刪除一條對(duì)應(yīng)的序列記錄;和/或獲取序列號(hào),用于將所述序列取值中包括的步驟封裝在所述獲取序列號(hào)的方法中。
5.如權(quán)利要求4所述的方法,其特征在于,所述序列池中的序列操作方法還包括 序列池初始化,包括從所述序列號(hào)映射表中獲取全部有效記錄按照鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)到內(nèi)存中;所述獲取序列號(hào)中,返回序列號(hào)返回值后還包括判斷當(dāng)前返回值是否超出更新閾值,若未超出,則僅更新內(nèi)存中對(duì)應(yīng)的序列號(hào)當(dāng)前值; 若超出更新閾值,則同時(shí)更新內(nèi)存和所述序列號(hào)映射表中對(duì)應(yīng)的序列號(hào)當(dāng)前值。
6.一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用系統(tǒng),其特征在于,包括序列定義模塊,用于預(yù)置序列號(hào)映射表,所述序列號(hào)映射表中存儲(chǔ)有與數(shù)據(jù)表序列標(biāo)識(shí)對(duì)應(yīng)的一條或多條記錄,所述記錄包括一個(gè)或多個(gè)字段,所述字段包括序列號(hào)名稱、序列號(hào)當(dāng)前值;序列取值模塊,用于根據(jù)序列號(hào)名稱匹配所述序列號(hào)映射表,若存在匹配記錄,則從所述記錄中獲取對(duì)應(yīng)的序列號(hào)當(dāng)前值,按照對(duì)應(yīng)的序列號(hào)增長(zhǎng)值計(jì)算序列號(hào)返回值;返回所述序列號(hào)返回值;使用所述序列號(hào)返回值更新所述記錄中對(duì)應(yīng)的序列號(hào)當(dāng)前值。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述序列號(hào)映射表記錄的字段還包括序列號(hào)當(dāng)前狀態(tài);所述序列取值模塊還用于,若存在匹配記錄之后還包括判斷序列號(hào)當(dāng)前狀態(tài)是否可用,若為非可用狀態(tài),則返回當(dāng)前序列不可用提示信息。
8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述序列取值模塊還用于若所述序列號(hào)當(dāng)前狀態(tài)為可用狀態(tài),則進(jìn)一步判斷所述序列號(hào)當(dāng)前狀態(tài)是否為鎖定狀態(tài),若為鎖定,則等待預(yù)定時(shí)間間隔后重新判斷所述當(dāng)前序列號(hào)狀態(tài)是否為鎖定狀態(tài),直到超出等待時(shí)間閾值,并返回當(dāng)前序列不可用的提示信息;若不為鎖定,則修改所述序列號(hào)當(dāng)前狀態(tài)為鎖定狀態(tài);以及在計(jì)算出序列號(hào)返回值后,將所述序列號(hào)當(dāng)前狀態(tài)置為可用狀態(tài)。
9.如權(quán)利要求6、7或8所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括序列池模塊,所述序列池以鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)所述序列號(hào)映射表中對(duì)應(yīng)的記錄; 所述序列池模塊還包括新增序列號(hào)單元,用于向所述序列號(hào)映射表中增加一條新的序列記錄;和/或刪除序列號(hào)單元,用于按照指定的序列號(hào)名稱,從所述序列號(hào)映射表中刪除一條對(duì)應(yīng)的序列記錄;和/或獲取序列號(hào)單元,用于將所述序列取值中包括的步驟封裝在所述獲取序列號(hào)的方法中。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述序列池模塊還包括序列池初始化單元,用于從所述序列號(hào)映射表中獲取全部有效記錄按照鍵和數(shù)值對(duì)的結(jié)構(gòu)存儲(chǔ)到內(nèi)存中;所述獲取序列號(hào)單元,還用于判斷當(dāng)前返回值是否超出更新閾值,若未超出,則僅更新內(nèi)存中對(duì)應(yīng)的序列號(hào)當(dāng)前值;若超出更新閾值,則同時(shí)更新內(nèi)存和所述序列號(hào)映射表中對(duì)應(yīng)的序列號(hào)當(dāng)前值。
全文摘要
本發(fā)明公開了一種關(guān)系型數(shù)據(jù)庫(kù)序列號(hào)應(yīng)用方法和系統(tǒng),所述方法包括序列定義,預(yù)置序列號(hào)映射表,所述序列號(hào)映射表中存儲(chǔ)有與數(shù)據(jù)表序列標(biāo)識(shí)對(duì)應(yīng)的一條或多條記錄,所述記錄包括一個(gè)或多個(gè)字段,所述字段包括序列號(hào)名稱、序列號(hào)當(dāng)前值;序列取值,根據(jù)序列號(hào)名稱匹配所述序列號(hào)映射表,若存在匹配記錄,則從所述記錄中獲取對(duì)應(yīng)的序列號(hào)當(dāng)前值,按照對(duì)應(yīng)的序列號(hào)增長(zhǎng)值計(jì)算序列號(hào)返回值;返回所述序列號(hào)返回值;使用所述序列號(hào)返回值更新所述記錄中對(duì)應(yīng)的序列號(hào)當(dāng)前值。這樣一來(lái),消除了不同類型數(shù)據(jù)庫(kù)序列號(hào)生成規(guī)則差異導(dǎo)致的程序代碼差異,有效降低了數(shù)據(jù)庫(kù)遷移時(shí)的程序改造成本。
文檔編號(hào)G06F17/30GK103020268SQ20121057463
公開日2013年4月3日 申請(qǐng)日期2012年12月26日 優(yōu)先權(quán)日2012年12月26日
發(fā)明者栗增光, 周訓(xùn)波 申請(qǐng)人:大唐軟件技術(shù)股份有限公司