一种数据库的数据处理方法、系统、存储介质及电子设备
文献发布时间:2023-06-19 19:30:30
技术领域
本申请涉及数据处理技术领域,更具体地说,涉及一种数据库的数据处理方法、系统、存储介质及电子设备。
背景技术
市面上主流的关系型数据库有数据库oracle,数据库mysql,数据sqlserver等,这些数据库由多张表组成,表由若干特定类型的字段组成。
开发人员在总体设计阶段过程中,在word或者Excel等办公软件中按照表结构模版进行表结构设计之后,将数据库设计文档手工转化为数据库中的表,从而导致建表所耗费的时间长,且容易出错。
因此,如何提高建表的效率和降低错误率,是本申请亟需解决的问题。
发明内容
有鉴于此,本申请公开了一种数据库的数据处理方法、系统、存储介质及电子设备,旨在通过映射规则将表结构设计文档中的所有表映射为SQL建表脚本,运行SQL建表脚本完成建表操作,缩短了建表的时间,提高了建表的效率和降低错误率。
为了实现上述目的,其公开的技术方案如下:
本申请第一方面公开了一种数据库的数据处理方法,所述方法包括:
获取表结构设计文档;
获取表结构设计文档模板并解析,得到映射规则;所述映射规则为根据关系数据库的SQL语法,将所述表结构设计文档中的表结构构建成SQL建表脚本的规则;
通过所述映射规则,将所述表结构设计文档中的所有表映射为SQL建表脚本;
运行所述SQL建表脚本完成建表操作。
优选的,所述获取表结构设计文档,包括:
通过预设编程语言,获取表结构设计文档。
优选的,所述获取表结构设计文档模板并解析,得到映射规则,包括:
获取表结构设计文档模板;
在所述预设编程语言中创建文档对象;
加载所述表结构设计文档,使所述文档对象对所述文档类型的表结构设计文档模板进行解析,得到映射规则。
优选的,所述通过所述映射规则,将所述表结构设计文档中的所有表映射为SQL建表脚本,包括:
定义SQL模板;
获取所述表结构设计文档中的所有表对应的预设关键字内容;
将所述表结构设计文档中的所有表对应的预设关键字内容替换所述SQL模板的预设模板内容后,得到SQL建表脚本。
本申请第二方面公开了一种数据库的数据处理系统,所述系统包括:
获取单元,用于获取表结构设计文档;
获取解析单元,用于获取表结构设计文档模板并解析,得到映射规则;所述映射规则为根据关系数据库的SQL语法,将所述表结构设计文档中的表结构构建成SQL建表脚本的规则;
映射单元,用于通过所述映射规则,将所述表结构设计文档中的所有表映射为SQL建表脚本;
运行单元,用于运行所述SQL建表脚本完成建表操作。
优选的,所述获取单元,包括:
第一获取模块,用于通过预设编程语言,获取表结构设计文档。
优选的,所述获取解析单元,包括:
第二获取模块,用于获取表结构设计文档模板;
创建模块,用于在所述预设编程语言中创建文档对象;
解析模块,用于加载所述表结构设计文档,使所述文档对象对所述文档类型的表结构设计文档模板进行解析,得到映射规则。
优选的,所述映射单元,包括:
定义模块,用于定义SQL模板;
第三获取模块,用于获取所述表结构设计文档中的所有表对应的预设关键字内容;
替换模块,用于将所述表结构设计文档中的所有表对应的预设关键字内容替换所述SQL模板的预设模板内容后,得到SQL建表脚本。
本申请第三方面公开了一种存储介质,所述存储介质包括存储的指令,其中,在所述指令运行时控制所述存储介质所在的设备执行如第一方面任意一项所述的数据库的数据处理方法。
本申请第四方面公开了一种电子设备,包括存储器,以及一个或者一个以上的指令,其中一个或者一个以上指令存储于存储器中,且经配置以由一个或者一个以上处理器执行如第一方面任意一项所述的数据库的数据处理方法。
经由上述技术方案可知,本申请公开了一种数据库的数据处理方法、系统、存储介质及电子设备,获取表结构设计文档,获取表结构设计文档模板并解析,得到映射规则,映射规则为根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的规则,通过映射规则,将表结构设计文档中的所有表映射为SQL建表脚本,运行建表脚本完成建表操作。通过上述方案,在开发人员在总体设计阶段过程中,无需将数据库设计文档手工转化为数据库中的表,只需根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的映射规则,通过映射规则将表结构设计文档中的所有表映射为SQL建表脚本,运行SQL建表脚本完成建表操作,缩短了建表的时间,提高了建表的效率和降低错误率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例公开的一种数据库的数据处理方法的流程示意图;
图2为本申请实施例公开的一种数据库的数据处理系统的结构示意图;
图3为本申请实施例公开的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,开发人员在总体设计阶段过程中,在word或者Excel等办公软件中按照表结构模版进行表结构设计之后,将数据库设计文档手工转化为数据库中的表,从而导致建表所耗费的时间长,且容易出错。因此,如何提高建表的效率和降低错误率,是本申请亟需解决的问题。
为了解决上述问题,本申请公开了一种数据库的数据处理方法、系统、存储介质及电子设备,获取表结构设计文档,获取表结构设计文档模板并解析,得到映射规则,映射规则为根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的规则,通过映射规则,将表结构设计文档中的所有表映射为SQL建表脚本,运行建表脚本完成建表操作。通过上述方案,在开发人员在总体设计阶段过程中,无需将数据库设计文档手工转化为数据库中的表,只需根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的映射规则,通过映射规则将表结构设计文档中的所有表映射为SQL建表脚本,运行SQL建表脚本完成建表操作,缩短了建表的时间,提高了建表的效率和降低错误率。具体实现方式通过下述实施例进行说明。
需要说明的是,本申请提供的一种数据库的数据处理方法、系统、存储介质及电子设备,可用于大数据领域或其他领域。上述仅为示例,并不对本申请提供的一种数据库的数据处理方法、系统、存储介质及电子设备的应用领域进行限定。
参考图1所示,为本申请实施例公开的一种数据库的数据处理方法的流程示意图,该数据库的数据处理方法主要包括如下步骤:
S101:获取表结构设计文档。
在S101中,通过Excel表格中的预设编程语言,获取表结构设计文档。
预设编程语言可以是宏语言(Visual Basic for Applications,VBA),也可以是其他编程语言。具体预设编程语言的确定本申请不做具体限定。本申请的预设编程语言优选VBA。
S102:获取表结构设计文档模板并解析,得到映射规则;映射规则为根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的规则。
其中,每种关系数据库的语法略有差异,以数据库oracle为例,假设表结构中所有表的结构都如表1的表结构设计文档模板的形式。
表1
其中,模板中前两行是表的中文名和英文名,下面是各个字段的定义,包含字段的英文名、类型、是否为空、性质(主键、索引、普通)、取值说明和说明(字段备注)。所有表的设计都遵从该表结构设计文档模板的结构。
具体获取表结构设计文档模板并解析,得到映射规则的过程,如A1-A3所示。
A1:获取表结构设计文档模板。
A2:在预设编程语言中创建文档(word)对象。
在A2中,表结构设计文档为文档word形式,在VBA中创建word对象。
A3:加载表结构设计文档,使文档对象对文档类型的表结构设计文档模板进行解析,得到映射规则。
在A3中,加载文档word形式的表结构设计文档,遍历文档类型的表结构设计文档模板中的所有的图表,通过文档对象对文档类型的表结构设计文档模板中的所有图表进行解析,得到映射规则。
具体遍历文档类型的表结构设计文档模板中的所有的图表的代码如下:
#创建word对象;
Set WdApp=CreateObject("word.application");
WdApp.Visible=True;
#加载表设计文档到word对象中;
Set odoc=WdApp.Documents.Open(“表设计文档名”);
#获取表设计文档中所有的表格数;
tablescount=odoc.tables.Count;
#遍历所有的表格:
Fori=1To tablescount。
S103:通过映射规则,将表结构设计文档中的所有表映射为SQL建表脚本。
具体通过映射规则,将表结构设计文档中的所有表映射为SQL建表脚本的过程,如B1-B3所示。
B1:定义SQL模板。
其中,以数据库Oracle为例,SQL模板的组成结构如下代码所示:
drop table表英文名;#删除表,重建表时需要删除已存在的表;
create table表英文名#新建表;
(
字段英文名1取值类型是否为空,
字段英文名2取值类型是否为空,
......
);
#下面是给表增加主键,索引;
altertable表英文名#修改表的关键语句;
add constraint主键名称primarykey(主键字段);
create index索引名on表英文名(索引字段);
#下面是对表的整体注释;
commentontable表英文名is'表注释信息;
#下面是对每个字段加字段说明;
commentontable表英文名.英文字段名1is'字段1备注信息;
commentontable表英文名.英文字段名2is'字段2备注信息;
......。
B2:获取表结构设计文档中的所有表对应的预设关键字内容。
其中,预设关键字内容包括变量、索引名、表名、字段名、word对象、表的中文名、英文名、主键字段集合、字段备注信息、取值范围等。
B3:将表结构设计文档中的所有表对应的预设关键字内容替换SQL模板的预设模板内容后,得到SQL建表脚本。
在B3中,将表结构设计文档中的所有表对应的预设关键字内容替换(映射)SQL模板的预设模板内容的映射过程如下代码所示:
#定义变量
DimtotalsqlstrAs String用来保存最终的sql脚本;
DimprimarykeystrAs String用来保存主键信息;
Dim singleindex As String用来保存单一索引;
Dimunionindex As String用来保存复合索引;
nextline=Chr(10)表示换行符;
leftbrace="("
rightbrace=");"
isnotnull="notnull"表示该字段不能为空;
itsnull=""'表示该字段可为空,用空格代替;
#定义sql脚本模板,后面做拼接或者替换关键字的方法得到sql脚本;
createsql="create table";
dropsql="drop table";
altersql="altertable";
createindexsqltemplate="create index索引名on表名(字段名);";
primarykeyprefix="add constraint";
Commentontabletemplate="comment ontable表名is'备注内容';";
Commentoncolumetemplate="comment on column表.字段is'备注内容';";
#创建word对象;
SetWdApp=CreateObject("word.application");
WdApp.Visible=True;
#加载表设计文档到word对象中;
Set odoc=WdApp.Documents.Open(“表设计文档名”);
#获取表设计文档中所有的表格数;
tablescount=odoc.tables.Count;
#遍历所有的表格:
Fori=1To tablescount;
#处理第i个表格;
Set oTable=odoc.tables(i);
Set flag=oTable.Cell(2,1).Range;
#并非所有的表格都是表结构文档,只有第二行第一列内容是“表格”的才认为是表结构文档;
Ifflag="表名"Then;
#获取表的中文名和英文名;
Set tablechnname=oTable.Cell(1,2).Range;
Set TableName=oTable.Cell(2,2).Range;
#获取表的行数,从第四行以此读取各个表字段;
RowCount=oTable.Rows.Count;
Forj=4To RowCount;
'取字段英文名,字段数据类型,是否能为空,主键or索引;
Set fieldname=oTable.Cell(j,2).Range;
Set fieldtypestr=oTable.Cell(j,3).Range;
Set fieldisnull=oTable.Cell(j,4).Range;
Set fieldrole=oTable.Cell(j,5).Range;
#该字段如果是主键,则构建主键字段集合;
Iffieldrole="主码"Or fieldrole="主键"Then;
primarykey=primarykey&","&fieldname;
End If;
#单子段索引,可以有多个;
Iffieldrole="索引"Then;
singleindex=singleindex&","&fieldname;
End If;
#复合字段索引,只支持一组;
Iffieldrole="联合索引"Then;
unionindex=unionindex&","&fieldname;
End If;
#获取字段备注信息;
Set fieldCHNname=oTable.Cell(j,7).Range
#获取取值范围
Setvaluescan=oTable.Cell(j,6).Range;
#将取值范围和字段备注信息拼接起来作为字段的备注说明,通过模板替换来实现;
#单个字段的备注说明;
COMMENTLINE=Replace(Commentoncolumetemplate,"表.字段",TableName&"."&fieldname);
COMMENTLINE=Replace(COMMENTLINE,"备注内容",fieldCHNname&valuescan);
#合成该字段的备注说明到总备注字段COMMENTSQL中;
COMMENTSQL=COMMENTSQL&COMMENTLINE&nextline;
#构造该字段的定义sql;
rowline=fieldname&""&fieldtype&""&fieldisnull&nextline;
#将该字段的定义sql追加到最终的sql中;
totalsqlstr=totalsqlstr&rowline;
#下面的“Next”是第二层循环,即一个字段处理完毕,继续下一个;
Next;
#一张表的字段处理完毕后,要增加主键、索引的sql信息。
'有主键则有主键语句,否则不用处理;
Ifprimarykey<>""Then;
primarykeystr=altersql&TableName&nextline;
primarykeystr=primarykeystr&primarykeyprefix&"P_"&TableName&"primarykey"&leftbrace&primarykey&rightbrace&nextline&nextline;
totalsqlstr=totalsqlstr&primarykeystr;
End If;
'建立单列索引sql;
Ifsingleindex<>""Then;
#对所有的单列索引分别建立索引,tempindexarray是索引字段集合;
tempindexarray=Split(singleindex,",");
Forindexno=LBound(tempindexarray)To UBound(tempindexarray);
indexname="IS_"&TableName&indexno;
SINGLEINDEXLINE=Replace(createindexsqltemplate,"索引名",indexname);
SINGLEINDEXLINE=Replace(SINGLEINDEXLINE,"表名",TableName);
SINGLEINDEXLINE=Replace(SINGLEINDEXLINE,"字段名",tempindexarray(indexno));
SINGLEINDEXLINESTR=SINGLEINDEXLINESTR&SINGLEINDEXLINE&nextline&nextline;
Next;
totalsqlstr=totalsqlstr&SINGLEINDEXLINESTR;
End If;
#建立复合索引sql;
Ifunionindex<>""Then;
indexname="IU_"&TableName;
UNIONINDEXLINE=Replace(createindexsqltemplate,"索引名",indexname);
UNIONINDEXLINE=Replace(UNIONINDEXLINE,"表名",TableName);
UNIONINDEXLINE=Replace(UNIONINDEXLINE,"字段名",unionindex);
totalsqlstr=totalsqlstr&UNIONINDEXLINE&nextline;
End If;
'给表名以及表字段加注释;
COMMENTLINE=Replace(Commentontabletemplate,"表名",TableName);
COMMENTLINE=Replace(COMMENTLINE,"备注内容",tablechnname);
COMMENTSQL=COMMENTLINE&nextline&COMMENTSQL;
totalsqlstr=totalsqlstr&COMMENTSQL&nextline;
#下面的“Next”是第一层循环,即一个表,继续下一个表;
Next;
所有表处理完,totalsqlstr就保存着这个表设计文档的SQL建表脚本。依据上述算法,扫描整个文档,将所有表都转化为SQL建表脚本。
SQL建表脚本的结构如下:
例如:表1中的示例经过映射可以得到SQL脚本:
drop table user_info;
create table user_info;
(
uid number(11,0)notnull,
org_id Varchar2(20)notnull,
uname Varchar2(255)notnull,
nick Varchar2(255)notnull,
contact_name Varchar2(255),
work_no Varchar2(255),
dept_id Varchar2(255),
type char(1)notnull,
);
altertable user_info;
add constraintP_user_info primarykey(uid);
create index IS_user_info0 onuser_info(org_id);
commentontable user_info is'用户信息表';
commenton column user_info.uid is'用户号';
commenton column user_info.org_id is'机构号(只针对内部用户)';
commenton column user_info.uname is'用户名';
commenton column user_info.nick is'昵称';
commenton column user_info.contact_name is'企业/机构联系人姓名';
commenton column user_info.work_no is'工号(只针对内部用户)';
commenton column user_info.dept_idis'部门(只针对内部用户)';
comment on column user_info.type is'用户类型1-国企;2-事业单位;3-民营公司;4-自由职业;5-其他'。
S104:运行SQL建表脚本完成建表操作。
本申请实施例中,在开发人员在总体设计阶段过程中,无需将数据库设计文档手工转化为数据库中的表,只需根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的映射规则,通过映射规则将表结构设计文档中的所有表映射为SQL建表脚本,运行SQL建表脚本完成建表操作,缩短了建表的时间,提高了建表的效率和降低错误率。
基于上述实施例图1公开的一种数据库的数据处理方法,本申请实施例还对应公开了一种数据库的数据处理系统,如图2所示,该数据库的数据处理系统包括获取单元201、获取解析单元202、映射单元203和运行单元204。
获取单元201,用于获取表结构设计文档。
获取解析单元202,用于获取表结构设计文档模板并解析,得到映射规则;映射规则为根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的规则。
映射单元203,用于通过映射规则,将表结构设计文档中的所有表映射为SQL建表脚本。
运行单元204,用于运行SQL建表脚本完成建表操作。
进一步的,获取单元201包括第一获取模块。
第一获取模块,用于通过预设编程语言,获取表结构设计文档。
进一步的,获取解析单元202包括第二获取模块、创建模块和解析模块。
第二获取模块,用于获取表结构设计文档模板。
创建模块,用于在预设编程语言中创建文档对象。
解析模块,用于加载表结构设计文档,使文档对象对文档类型的表结构设计文档模板进行解析,得到映射规则。
进一步的,映射单元203包括定义模块、第三获取模块和替换模块。
定义模块,用于定义SQL模板。
第三获取模块,用于获取表结构设计文档中的所有表对应的预设关键字内容。
替换模块,用于将表结构设计文档中的所有表对应的预设关键字内容替换SQL模板的预设模板内容后,得到SQL建表脚本。
本申请实施例中,在开发人员在总体设计阶段过程中,无需将数据库设计文档手工转化为数据库中的表,只需根据关系数据库的SQL语法,将表结构设计文档中的表结构构建成SQL建表脚本的映射规则,通过映射规则将表结构设计文档中的所有表映射为SQL建表脚本,运行SQL建表脚本完成建表操作,缩短了建表的时间,提高了建表的效率和降低错误率。
本申请实施例还提供了一种存储介质,存储介质包括存储的指令,其中,在指令运行时控制存储介质所在的设备执行上述数据库的数据处理方法。
本申请实施例还提供了一种电子设备,其结构示意图如图3所示,具体包括存储器301,以及一个或者一个以上的指令302,其中一个或者一个以上指令302存储于存储器301中,且经配置以由一个或者一个以上处理器303执行上述数据库的数据处理方法。
上述各个实施例的具体实施过程及其衍生方式,均在本申请的保护范围之内。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
- 一种数据处理方法、电子设备及存储介质
- 一种数据处理方法、电子设备以及存储介质
- 一种方控数据处理方法、装置、电子设备及存储介质
- 一种材质的数据处理方法、装置、电子设备及存储介质
- 一种数据处理方法、装置、电子设备及存储介质
- 一种数据处理方法、分布式数据库系统、电子设备及存储介质
- 数据处理方法、分布式数据库系统、电子设备及存储介质