[發明專利]一種基于鄰接表結點狀態和優先級的ER圖繪制方法及裝置有效
| 申請號: | 201911406960.7 | 申請日: | 2019-12-31 |
| 公開(公告)號: | CN111190971B | 公開(公告)日: | 2023-08-01 |
| 發明(設計)人: | 王功明;王建華 | 申請(專利權)人: | 浪潮軟件股份有限公司 |
| 主分類號: | G06F16/28 | 分類號: | G06F16/28 |
| 代理公司: | 濟南信達專利事務所有限公司 37100 | 代理人: | 闞恭勇 |
| 地址: | 271000 山東省*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 鄰接 結點 狀態 優先級 er 繪制 方法 裝置 | ||
1.一種基于鄰接表結點狀態和優先級的ER圖繪制方法,其特征在于,
包括以下步驟:
S1:讀取數據庫表結構;
S2:生成基于鄰接表的實體關系模型,包括:
實體表示數據庫中存在的數據表,關系是任何兩張數據表之間的關系類型;
關系類型包括4種:1:1、1:N、M:1、M:N,其對應的類型值分別為1、2、3、4;
每個實體對應一個結點,所有結點構成的數組稱為鄰接表的結點表;
每個結點對應一個邊集,存儲和該結點存在關系的其它結點的存儲位置,以及彼此之間的關系;
所有結點邊集的集合,稱為鄰接表的邊表;
S3:結合結點度和視覺位置優先級繪制ER圖;包括:
S31:生成有序結點表和有序邊集;所述步驟S31具體包括:
S311:將結點表所有結點按照度進行降序排列,形成有序結點表;
S312:對每個結點對應邊集中所有元素按照對應結點的度進行降序排列,形成有序邊集;
S313:返回所生成的有序結點表和有序邊集;
S32:初始化結點狀態數組VertStatusArray,所有元素值均為1;
S33:繪制ER圖;所述步驟S33具體包括:
S331:選擇有序結點表中第一個結點VA;
S332:判斷是否滿足VertStatusArray[VA]!=3,如果滿足,那么轉S333,否則轉S339;
S333:繪制VA及其邊集的結點和連接關系;所述步驟S333具體包括:
S3331:判斷是否滿足VertStatusArray[VA]!=2,如果滿足,那么轉S3332,否則轉S3333;
S3332:在屏幕空余位置上方的中央繪制VA;
S3333:繪制VA邊集的結點;所述步驟S3333具體包括:
S33331:計算結點VA正下方和水平兩側已經繪制結點數DA,VA邊集中狀態值為1的結點個數RA;
S33332:判斷是否滿足DA==0,如果滿足,那么轉S33333,否則轉S33334;
S33333:在結點VA正下方和水平兩側完全繪制VA邊集中狀態值為1的結點,轉33337;所述步驟S33333具體包括:
S333331:判斷是否滿足RA==1,如果滿足,那么轉S333332,否則轉S333333;
S333332:將VA邊集中RA個狀態值為1的結點繪制在VA正下方,轉S333339;
S333333:判斷是否滿足RA==2,如果滿足,那么轉S333334,否則轉S333335;
S333334:將VA邊集中RA個狀態值為1的結點繪制在VA水平兩側,轉S333339;
S333335:判斷是否滿足RA==3,如果滿足,那么轉S333336,否則轉S333337;
S333336:將VA邊集中RA個狀態值為1的結點繪制在VA正下方和水平兩側,轉S333339;
S333337:判斷是否滿足RA3,如果滿足,那么轉S333338,否則轉S333339;
S333338:將VA邊集的前3個結點繪制在VA正下方和水平兩側,其余RA-3個結點均勻繪制在VA正下方和水平兩側構成的直角區域內;
S333339:返回完全繪制的結點;
S33334:判斷是否滿足0DA3,如果滿足,那么轉S33335,否則轉S33336;
S33335:在結點VA正下方和水平兩側部分繪制VA邊集中狀態值為1的結點,轉S33337;所述步驟S33335具體包括:
S333351:判斷是否滿足0RA=3-DA,如果滿足,那么轉S333352,否則轉S333353;
S333352:將VA邊集中RA個狀態值為1的結點繪制在VA正下方和水平兩側的空余位置,轉S333356;
S333353:判斷是否滿足RA3-DA,如果滿足,那么轉S333354,否則轉S333356;
S333354:把VA邊集中前3-DA個狀態值為1的結點繪制在VA正下方和水平兩側空余位置;
S333355:把VA邊集中其余RA-3+DA個狀態值為1的結點均勻繪制在VA正下方和水平兩側構成的直角區域內;
S333356:返回部分繪制的結點;
S33336:在結點VA周圍的直角區域內均勻繪制VA邊集中狀態值為1的結點;所述步驟S33336具體包括:
S333361:判斷是否滿足RA0,如果滿足,那么轉S333362,否則轉S333363;
S333362:將VA邊集中RA個狀態值為1的結點均勻繪制在VA正下方和水平兩側構成的直角區域內;
S333363:返回均勻繪制的結點;
S33337:返回繪制的VA邊集結點;
S3334:繪制VA和其邊集結點的連接關系;所述步驟S3334具體包括:
S33341:獲取VA在ER圖中的位置Loc_VA;
S33342:讀取VA對應的邊集EdgeSetRTA;
S33343:讀取EdgeSetRTA的第一個元素PTRT_VB;
S33344:從PTRT_VB中獲取對應結點指針PT_VB和關系類型RT_VB;
S33345:根據PT_VB獲取對應結點VB;
S33346:獲取VB在ER圖中的位置Loc_VB;
S33347:繪制從Loc_VA到Loc_VB的線段Line_AB;
S33348:根據RT_VB在Line_AB兩端標記關系類型;
S33349:返回繪制的連接關系;
S3335:將VA邊集中狀態值為1結點的狀態值修改為2;
S3336:修改結點VA狀態VertStatusArray[VA]=3;
S3337:返回繪制的VA邊集結點和連接關系;
S334:選擇VA邊集中第一個結點VB;
S335:判斷是否滿足VertStatusArray[VB]!=3,如果滿足,那么轉S336,否則轉S337;
S336:繪制VB及其邊集的結點和連接關系;所述步驟S336具體包括:
S3361:判斷是否滿足VertStatusArray[VB]!=2,如果滿足,那么轉S3362,否則轉S3363;
S3362:在屏幕空余位置上方的中央繪制VB;
S3363:繪制VB邊集的結點;所述步驟S3363具體包括:
S33631:計算結點VB正下方和水平兩側已經繪制結點數DB,VB邊集中狀態值為1的結點個數RB;
S33632:判斷是否滿足DB==0,如果滿足,那么轉S33633,否則轉S33634;
S33633:在結點VB正下方和水平兩側完全繪制VB邊集中狀態值為1的結點,轉S33637;所述步驟S33633具體包括:
S336331:判斷是否滿足RB==1,如果滿足,那么轉S336332,否則轉S336333;
S336332:將VB邊集中RB個狀態值為1的結點繪制在VB正下方,轉S336339;
S336333:判斷是否滿足RB==2,如果滿足,那么轉S336334,否則轉S336335;
S336334:將VB邊集中RB個狀態值為1的結點繪制在VB水平兩側,轉S336339;
S336335:判斷是否滿足RB==3,如果滿足,那么轉S336336,否則轉S336337;
S336336:將VB邊集中RB個狀態值為1的結點繪制在VB正下方和水平兩側,轉S336339;
S336337:判斷是否滿足RB3,如果滿足,那么轉S336338,否則轉S336339;
S336338:將VB邊集的前3個結點繪制在VB正下方和水平兩側,其余RB-3個結點均勻繪制在VB正下方和水平兩側構成的直角區域內;
S336339:返回完全繪制的結點;
S33634:判斷是否滿足0DB3,如果滿足,那么轉S33635,否則轉S33636;
S33635:在結點VB正下方和水平兩側部分繪制VB邊集中狀態值為1的結點,轉S33637;所述步驟S33635具體包括:
S336351:判斷是否滿足0RB=3-DB,如果滿足,那么轉S336352,否則轉S336353;
S336352:將VB邊集中RB個狀態值為1的結點繪制在VB正下方和水平兩側的空余位置,轉S336356;
S336353:判斷是否滿足RB3-DB,如果滿足,那么轉S336354,否則轉S336356;
S336354:把VB邊集中前3-DB個狀態值為1的結點繪制在VB正下方和水平兩側空余位置;
S336355:把VB邊集中其余RB-3+DB個狀態值為1的結點均勻繪制在VB正下方和水平兩側構成的直角區域內;
S336356:返回部分繪制的結點;
S33636:在結點VB周圍的直角區域內均勻繪制VB邊集中狀態值為1的結點;所述步驟S33636具體包括:
S336361:判斷是否滿足RB0,如果滿足,那么轉S336362,否則轉S336363;
S336362:將VB邊集中RB個狀態值為1的結點均勻繪制在VB正下方和水平兩側構成的直角區域內;
S336363:返回均勻繪制的結點;
S33637:返回繪制的VB邊集結點;
S3364:繪制VB和其邊集結點的連接關系;所述步驟S3364具體包括:
S33641:獲取VB在ER圖中的位置Loc_VB;
S33642:讀取VB對應的邊集EdgeSetRTB;
S33643:讀取EdgeSetRTB的第一個元素PTRT_VC;
S33644:從PTRT_VC中獲取對應結點指針PT_VC和關系類型RT_VC;
S33645:根據PT_VC獲取對應結點VC;
S33646:獲取VC在ER圖中的位置Loc_VC;
S33647:繪制從Loc_VB到Loc_VC的線段Line_BC;
S33648:根據RT_VC在Line_BC兩端標記關系類型;
S33649:返回繪制的連接關系;
S3365:將VB邊集中狀態值為1結點的狀態值修改為2;
S3366:修改結點VB狀態VertStatusArray[VB]=3;
S3367:返回繪制的VB邊集結點和連接關系;
S337:判斷VA邊集的結點是否讀取完畢,如果沒有,轉S338,否則轉S339;
S338:讀取VA邊集的下一個結點VB,轉S335;
S339:判斷有序結點表是否讀取完畢,如果沒有,轉S33A,否則轉S33B;
S33A:讀取有序結點表的下一個結點VA,轉S32;
S33B:返回繪制的ER圖。
2.一種基于鄰接表結點狀態和優先級的ER圖繪制裝置,用于執行權利要求1所述的基于鄰接表結點狀態和優先級的ER圖繪制方法,其特征在于,包括:
表結構讀取部件M1,用于讀取數據庫的表結構;
實體關系模型生成部件M2,用于將數據庫中存在的實體及關系類型存儲在鄰接表中;
ER圖繪制部件M3,用于繪制采用鄰接表存儲的實體關系模型;
所述ER圖繪制部件M3,具體包括:
鄰接表排序部件M31,用于生成有序結點表和有序邊集;
鄰接表繪制部件M32,用于繪制鄰接表的結點及其連接關系;
所述鄰接表繪制部件M32,具體包括:
第1類結點及關系繪制部件M321,用于繪制結點表的結點及其邊集的結點,以及二者之間的連接關系;
第2類結點及關系繪制部件M322,用于繪制邊集的結點及其在結點表對應邊集的結點,以及二者之間的連接關系。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浪潮軟件股份有限公司,未經浪潮軟件股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911406960.7/1.html,轉載請聲明來源鉆瓜專利網。





