[发明专利]一种基于邻接表的数据库实体关系模型提取方法及装置有效
| 申请号: | 201910799710.8 | 申请日: | 2019-08-28 |
| 公开(公告)号: | CN110516010B | 公开(公告)日: | 2023-06-09 |
| 发明(设计)人: | 王功明;雷昌然;王建华 | 申请(专利权)人: | 浪潮软件集团有限公司 |
| 主分类号: | G06F16/28 | 分类号: | G06F16/28;G06F16/25 |
| 代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 阚恭勇 |
| 地址: | 250100 山东*** | 国省代码: | 山东;37 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 邻接 数据库 实体 关系 模型 提取 方法 装置 | ||
1.一种基于邻接表的数据库实体关系模型提取方法,其特征在于,
包括以下步骤:
S1:数据库表结构标准化;
S2:构造邻接表的顶点表;
S3:构造邻接表的边表;
S4:计算表结构之间的关系类型;
所述步骤S2具体包括:
S21:初始化顶点表为空;
S22:读取第一个标准化后的表结构TS;
S23:构建TS对应的顶点VA,并添加到顶点表中;
具体包括:
S231:新建顶点VA;
S232:将表结构TS的表名设置为顶点VA的表名;
S233:读取表结构TS的第一个属性TA;
S234:将TA的“属性名”添加到顶点VA的属性名数组中;
S235:如果TA的“主键”值为Y,那么转S236,否则转S237;
S236:将TA的“属性名”添加到顶点VA的主键中;
S237:如果TA的“外键”值为Y,那么转S238,否则转S239;
S238:将TA的“属性名”添加到顶点VA的外键中;
S239:判断属性是否读取完毕,如果没有,转S23A,否则转S23B;
S23A:读取下一个属性TA,转S234;
S23B:将顶点VA添加到顶点表中;
S24:判断表结构是否读取完毕,如果没有,转S25,否则转S26;
S25:读取下一个表结构TS,转S23;
S26:返回所生成的顶点表;
所述步骤S3具体包括:
S31:初始化边表为空;
S32:读取顶点表的第一个顶点VA;
S33:构造顶点VA对应的边集EdgeSet;
S331:统计顶点VA外键的属性个数Q;
S332:初始化边集EdgeSet为空,已处理外键集合ProcedKey为空,待测试主键的属性个数K=Q;
S333:初始化已测试外键次数t=0,已测试外键集合TestKeySet为空;
S334:判断t是否等于C(Q,K),如果等于,那么转S33D,否则转S335;
S335:从顶点VA外键中选择K个属性,构成待测试主键集合TestKey;
S336:如果TestKey不是TestKeySet的子集,那么转S337,否则转S335;
S337:更新已测试外键次数t=t+1;
S338:如果TestKey不是ProcedKey的子集,那么转S339,否则转S334;
S339:遍历顶点表,如果存在某顶点VB的主键是TestKey,那么转S33A,否则转S334;
S33A:生成指向VB的指针Pt_VB;
S33B:将Pt_VB添加到EdgeSet的指针链表末尾;
S33C:更新ProcedKey=ProcedKey∪TestKey,转S334;
S33D:更新待测试主键的属性个数K=K-1;
S33E:如果K大于0,那么转S333,否则转S33F;
S33F:返回所生成的边集EdgeSet;
S34:将EdgeSet添加到边表中;
S35:判断顶点表是否读取完毕,如果没有,转S36,否则转S37;
S36:读取下一个顶点VA,转S33;
S37:返回所生成的边表
所述步骤S4具体包括:
S41:读取顶点表的第一个顶点VA;
S42:读取顶点VA对应的边集EdgeSet;
S43:计算VA和EdgeSet对应表结构之间的关系类型,生成新的边集EdgeSetRT;
S431:初始化EdgeSetRT为空;
S432:读取VA对应的表结构TSA;
S433:读取EdgeSet中第一个元素PT_VB;
S434:读取PT_VB对应的表结构TSB;
S435:计算TSA和TSB之间的关系类型RT_VB;
S4351:读取TSA的主键PriKey_A和外键ForKey_A;
S4352:读取TSB的主键PriKey_B和外键ForKey_B;
S4353:计算TSA主键和TSB外键隶属关系PKA_in_FKB;
S43531:如果TSA主键是TSB外键的子集,那么转S43532,否则转S43533;
S43532:PKA_in_FKB=1,转S43534;
S43533:PKA_in_FKB=0;
S43534:返回PKA_in_FKB;
S4354:计算TSB主键和TSA外键隶属关系PKB_in_FKA;
S43541:如果TSB主键是TSA外键的子集,那么转S43542,否则转S43543;
S43542:PKB_in_FKA=1,转S43544;
S43543:PKB_in_FKA=0;
S43544:返回PKB_in_FKA;
S4355:根据PKA_in_FKB和PKB_in_FKA计算RT_VB;
S43551:初始化RT_VB=-1;
S43552:如果PKA_in_FKB==1且PKB_in_FKA==1,那么转S43553,否则转S43554;
S43553:RT_VB=1,转S4355A;
S43554:如果PKA_in_FKB==1且PKB_in_FKA==0,那么转S43555,否则转S43556
S43555:RT_VB=2,转S4355A;
S43556:如果PKA_in_FKB==0且PKB_in_FKA==1,那么转S43557,否则转S43558;
S43557:RT_VB=3,转S4355A;
S43558:如果PKA_in_FKB==0且PKB_in_FKA==0,那么转S43559,否则转S4355A;
S43559:RT_VB=4;
S4355A:返回关系类型RT_VB;
S4356:返回关系类型RT_VB;
S436:将{PT_VB、RT_VB}添加到EdgeSetRT的指针链表末尾;
S437:判断EdgeSet中元素是否读取完毕,如果没有,转S438,否则转S439;
S438:读取下一个元素PT_VB,转S434;
S439:返回所生成的边集EdgeSetRT;
S44:删除边表中的边集EdgeSet;
S45:将边集EdgeSetRT添加到边表中;
S46:判断顶点表是否读取完毕,如果没有,转S47,否则转S48;
S47:读取下一个顶点VA,转S42;
S48:返回更新后的边表。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮软件集团有限公司,未经浪潮软件集团有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910799710.8/1.html,转载请声明来源钻瓜专利网。





