System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据分析,具体是涉及一种识别关系型数据库表中主键和外键的方法。
技术介绍
1、传统主键推断的方法通常是这样的:取一个表,详细理解其中数据的业务含义和数据类型,统计各个字段中数据记录数,并且尝试去重,如果去重后的数据记录数和去重前是一样的,从业务角度出发,该字段中的每一条数据能够对应唯一的标识表中的一条业务信息记录,这个字段会被识别为主键。
2、传统外键的推断方法通常是这样的:先确定某个表(假设为a表)的唯一键(通常也是主键,假设为student_id),再由人工去阅读其他表的所有表的所有字段,通过命名规则或者业务知识来确定另一个表(假设为b表)中的某个字段的值可能引用了a表的student_id。比如命名可能也是(student_id),然后再提取b表中的student_id字段下所有值和a表中student_id字段下所有值进行比较,如果a表中student_id字段下所有值完全能包含b表中的student_id字段下所有值,且b表中student_id字段下值有重复的情况,那么说明b表中的student_id是一个外键。
3、可见,如果某个数据库在设计时没有进行主键,外键设计,或者因为某种原因无法直接获取主键和外键信息时,靠传统识别主、外键的方法,通常需要由具有相关业务知识背景的数据专家基于业务知识进行推断,效率非常低,在表、字段数量非常多的时候,工作量非常大。
技术实现思路
1、为解决上述技术问题,提供一种识别关系型数据库表中主键和外键的
2、为达到以上目的,本专利技术采用的技术方案为:
3、一种识别关系型数据库表中主键和外键的方法,包括:
4、s1、识别主键,所述识别主键具体包括:
5、s101、依次获取待识别数据库表结构和字段数据;
6、s102、统计待识别数据库表中的数据记录数,将数据记录数记为m;
7、s103、依次从待识别数据库表中取一个字段及该字段对应的所有值;
8、s104、对该字段值进行去重,并统计该字段去重所有值的个数n;
9、s105、判断n是否等于m,若是,则认定该字段是唯一键,若否,则认定该字段不是唯一键;
10、s106、依次遍历待识别数据库表中的所有字段,获取待识别数据库表中的所有唯一键,建立唯一键集合sk,,其中,为待识别数据库表中的第i个唯一键,k为待识别数据库表中的唯一键总数;
11、s107、判断k是否等于1,若是,则将作为主键,若否,则判断k是否等于0,若是,则对待识别数据库表进行组合字段唯一键识别,若否,则计算每个唯一键的信息熵,并取其中信息熵最小的那个唯一键作为主键;
12、s2、对所有待识别数据库表执行步骤s1;
13、s3、识别外键,所述识别外键具体包括:
14、s301、依次获取待识别数据库表结构和字段数据;
15、s302、依次从待识别数据库表中取一个字段fj及该字段对应的所有值;
16、s303、对字段fj进行去重,得到字段fj的去重后的值lj;
17、s304、依次遍历比对除字段fj对应的待识别数据库表之外的所有待识别数据库表的唯一键集合,判断字段fj的去重后的值lj是否被完全包含在的值中,若是,则判断字段fj为其对应的待识别数据库表的外键,字段fj的引用值来自于,若否,则采用相似性算法判断字段fj是否为外键。
18、优选的,所述对待识别数据库表进行组合字段唯一键识别具体包括:
19、在从待识别数据库表中任取两个字段值组合成为双字段,进行去重后计数,若去重后计数值比去重前计数值小,说明存在重复,这两个字段的组合不能作为唯一键组合,若去重后计数值与去重后计数值相同,则双字段组合作为待识别数据库表的唯一键组合;
20、遍历所有双字段组合,直到找到所有唯一键组合;
21、若不存在作为待识别数据库表的唯一键组合的双字段组合,则进行三字段或者更多字段组合识别,直到找到作为待识别数据库表的唯一键组合的字段组合。
22、优选的,所述唯一键的信息熵的计算方法为:
23、对唯一键的所有值进行字符串切分成独立的字符w;
24、统计字符的总数量t;
25、统计每一个字符的个数a;
26、对于字符wi,其出现的概率为,,其中,wi为第i个字符串,为第i个字符串的个数;
27、则该唯一键的信息熵为,式中,为字符总数。
28、优选的,所述相似性算法具体为:
29、计算similar(lj,),similar(lj,)=lj和中完全相同的字符串数量/lj中字符串的数量×100%;
30、若similar(lj,)小于99%,则判定字段fj不是外键;
31、若similar(lj,)大于99%,计算confidence(lj,),confidence(lj,)=(中不能在lj中找到的字符串数量-lj中不能在中找到的字符串数量)/(lj中不能在中找到的字符串数量+中不能在lj中找到的字符串数量+0.001)×100%;
32、判断confidence(lj,)是否等于0,若是,则判断字段fj是否为唯一键,若是,则判断字段fj为其对应的待识别数据库表的外键,字段fj的引用值来自于;
33、判断confidence(lj,)是否大于0,若是,则判断字段fj为其对应的待识别数据库表的外键,字段fj的引用值来自于;
34、判断confidence(lj,)是否小于0,若是,则判断字段为其对应的待识别数据库表的外键,字段的引用值来自于fj。
35、与现有技术相比,本专利技术的有益效果在于:
36、本专利技术提出一种识别关系型数据库表中主键和外键的方法,结合了数据库设计原理、信息熵的原理、相似性计算等方法进行主键、外键识别,大多数情况下可以代替人工进行工作,而无需额外的业务知识经验。在数据库表、字段数量越庞大时,越能体现出其优势出来,能大量提高工作效率,在无人值守模式下,可进行昼夜不间断工作。
本文档来自技高网...【技术保护点】
1.一种识别关系型数据库表中主键和外键的方法,其特征在于,包括:
2.根据权利要求1所述的一种识别关系型数据库表中主键和外键的方法,其特征在于,所述对待识别数据库表进行组合字段唯一键识别具体包括:
3.根据权利要求2所述的一种识别关系型数据库表中主键和外键的方法,其特征在于,所述唯一键的信息熵的计算方法为:
4.根据权利要求3所述的一种识别关系型数据库表中主键和外键的方法,其特征在于,所述相似性算法具体为:
【技术特征摘要】
1.一种识别关系型数据库表中主键和外键的方法,其特征在于,包括:
2.根据权利要求1所述的一种识别关系型数据库表中主键和外键的方法,其特征在于,所述对待识别数据库表进行组合字段唯一键识别具体包括:
3...
【专利技术属性】
技术研发人员:魏庆阳,门雪涛,付守成,周炎亮,周尊,
申请(专利权)人:深圳市威诺达工业技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。