国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于非線性關(guān)系的稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用的算法分析與Oracle 實(shí)現(xiàn)

2013-03-20 08:24:54朱愛民
稅收經(jīng)濟(jì)研究 2013年3期
關(guān)鍵詞:子句層數(shù)數(shù)據(jù)表

◆孫 利 ◆朱愛民

一、引 言

稅務(wù)任務(wù)分發(fā)應(yīng)用是工作流的一種,工作流的概念源自企業(yè)的生產(chǎn)經(jīng)營管理與辦公自動化領(lǐng)域。稅務(wù)任務(wù)分發(fā)應(yīng)用通過記錄對稅務(wù)機(jī)關(guān)在稅收征管活動中具有上下層級順序的若干涵蓋多部門、多人員的工作流及工作流變化過程,監(jiān)督與控制稅務(wù)機(jī)關(guān)的整個任務(wù)落實(shí)過程諸如上傳下達(dá)完成等環(huán)節(jié)流程的執(zhí)行時間、效率與結(jié)果。通過對任務(wù)分發(fā)過程與結(jié)果的信息分析利用,進(jìn)行稅收征管業(yè)務(wù)流程再造,實(shí)現(xiàn)高水平的稅務(wù)信息化建設(shè)。

二、非線性的稅務(wù)任務(wù)分發(fā)應(yīng)用與一般稅務(wù)任務(wù)應(yīng)用的區(qū)別

一般稅務(wù)任務(wù)應(yīng)用是按照始于納稅人需求的納服體系建設(shè)要求設(shè)計(jì)的業(yè)務(wù)流程,通常是從納稅人的申請與納服部門的受理開始,中間經(jīng)過調(diào)查、核實(shí)、報批、審批等節(jié)點(diǎn),最終回到納服部門反饋納稅人結(jié)果為結(jié)點(diǎn)的過程。如圖1 所示:

圖1 一般稅務(wù)任務(wù)應(yīng)用

圖1 顯示了一般稅務(wù)任務(wù)應(yīng)用中節(jié)點(diǎn)與崗位的關(guān)系。在實(shí)際運(yùn)用中,通過設(shè)計(jì)不同事項(xiàng)途經(jīng)不同的節(jié)點(diǎn)以及不同的操作人員對應(yīng)的崗位,實(shí)現(xiàn)從對納稅人申請的受理開始任務(wù)的傳遞流程。這種業(yè)務(wù)流程實(shí)現(xiàn)的是一種線性關(guān)系,其結(jié)構(gòu)是鏈表式的基本數(shù)據(jù)結(jié)構(gòu),流程按順序訪問一組數(shù)據(jù)項(xiàng)的集合,這些數(shù)據(jù)項(xiàng)形成一個鏈表,每個元素都含有訪問下一個元素所需的信息。要訪問鏈表的信息,只需要引用鏈表的指針和結(jié)構(gòu)體的成員名即可。

從稅務(wù)機(jī)關(guān)內(nèi)部發(fā)起的自發(fā)任務(wù)分發(fā)應(yīng)用則不同。一項(xiàng)從內(nèi)部發(fā)起的征管任務(wù),從發(fā)起者開始,到最終履行者,任務(wù)逐級推送,涉及人員逐級增長,內(nèi)容逐步明晰,其業(yè)務(wù)流程實(shí)現(xiàn)的是非線性關(guān)系,所呈現(xiàn)的樹圖如圖2 所示。

圖2 稅務(wù)機(jī)關(guān)自發(fā)任務(wù)分發(fā)應(yīng)用的樹圖

其基本特征有:

特征1.1 稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用是樹的應(yīng)用。

稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用是由n 棵互不相交的樹組成的集合,即森林;每一棵樹是一棵有向樹,每棵樹的每個節(jié)點(diǎn)有零或多個子節(jié)點(diǎn),每個子節(jié)點(diǎn)有且僅有一個父節(jié)點(diǎn),在樹的根與其他節(jié)點(diǎn)之間、父節(jié)點(diǎn)與子節(jié)點(diǎn)之間有且僅有一條路徑。

特征1.2 稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用是有序樹。

有一個結(jié)點(diǎn)的入度為0,其余所有結(jié)點(diǎn)的入度都為l,是一個有根樹,雖不是自由樹,但作為一個為每個子結(jié)節(jié)規(guī)定從左到右次序的有序樹,則在實(shí)際中未必有必要性。

特征1.3 稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用是M 叉樹。

作為一個M 叉樹,每一個節(jié)點(diǎn)的出度小于或等于m,子節(jié)點(diǎn)的數(shù)目并不確定。 從行業(yè)應(yīng)用來看,稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用有以下特征:

特征2.1 樹的根、層數(shù)、不同層數(shù)的節(jié)點(diǎn)均存在不確定性。

不同層級的稅務(wù)機(jī)關(guān)下發(fā)任務(wù)時,其根、層數(shù)與不同層數(shù)的節(jié)點(diǎn)均不確定。不同的任務(wù),也產(chǎn)生同樣的不確定性。以節(jié)點(diǎn)落實(shí)到具體數(shù)據(jù)的不確定性為例:有的任務(wù)是指定數(shù)據(jù)的,例如對全國重點(diǎn)稅源納稅人的管理任務(wù),表現(xiàn)為數(shù)據(jù)量固定不變;有的任務(wù)是從一批指定數(shù)據(jù)到另一批指定數(shù)據(jù),如從風(fēng)險識別->風(fēng)險推送->風(fēng)險應(yīng)對,呈數(shù)據(jù)量衰減趨勢;有的任務(wù)是從文字描述發(fā)起到具體數(shù)據(jù)的落實(shí)過程,呈數(shù)據(jù)量增長趨勢。

特征2.2 目標(biāo)是實(shí)現(xiàn)以任務(wù)自身為核心的柔性的任務(wù)分發(fā)功能。

基于特征2.1,稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用的目標(biāo)是實(shí)現(xiàn)以任務(wù)自身為核心而非任務(wù)內(nèi)容為核心的、柔性的而非剛性的任務(wù)分發(fā)功能。在核心功能實(shí)現(xiàn)的基礎(chǔ)上,兼顧任務(wù)內(nèi)容所落實(shí)的具體數(shù)據(jù)信息,實(shí)現(xiàn)系統(tǒng)的完整性。

三、基于實(shí)際稅務(wù)應(yīng)用的表設(shè)計(jì)

如果從存取類似稅務(wù)任務(wù)分發(fā)這樣的應(yīng)用來說,無疑一些NoSQL 數(shù)據(jù)庫,例如文檔型數(shù)據(jù)庫是更好的解決方案。NoSQL 數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫相比,更偏重于數(shù)據(jù)存取和問題的解決,而非像關(guān)系型數(shù)據(jù)庫那樣基于關(guān)系模型、側(cè)重于分析數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系和結(jié)構(gòu)。關(guān)系型數(shù)據(jù)庫雖然不是唯一的高級數(shù)據(jù)庫模型,也不是性能最優(yōu)的模型,但是因?yàn)楣δ芗骖?,易于理解和使用,已成為目前使用最廣泛的主流數(shù)據(jù)庫,包括在稅務(wù)系統(tǒng)的應(yīng)用。本文也以關(guān)系數(shù)據(jù)庫為例說明。

稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用需要的基本信息有:

1.任務(wù)信息

任務(wù)有發(fā)起時間、發(fā)起部門、類型、完成任務(wù)的數(shù)量要求、質(zhì)量要求、時限要求等信息,因此,需要一個任務(wù)表(tasks),如表1:

表1 任務(wù)表

2.任務(wù)狀態(tài)信息

在業(yè)務(wù)流程設(shè)計(jì)上,任務(wù)分發(fā)的正常流程包括:生成->下發(fā)->未讀->已讀->(轉(zhuǎn)發(fā))->申請完成->完成,其業(yè)務(wù)邏輯為從任務(wù)制訂為起點(diǎn),把任務(wù)下發(fā)給指定對象,指定對象是否閱讀的狀態(tài)用于監(jiān)控接收任務(wù)對象的工作流。指定對象收到任務(wù)后,決定是否要轉(zhuǎn)發(fā)任務(wù),對轉(zhuǎn)發(fā)的任務(wù),原任務(wù)處于轉(zhuǎn)發(fā)狀態(tài),再重新生成新的任務(wù)。接收任務(wù)方完成任務(wù)后,向任務(wù)發(fā)起方提交任務(wù)完成申請,由任務(wù)發(fā)起方設(shè)定任務(wù)完成狀態(tài)。

非正常的業(yè)務(wù)邏輯有申請退回、刪除、凍結(jié)等。

任務(wù)狀態(tài)表(states)用于保存任務(wù)的狀態(tài),如表2:

表2 任務(wù)狀態(tài)表

3.任務(wù)分發(fā)人員信息

由于稅務(wù)任務(wù)分發(fā)時,常常需要分發(fā)同一任務(wù)給多個接收人員,因此需要任務(wù)分發(fā)人員信息表(operators)記錄任務(wù)分發(fā)人員的信息,對下發(fā)人員、接收人員進(jìn)行記錄,如表3:

表3 任務(wù)分發(fā)信息表

4.任務(wù)內(nèi)容/附件信息

在解決了核心問題后,通過任務(wù)內(nèi)容或附件表(attachments)的形式,記錄任務(wù)相關(guān)的內(nèi)容與附件,為精細(xì)化處理任務(wù)保存信息,如表4:

表4 任務(wù)附件表

稅務(wù)自發(fā)任務(wù)分發(fā)應(yīng)用的E-R 圖如圖3 所示。

圖3 表設(shè)計(jì)的E-R 圖

為便于描述,以上數(shù)據(jù)表設(shè)計(jì)均以單樹為例,未加入總?cè)蝿?wù)號字段來標(biāo)識區(qū)分多樹。

四、任務(wù)分發(fā)應(yīng)用的算法

對以上通過保存任務(wù)號+父任務(wù)號信息的形式實(shí)現(xiàn)的最基本的稅務(wù)任務(wù)分發(fā)應(yīng)用的數(shù)據(jù)表結(jié)構(gòu),我們運(yùn)用的最基本的算法即是任務(wù)的遍歷。通過任一任務(wù)的節(jié)點(diǎn),系統(tǒng)地處理任務(wù)里的每一節(jié)點(diǎn)。有三種基本的順序來遍歷節(jié)點(diǎn):

先序:先訪問根節(jié)點(diǎn)或父節(jié)點(diǎn),再訪問子節(jié)點(diǎn)。

中序:通過父節(jié)點(diǎn)得到所有同層子節(jié)點(diǎn),然后訪問子節(jié)點(diǎn)。

后序:先訪問子節(jié)點(diǎn),再訪問父節(jié)點(diǎn)直至根節(jié)點(diǎn)。

通過遞歸可以實(shí)現(xiàn)以上遍歷方法,如圖4 所示(圖左為先序遍歷,右為后序遍歷):

圖4 遞歸遍歷圖示(tid/fid 分別為子節(jié)點(diǎn)與父節(jié)點(diǎn))

在最簡數(shù)據(jù)表結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn)的遍歷,雖然可以采取三個遍歷方法,但實(shí)際使用以后序法為主。因數(shù)據(jù)表結(jié)構(gòu)中保存的信息僅有父信息與子信息,要從任一節(jié)點(diǎn)出發(fā),只能跟蹤鏈接逐一從一個節(jié)點(diǎn)移到上一節(jié)點(diǎn)。從數(shù)據(jù)庫運(yùn)行來說,即每次節(jié)點(diǎn)的移動就是對數(shù)據(jù)庫的一次檢索,如果一個任務(wù)有N 個節(jié)點(diǎn),對該任務(wù)的一次遍歷訪問數(shù)據(jù)庫也不會少于N 次。

因此,我們還可以看到在基本數(shù)據(jù)表結(jié)構(gòu)的基礎(chǔ)上,為解決遍歷效率問題而衍生的另外幾種擴(kuò)充數(shù)據(jù)表結(jié)構(gòu),用于實(shí)現(xiàn)任務(wù)分發(fā)應(yīng)用的參考:

1.加路徑信息

例如在前面的tasks 表中增加路徑信息字段paths,定義為AA(-BB-CC……)的結(jié)構(gòu),如00-00-00 為根節(jié)點(diǎn)(或00),第一層的左節(jié)點(diǎn)為00-01-00(或00-01),右節(jié)點(diǎn)為00-02-00(或00-02),依次類推,也可不補(bǔ)零。在檢索時,通過SQL 語句SELECT * FROM tasks WHERE paths LIKE SUBSTR(@path,1,2) ORDER BY paths 在任一節(jié)點(diǎn)可以僅訪問數(shù)據(jù)庫一次即可檢索整棵樹。但其缺點(diǎn)也很明顯,即路徑字段寬度受到層數(shù)和子節(jié)點(diǎn)個數(shù)的限制,僅適用固定層數(shù)的樹遍歷。

2.加層數(shù)信息

通過增加層數(shù)和根節(jié)點(diǎn)信息,有利于提高中序檢索的效率。如在前面的tasks 表中增加層數(shù)信息字段layer 和根節(jié)點(diǎn)信息字段root,通過SQL 語句SELECT * FROM tasks WHERE root=@root AND layer=@layer AND father_id=@father_id 在任一節(jié)點(diǎn)訪問數(shù)據(jù)庫可以得到中序遍歷的結(jié)果。其缺點(diǎn)是數(shù)據(jù)冗余嚴(yán)重。

3.設(shè)置左右代碼信息。

在tasks 表中增加表示左右信息的字段left 和right,left 數(shù)據(jù)以根節(jié)點(diǎn)為1 開始,從根節(jié)點(diǎn)沿子節(jié)點(diǎn)路徑向下,每個節(jié)點(diǎn)加1,到樹葉后,再沿子節(jié)點(diǎn)向上,right 數(shù)據(jù)在每個節(jié)點(diǎn)加1,通過SQL 語句SELECT * FROM tasks WHERE left>@left AND right<@right 可以得到中序遍歷的檢索結(jié)果。從算法上是一種新穎的設(shè)計(jì),但目前僅適用二叉樹,且不適應(yīng)節(jié)點(diǎn)的刪改變更。

綜上幾種數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì),從算法來看可以獲得不同的遍歷效率,但從實(shí)際運(yùn)用來看,則是耦合度越高,容錯度就越低。

五、Oracle 實(shí)現(xiàn)舉例

Oracle 數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫,不能像層次型數(shù)據(jù)庫那樣存放層次關(guān)系。但Oracle 數(shù)據(jù)庫提供了強(qiáng)有力的層次查詢(Hierarical Retrival)功能,可以高效地獲得層次關(guān)系信息。以O(shè)racle10g 為例,可以實(shí)現(xiàn)用先序、中序、后序各種方法遍歷樹,其實(shí)現(xiàn)方法為:通過查詢子句START WITH 確定起始節(jié)點(diǎn)位置;通過查詢子句CONNECT BY 確定遍歷方向,先序或后序。

SQL 語句語法為:

Oracle 提供了一個用于層次檢索的虛擬列l(wèi)evel,與CONNECT BY 子句共用,通過level 列可以獲得樹的層數(shù)值。

檢索的遍歷方向根據(jù)CONNECT BY 后的PRIOR 在哪個節(jié)點(diǎn)前確定。如在子節(jié)點(diǎn)前,則為先序;如在父節(jié)點(diǎn)前,則為后序。如子句為CONNECT BY PRIOR son_id=father_id 或CONNECT BY father_id=PRIOR son_id 時,則其方向?yàn)橄刃虮闅v,按START WITH 子句指點(diǎn)的節(jié)點(diǎn)按路徑逐一向下遍歷;如子句為CONNECT BY son_id= PRIOR father_id 或CONNECT BY PRIOR father_id=son_id 時,則其方向?yàn)橄刃虮闅v,按START WITH 子句指點(diǎn)的節(jié)點(diǎn)按路徑逐一向上遍歷,但遍歷的范圍僅限于同一父節(jié)點(diǎn)為止。

例如在表tasks 中,從father_id 為空處(表示根節(jié)點(diǎn))開始進(jìn)行先序檢索:

檢索結(jié)果如表5:

表5 檢索結(jié)果

使用DELETE 語句結(jié)合START WITH 和CONNECT BY 子句,實(shí)現(xiàn)對指定節(jié)點(diǎn)的子節(jié)點(diǎn)刪除。

Oracle10g 在層次查詢上的一個新增功能是引入了CONNECT_BY_ISLEAF 函數(shù),通過函數(shù)值判斷指定節(jié)點(diǎn)是否為樹的葉子。函數(shù)值為0 時,非葉子;函數(shù)值為1 時,為葉子。

如按先序檢索tasks 表中father_id=1 開始的子節(jié)點(diǎn)信息,并顯示其是否為葉子:

Oracle10g 對層次查詢中可能發(fā)生的遞歸死循環(huán),即互為父子節(jié)點(diǎn)的情況,使用NOCYCLE 關(guān)鍵字進(jìn)行干預(yù),而且可以通過CONNECT_BY_ISCYCLE 關(guān)鍵字的值查詢在哪個節(jié)點(diǎn)發(fā)生了死循環(huán)。

六、結(jié)語

本文分析基于非線性關(guān)系的稅務(wù)機(jī)關(guān)自發(fā)任務(wù)分發(fā)應(yīng)用的算法,并在實(shí)際稅務(wù)應(yīng)用的基礎(chǔ)上,給出了基本的數(shù)據(jù)表設(shè)計(jì),通過Orcale 實(shí)例,說明了應(yīng)用的實(shí)現(xiàn)效果。文章表明了非線性關(guān)系的稅務(wù)機(jī)關(guān)自發(fā)任務(wù)分發(fā)系統(tǒng)的實(shí)現(xiàn)可能性、可靠性與可維護(hù)性,為最終實(shí)現(xiàn)該應(yīng)用提供了堅(jiān)實(shí)的基礎(chǔ)。

[1][美]塞奇威克.算法Ⅰ-Ⅳ 基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)、排序和搜索[M].張銘澤等譯.北京:中國電力出版社,2004.

[2][美]科曼.算法導(dǎo)論[M].潘金貴等譯.北京:機(jī)械工業(yè)出版社,2006.

[3]Iggy Fernandez.Beginning Oracle Database 11g Administration[M].USA CA:APRESS,2009.

猜你喜歡
子句層數(shù)數(shù)據(jù)表
命題邏輯中一類擴(kuò)展子句消去方法
填筑層數(shù)對土石壩應(yīng)力變形的影響研究
上海發(fā)布藥品包裝物減量指南
康復(fù)(2022年31期)2022-03-23 20:39:56
命題邏輯可滿足性問題求解器的新型預(yù)處理子句消去方法
湖北省新冠肺炎疫情數(shù)據(jù)表
黨員生活(2020年2期)2020-04-17 09:56:30
MoS2薄膜電子性質(zhì)隨層數(shù)變化的理論研究
電子制作(2019年11期)2019-07-04 00:34:50
基于列控工程數(shù)據(jù)表建立線路拓?fù)潢P(guān)系的研究
西夏語的副詞子句
西夏學(xué)(2018年2期)2018-05-15 11:24:42
命題邏輯的子句集中文字的分類
住在哪一層
抚宁县| 兴海县| 临邑县| 叙永县| 绥江县| 田林县| 通化市| 平湖市| 会理县| 德化县| 萨迦县| 新绛县| 五常市| 广汉市| 揭东县| 万盛区| 家居| 英吉沙县| 睢宁县| 九江市| 长宁区| 德化县| 海兴县| 土默特右旗| 湘潭市| 岳阳市| 大洼县| 会宁县| 武安市| 郸城县| 社旗县| 乐亭县| 原阳县| 越西县| 张北县| 鹤壁市| 嵩明县| 台安县| 南乐县| 太湖县| 霍林郭勒市|