excel多级表头存入mysql_一种多个多层表头的表格在数据库中的存储及其访问方法与流程...

本发明提出了一种存储和访问多个多层表头表格的方法,涉及数据库技术。通过建立三个数据库表,分别存储纸质表格数据、表格信息和表头信息,实现了多层表头表格在数据库中的有效存储。访问时,根据表ID获取表头信息,构造SQL语句进行数据访问。此方法提高了数据存储和访问的效率。
摘要由CSDN通过智能技术生成

af592926c07d79d37d3e2a61900b5110.gif

技术领域:

本发明涉及一种多个多层表头的表格在数据库中的存储方法。

背景技术:

:在各个领域,长期以来都会产生和积累大量手绘的、印刷的或EXCEL格式保存的表格数据,将这些表格数据录入到数据库系统中存储,并提供增删改查的访问接口是经常会遇到的一种项目需求。对简单的表格来说,这种需求很容易满足,但对复杂的多层表头的表格,如何建立相应的数据库表,支持高效的数据录入和访问操作是一个值得思考的问题,特别是当同一个项目中存在许多张不同的多层表头表格时,数据库系统更需要合理设计来实现多层表头表格数据的存储和访问。技术实现要素:为了解决上述技术问题,本发明的目的是提供一种多个多层表头的表格在数据库中的存储和访问方法。为解决上述技术问题,本发明采用如下技术方案:一种多个多层表头的表格在数据库中的存储方法,包括如下步骤:S1、多个纸质表格数据库的建立S1.1、建立记录所有纸质表格的数据的数据库表C,其中数据库表C中的每条记录对应原始某个纸质表格中的一条记录;S1.2、建立记录所有的纸质表格的表格信息的数据库表A,其中所述表格信息包括表的名称、所在纸质手册的名称、起始、结束页码、录入者、审校者、录入时间和备注等信息;S1.3、建立记录所有的纸质表格的表头信息的数据库表B,其中所述表头信息包括每个表头的每个栏目的名称、栏目层级、数据类型、字段序号、备注和表ID等信息;S2、多层表头的建立S2.1、将数据库表B中CLEVEL=1的栏目记录为单层表头栏目或多层表头的第一层栏目,CLEVEL=2是第二层栏目,且其上一层是数据库表B中它之前最靠近它的一个CLEVEL=1的栏目,CLEVEL=3、4…时依此类推;其中:所述数据库表A、B、C均有各自的主键,所述主键包括表ID、栏目ID、记录ID,所述主键均设置为自动增长,其中所述数据库表B和数据库表C中都以表ID作为外键。进一步的,所述数据库表C采用ORACLE数据库。一种多个多层表头的表格在数据库中的访问方法,包括如下步骤:要访问一张纸质表格的数据时,从数据库表A中得到该纸质表的表ID,然后从表B中利用该表ID得到该表的所有表头栏目信息,表头栏目信息明确了表头中各栏目的层次关系和顺序以及最下一层每个栏目对应的数据在表C中的字段名,然后根据表B中各栏目的数值从表C中获得对应数据进行访问。进一步的,该多个多层表头的表格在数据库中的访问方法具体步骤如下:1)添加一个表:在表A中添加一条记录,并得到该条记录的表ID;遍历描述表头的XML或JSON数据结构,在表B中插入各个表头栏目,具体遍历过程如下:遍历同一层节点元素;如果当前节点元素有下一层节点,则在表B中添加一行记录,该记录的CTYPE和CORDER为空,CLEVEL是当前CLEVEL值,然后设置CLEVEL值加一,并跳转到上一步遍历下一层节点;如果当前节点元素没有下一层节点,则在表B中添加一行记录,该记录的CTYPE根据节点数据类型设定,并根据数据类型决定CORDER值等于CORDER1或CORDER2,然后设置CORDER1或CORDER2值加一,CLEVEL是当前CLEVEL值;同一层节点元素遍历结束返回上一层时CLEVEL值减一;把表格数据按照各栏目对应的CORDER值插入到表C中;2)删除一个表,指定表ID:根据TID删除表A中的一条记录;删除表B中的表ID等于所给表ID的记录;删除表C中的表ID等于所给表ID的记录;3)获取表头信息,指定表ID:查询表B中表ID等于指定表ID的所有记录,并按照栏目ID顺序排列;按照从后往前的顺序遍历这些记录,生成XML或JSON的数据结构;4)访问表中数据,指定表ID:根据指定表ID查询表B得到的该表各栏目的CORDER值;使用这些CORDER值生成访问表C的SQL语句;执行生成的SQL语句完成数据访问任。与现有技术相比,本发明的有益技术效果:通过分别建立多个纸质表格数据库和多层表头实现多个多层表头的表格在数据库中的存储,并根据建立各数据库的表ID等信息快速访问数据库,高效快捷的实现纸质表格的的添加、删除、获取及访问。附图说明下面结合附图说明对本发明作进一步说明。图1为三张数据库表及其关系图。具体实施方式一种多个多层表头的表格在数据库中的存储方法,包括如下步骤:S1、多个纸质表格数据库的建立S1.1、建立记录所有纸质表格的数据的数据库表C,其中数据库表C中的每条记录对应原始某个纸质表格中的一条记录;S1.2、建立记录所有的纸质表格的表格信息的数据库表A,其中所述表格信息包括表的名称、所在纸质手册的名称、起始、结束页码、录入者、审校者、录入时间和备注;S1.3、建立记录所有的纸质表格的表头信息的数据库表B,其中所述表头信息包括每个表头的每个栏目的名称、栏目层级、数据类型、字段序号、备注和表ID;S2、多层表头的建立S2.1、将数据库表B中CLEVEL=1的栏目记录为单层表头栏目或多层表头的第一层栏目,CLEVEL=2是第二层栏目,且其上一层是数据库表B中它之前最靠近它的一个CLEVEL=1的栏目,CLEVEL=3、4…时依此类推;其中:所述数据库表A、B、C均有各自的主键,所述主键包括表ID、栏目ID、记录ID,所述主键均设置为自动增长,其中所述数据库表B和数据库表C中都以表ID作为外键。实施例1如果对每一个纸质表格都建立一个对应的数据库表,数据库中将产生大量数据量不多的表格,且这些表格的格式都不统一,使得存储和访问接口难以实现,数据使用效率不高(表很多,每个表里的数据不多,不利于数据库自身的优化)。这些纸质表格虽然格式各不相同,但其数据要么是数值类型要么是字符串类型,因此我们把所有表格的数据放在同一个数据库表C中存储,表C中的每条记录对应原始某个纸质表格中的一条记录,假设所有原始纸质表格一条记录(一行)里最多有10个数值类型的数据和5个字符串类型的数据,我们采用ORACLE数据库,则表C如下:表C用数据库表A记录所有的纸质表格信息,包括表的名称、所在纸质手册的名称、起始和结束页码、录入人、审校者等信息,用数据库表B记录所有的表头信息,包括每个表头的每个栏目的名称、层级、数据类型、数据表字段序号等信息。表A和表B如下:表A表B三张数据库表及其关系如图1所示,三张表都有各自的主键(表ID、栏目ID、记录ID),主键都设置为自动增长,表B和表C中都以表ID作为外键,这样,要访问一张纸质表格的数据时,可以从表A中得到该纸质表的表ID,然后从表B中利用该表ID得到该表的所有表头栏目信息,表头栏目信息明确了表头中各栏目的层次关系和顺序以及最下一层每个栏目对应的数据在表C中的字段序号。然后根据表B中各栏目的CORDER值从表C中获得对应数据进行访问。多层表头的建立:将数据库表B中CLEVEL=1表示该栏目是单层表头栏目或多层表头的第一层栏目,CLEVEL=2是第二层栏目,且其上一层是表B中它之前最靠近它的一个CLEVEL=1的栏目,CLEVEL=3,4…时依此类推。按照上述方法,下述的产品参数表1,在数据库中的记录如下:产品参数表1表ATIDNAMEBOOKSTARTPAGEENDPAGERECORDERAUDITORCDATE2产品参数表1AAA设计手册6061王某李某2018-8-1表BCIDCNAMECTYPECORDERCLEVELTID110子型号11112111半径12112内22113最大2132114最小2232115外22116最大2332117最小2432118长度2512119设计者11212注:CTYPE=1表示字符串,CTYPE=2表示数值,CORDER=1对应表C中的D1字段,CORDER=2对应D2字段,依此类推,CORDER=11对应表C中的C1字段,依此类推。表CMIDTIDD1D2D3D4D5D6D7D8D9D10C1C2C3C4C55022.32.13.53.410QW001张三5122.52.43.43.312QW002李四5222.62.53.63.513QW003王五用户界面上多层表头的实现已有很多控件支持,如ExtJS的grid,ASP.Net的GridView等,但这些控件只是将特定格式描述的多层表头显示出来,并不涉及多层表头在数据库中的存储和访问。如前所述,本文提出了多个多层表头的表格在数据库中的存储方法,下面给出用本文方法进行存储的表格的访问方法,相当于为UI控件提供数据库访问的接口。用本文存储方法进行存储的表格的具体访问方法如下:1)添加一个表:在表A中添加一条记录,并得到该条记录的TID值;遍历描述表头的XML或JSON数据结构,在表B中插入各个表头栏目,具体遍历过程如下:CORDER1=1,CORDER2=11,CLEVEL=1;遍历同一层节点元素;如果当前节点元素有下一层节点,则在表B中添加一行记录,该记录的CTYPE和CORDER为空,CLEVEL是当前CLEVEL值,然后设置CLEVEL值加一,并跳转到上一步遍历下一层节点;如果当前节点元素没有下一层节点,则在表B中添加一行记录,该记录的CTYPE根据节点数据类型设定,并根据数据类型决定CORDER值等于CORDER1或CORDER2,然后设置CORDER1或CORDER2值加一,CLEVEL是当前CLEVEL值;同一层节点元素遍历结束返回上一层时CLEVEL值减一。把表格数据按照各栏目对应的CORDER值插入到表C中。2)删除一个表(指定TID):根据TID删除表A中的一条记录;删除表B中的TID等于所给TID的记录;删除表C中的TID等于所给TID的记录。3)获取表头信息(指定TID):查询表B中TID等于指定TID的所有记录,并按照CID顺序排列;按照从后往前的顺序遍历这些记录,生成XML或JSON的数据结构,具体遍历过程这里不再累述。4)访问表中数据(指定TID):根据指定TID查询表B得到的该表各栏目的CORDER值;使用这些CORDER值生成访问表C的SQL语句;执行生成的SQL语句完成数据访问任务。以上所述的实施例仅是对本发明的优选方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。当前第1页1&nbsp2&nbsp3&nbsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值