一种数据库表结构分析方法和系统与流程

文档序号:14571946发布日期:2018-06-01 22:47阅读:153来源:国知局
本发明涉及数据库分析的
技术领域
:,特别是一种数据库表结构分析方法和系统。
背景技术
::对于一套系统,往往都搭配一个或多个数据库。在某些情况下(二次开发等),我们需要知道数据库的表间关系。但在生产环境中,数据库的表间不可使用主外键,因此我们无法通过主外键关系获取数据库的表间关系。数据库中的数据往往是成千上万条,通过人工去判断是不可行的。面对一个未知的数据库,我们需要一个可靠的,行之有效的数据结构关系分析方法,以此来获取数据库的表间关系。在数据库主外键不可用的情况下,我们仅能通过表中数据的关联关系来确定数据库的表间关系。数据的关联分析属于数据挖掘领域,又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。关联分析算法的存在为我们提供了表结构关系分析方法实现的基石,通过对未知数据库的数据间的关联关系进行分析,从而使我们得到数据库的表间关系。技术实现要素:为了解决上述的技术问题,本发明提出一种数据库表结构分析方法和系统,通过对未知数据库的数据关联分析,得到数据库的表间关系,从而使得使用者对于未知数据库的表结构有一个比较清楚的认识,有利于接下来对于数据库的使用和利用。本发明的第一目的是提供一种数据库表结构分析方法,包括从数据库导出html文件,包括以下步骤:步骤1:对所述html文件进行解析,并从文件中获取适当数量的随机样本数据;步骤2:依据所述样本数据使用数据关联分析算法,得到可能的关联关系;步骤3:分析所述关联关系的可能性并处理;步骤4:根据得到的所述关联关系,以图形展示数据库的表间关系。优选的是,采用python的HTMLParser模块对所述html文件进行解析。在上述任一方案中优选的是,所述步骤2包括以下子步骤:步骤21:确定并行线程数;步骤22:多线程并行任务分配;步骤23:根据所述样本,遍历所述Html文件,获得可能存在关联的表关系集。在上述任一方案中优选的是,采用dataNode以节点的方式存储可能存在的所述表关系。在上述任一方案中优选的是,通过递归或循环的方式实现所述表关系集的获取,其中采用anlysisAssociation、parseHtmlToDataSet、threadParallel、scan_files、AnsTable和dataNode中至少一种方法和类。在上述任一方案中优选的是,所述parseHtmlToDataSet为主方法,递归实现用于获取表关系集。在上述任一方案中优选的是,所述AnsTable是解析所述html文件的主体,同时是获取所述关系集的主要实现。在上述任一方案中优选的是,所述dataNode用于存储数据。在上述任一方案中优选的是,所述scan_files这用于读取所述html文件集。在上述任一方案中优选的是,所述anlysisAssociation用于解析所述dataNode集,得到表关系集。在上述任一方案中优选的是,所述threadParallel为并行任务分配方法,使用所述python的pp模块,根据计算机的核数将样本数据平均分割成数分。在上述任一方案中优选的是,基于优化Apriori算法和FPGrowth算法对所述表关系集进行关联分析,具体步骤如下:步骤31:使用createC1方法获取为大小为1的项的集合,包括所有的表;步骤32:使用propSet方法获取两两表之间的所有组合;步骤33:使用analysis统计在所述表关系集中所述两两表之间存在关系的个数,并计算概率,去除阈值范围以下的,得到表结构关系。在上述任一方案中优选的是,所述Apriori算法为使用频繁项集的先验性质来压缩搜索空间。在上述任一方案中优选的是,所述Apriori算法的优化方法如下:1)通过扫描所述表关系集,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合为L1;2)使用L1找出频繁2项集的集合L2;3)集合L2剪枝,由频繁项集产生关联规则,得到数据得到表结构关系。在上述任一方案中优选的是,所述步骤4为利用所述python现有模块networkx和pylab模块,以节点的方式对所述关联关系进行显示。本发明的第二目的是提供一种数据库表结构分析系统,包括用于从数据库中导出html文件的导出模块,包括以下模块:文件解析模块:用于对所述html文件进行解析,并从文件中获取适当数量的随机样本数据;数据分析模块:用于依据所述样本数据使用数据关联分析算法,得到可能的关联关系;数据处理模块:用于分析所述关联关系的可能性并处理;关系展示模块:用于根据得到的所述关联关系,以图形展示数据库的表间关系。优选的是,采用python的HTMLParser模块对所述html文件进行解析。在上述任一方案中优选的是,所述数据分析模块包括以下子模块:线程确定子模块:用于确定并行线程数;任务分配子模块:用于多线程并行任务分配;遍历子模块:用于根据所述样本,遍历所述Html文件,获得可能存在关联的表关系集。在上述任一方案中优选的是,采用dataNode以节点的方式存储可能存在的所述表关系。在上述任一方案中优选的是,通过递归或循环的方式实现所述表关系集的获取,其中采用anlysisAssociation、parseHtmlToDataSet、threadParallel、scan_files、AnsTable和dataNode中至少一种方法和类。在上述任一方案中优选的是,所述parseHtmlToDataSet为主方法,递归实现用于获取表关系集。在上述任一方案中优选的是,所述AnsTable是解析所述html文件的主体,同时是获取所述关系集的主要实现。在上述任一方案中优选的是,所述dataNode用于存储数据。在上述任一方案中优选的是,所述scan_files这用于读取所述html文件集。在上述任一方案中优选的是,所述anlysisAssociation用于解析所述dataNode集,得到表关系集。在上述任一方案中优选的是,所述threadParallel为并行任务分配方法,使用所述python的pp模块,根据计算机的核数将样本数据平均分割成数分。在上述任一方案中优选的是,基于优化Apriori算法和FPGrowth算法对所述表关系集进行关联分析。具体步骤如下:步骤31:使用createC1方法获取为大小为1的项的集合,包括所有的表步骤32:使用propSet方法获取两两表之间的所有组合;步骤33:使用analysis统计在所述表关系集中所述两两表之间存在关系的个数,并计算概率,去除阈值范围以下的,得到表结构关系。在上述任一方案中优选的是,所述Apriori算法为使用频繁项集的先验性质来压缩搜索空间。在上述任一方案中优选的是,所述Apriori算法的优化方法如下:1)通过扫描所述表关系集,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合为L1;2)使用L1找出频繁2项集的集合L2;3)集合L2剪枝,由频繁项集产生关联规则,得到数据得到表结构关系。在上述任一方案中优选的是,所述关系展示模块用于利用所述python现有模块networkx和pylab模块,以节点的方式对所述关联关系进行显示。本发明提出数据库表结构分析方法和系统,在脱离数据库主外键依赖的情况下,仅通过对未知数据库进行数据挖掘,从而得到数据库的表间关系。其核心本质是数据的关联性质进行挖掘,通过关联分析算法得到表间的关联,可以迅速、准确的分析未知数据库的表间关系,并进行形象的展示,节省了大量的人力及时间成本。附图说明图1为按照本发明的数据库表结构分析方法的一优选实施例的流程图。图2为按照本发明的数据库表结构分析系统的一优选实施例的模块图。图3为按照本发明的数据库表结构分析系统的如图4所示实施例的项目结构图。图4为按照本发明的数据库表结构分析方法的表关系集获取的一实施例的流程图。图5为按照本发明的数据库表结构分析方法的Apriori算法的一实施例的流程图。图6为按照本发明的数据库表结构分析方法的如图4所示实施例的关联规则图。图7为按照本发明的数据库表结构分析系统的数据库表结构分析工具的一实施例的图形界面图。具体实施方式下面结合附图和具体的实施例对本发明做进一步的阐述。实施例一如图1、图2所示,执行步骤100中的子步骤101,导出模块200开始工作。顺序执行子步骤102和子步骤103,导出模块200选择目标数据库并从数据库中导出html文件。执行步骤110中的子步骤111,文件解析模块210确定样本的数量。执行子步骤112,遍历html文件随机抽取样本数据,获取某个html文件的某行某列的值。执行子步骤113,把上一子步骤得到的样本数据生成样本数据集,样本容量可选,样本数据不重复。执行步骤130中的子步骤121,数据分析模块220中的线程确定子模块221确定并行线程数。执行子步骤122,任务分配子模块222执行多线程并行任务分配。执行子步骤123,遍历子模块223根据所述样本,遍历所述html文件,获得可能存在关联的表关系集。执行子步骤124,数据处理模块230对表关系集进行关联分析。执行子模块125,数据处理模块230获取表结构的关联关系。执行步骤130,关系展示模块240显示表结构关系。实施例二一、需求规定软件工具能够对未知数据库的表结构进行分析,可以得到数据库的表间关系,哪些表具有关联关系,并进行显示。二、基本思路分析和设计概念数据库表结构分析工具使用python为主要变成语言,使用面向对象的方法进行分析和设计,采取了并行运算,加大幅提高运行效率。该工具以如下要点进行思路分析:1、由于在生产环境中,数据库的表间不可使用主外键的约束,我们不可能通过数据库的系统表获得表间关系。因此,只能根据表中的数据判断其中关系;2、基于第1点分析,由于主外键的数值相同,具有相同数据的表之间可能存在主子表关系。因此需要一组存在于该数据库中的样本数据;3、基于第1,2点分析,根据表中数据分析,就需要遍历整个数据库的数据,以找出数据所存在的表。当数据库的表比较多时,就需要不断的连接数据库,以遍历整个数据库,不仅速度慢,效率低,数据库容易宕机。因此,可以将数据库以html格式导出,并做文本处理;4、基于第3点分析,我们选择python语言对html进行处理;5、当根据样本数据,遍历html数据表后得到了一组可能存在关系的数据,因此需要分析这组数据之间有关联的可能性。机器学习中的Apriori算法和FP-growth算法原理为我们分析数据间关联性铺平了道路;6、数据库的数据量较大,我们需要考虑多线程,服务器集群以提高效率。基于上述思路分析,该工具以如下设计方案实现:A.由于生产环境中的数据库不可轻动,因此,使用数据库的导出命令(如Oracle数据库导出使用sqlplus)将数据库以HTML的格式导出存储;B.采用python的HTMLParser模块对先前存储的HTML文件进行解析,随机获取样本数据,这些样本数据将是我们分析数据关联关系的基础;C.根据样本数据适用数据关联分析算法,得到可能的关联关系;D.根据得到的关联关系,以图形展示数据库的表间关系。考虑到步骤B需要进行文本处理,因此选择Python作为主要实现的编程语言。通常数据库中的数据量都比较大,要快速的得到数据库的表间关系,我们采取了并行运算,使用Python提供的PP模块。步骤C的数据关联分析是基于Apriori算法和FPGrowth算法。在分析数据库的表间关系时,主要关数据表两两之间是否存在关联关系,并不考虑三个表及其以上的关联关系。因此需要我们对Apriori算法和FPGrowth算法进行适当的修改。三、项目结构如图3所示,在项目结构图中,由于该工具功能较为单一,对其源文件进行简要的说明,如下:1、dataNode.py:数据节点,用于存储可能观念连的数据;2、tableAnalysis.py:主体功能,html文件解析,样本数据生成,关联分析,显示;3、tableAnalysisFrame.py:图形界面。4、database.config:数据库配置5、database:默认数据库导出文件存储目录。四、硬件平台目前市场上出售的一般个人或商务电脑均可使用,机器配置要求如下:1)CPU:P4双核同类档次或更高档次以上。2)内存:4G以上内存。3)硬盘空间:320G以上均可。4)显示器:无要求。五、软件平台系统运行的软件环境如下:1)操作系统:LinuxRedHat72)基础环境:python2.7在我们的开发过程中,我们必然要会用到一些第三方组织或者厂商提供的开发工具包,在这里我们列出了这些工具的一些信息:1)MySQLdb2)Json3)Networkx4)Pp5)HTMLParser6)pylab实施例三使用parseHtmlToDataSet方法实现表关系集的获取。与样本数据生成类似,我们实现了继承HTMLParser的AnsTable解析类,用于解析每一个html文件,该AnsTable解析类主要目的是根据样本数据获取表关系集。我们使用dataNode以节点的方式存储可能存在的表关系。表关系的确定根据样本数据确定的。我们通过递归,循环等方式实现表关系集的获取,其中涉及anlysisAssociation,parseHtmlToDataSet,threadParallel,scan_files,AnsTable,dataNode等方法和类,其中:1、parseHtmlToDataSet为主方法,递归实现用于获取表关系集;2、AnsTable是解析html的主体,同时是获取关系集的主要实现;3、dataNode用于存储数据;4、scan_files这用于读取html文件集;5、anlysisAssociation解析dataNode集,得到表关系集;threadParallel为并行任务分配方法,使用python的pp模块,根据计算机的核数将样本数据平均分割成数分,并行运算以提高速度。如图4所示,执行步骤401,开始启动。执行步骤402,输入样本数据和html文件集。执行步骤402,遍历html文件集。顺序执行步骤403和步骤404,读取一个html文件,并使用AnsTable解析该html文件。顺序执行步骤405和步骤406,遍历所有table数据,并获取一个data。执行步骤407,判断data是否在样本数据中。如果data不在样本数据中,则顺序执行步骤420和步骤406进行下一个data,并获取data。如果data在样本数据中,则执行步骤408,以dataNode存储4个值:d1(表名)、d2(表格中data所存在的整行数据)、d3表格的字段和d4(data)。执行步骤409,判断是否遍历完成。如果遍历未完成,则顺序执行步骤420和步骤406进行下一个data,并获取data。如果遍历完成,则执行步骤410,遍历完成,得到dataNode数据集。执行步骤411,判断是否递归完成。如果递归未完成,则顺序执行步骤430和步骤402,以d2为样本数据,进行递归并遍历html文件集。如果递归完成,则执行步骤412,递归后得到dataNode数据集。执行步骤413,判断html文件是否处理完。如果html文件未处理完,则顺序执行步骤440和步骤402,跳转到下一个html文件,并遍历html文件集。如果html文件已处理完,则顺序执行步骤414和步骤415,使用anlysisAssociation处理dataNode数据并得到关系集。实施例四表关系集关联性分析关联分析是基于Apriori算法和FPGrowth算法。在分析数据库的表间关系时,主要关数据表两两之间是否存在关联关系,并不考虑三个表及其以上的关联关系。因此需要对Apriori算法和FPGrowth算法进行适当的修改。具体实现步骤如下:1、createC1方法获取为大小为1的项的集合,即所有的表;2、propSet方法获取两两表之间的所有组合;3、analysis为主要方法,统计表关系集中,两两表之间存在关系的个数,并计算概率,去除阈值范围以下的,从而得到表结构关系。Apriori算法使用一种称为逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。该集合记为L1。然后,使用L1找出频繁2项集的集合L2,使用L2找出L3,如此下去,直到不能再找到频繁k项集。每找出一个Lk需要一次数据库的完整扫描。Apriori算法使用频繁项集的先验性质来压缩搜索空间。如图4所示,可以通过Apriori算法由L2产生候选C3。Apriori算法是一种先产生候选项集再检验是否频繁的“产生-测试”的方法。这种方法有种弊端:当数据集很大的时候,需要不断扫描数据集造成运行效率很低。2000年,韩家炜等人提出FP-Growth算法就很好地解决了这个问题。它的思路是把数据集中的事务映射到一棵FP-Tree上面,再根据这棵树找出频繁项集。FP-Tree的构建过程只需要扫描两次数据集。相比Apriori算法,FPGrowth算法通常能把性能提高两个数量级以上。本发明聚焦于两两表之间的关系,根据上述Apriori算法,因此候选项集的每一项只要有两个元素即可,如图4中L2。数据库的数据也许会有成千上万条,但表的数目则相对少很多。因此,对于我们来说,Apriori算法和FPGrowth算法相差不大。我们选择Apriori算法,具体修改如下:1)通过扫描表关系集,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合为L1。2)使用L1找出频繁2项集的集合L2。3)集合L2剪枝,由频繁项集产生关联规则,得到数据得到表结构关系,关联规则如图5所示。实施例五利用python现有模块networkx和pylab模块,以节点的方式对关联关系进行显示。通过方法showAssociation进行实现。图形界面的实现主要存在于tableAnalysisFrame.py文件中。如图7所示,图形界面中主要包括数据库配置,字符集,数据库类型,样本容量,并行数量,文件数量等几个必要的输入量,可以实现文件到处,样本生成,分析及显示四个功能,如下进行具体说明:1、数据库配置:主要通过database.config配置进行,用户在见面上悬着对应的部分即可。database.config需要事先配置。2、字符集:设定字符集的主要原因是不同数据库不同工具导出的html文件的字符编码是不同的,不匹配的字符集会造成python解析错误,因此设定了字符集。现在支持“utf8”和“gbk”两种类型3、数据库类型:常用的数据库有orale和mysql,两种数据的连接方式不太相同,导出的html的格式也不太一样。4、样本容量:样本容量越大,得到的表结构关系越准确全面,但是程序的执行效率越低,花的时间越长。因此样本数量的多少需要使用者根据数据库情况权衡。5、并行数量:不同计算机cpu核数不同支持的并行数目不同。为了更好地理解本发明,以上结合本发明的具体实施例做了详细描述,但并非是对本发明的限制。凡是依据本发明的技术实质对以上实施例所做的任何简单修改,均仍属于本发明技术方案的范围。本说明书中每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1