[发明专利]一种基于邻接表结点状态和优先级的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.vipzhuanli.com/pat/books/201911406960.7/1.html,转载请声明来源钻瓜专利网。