软件开发中的数据库设计问题研究
2023-10-26徐亮
徐 亮
(江苏中江网传媒股份有限公司,江苏 南京 210000)
0 引言
在数据库的发展过程中,数据库设计以一种衍生技术的形式存在,同时作为信息技术发展中的一项重要技术实现了飞速发展。从技术水平来看,数据库开发对技术提出的要求较为严格。随着数据库技术在软件行业中重要性的日益凸显,设计的重要性及设计难度亦开始显现。对于软件开发人员而言,在设计与使用软件的过程中,必须重点把握数据库的设计与使用质量,并保证软件有足够高的普适性及实用性,最大限度地发挥软件数据库技术的作用及功能,在保证软件质量及其运行稳定性的同时,从整体层面提升系统的运行效果。
1 软件开发中数据库设计需要解决的问题
对于软件开发这一系统性、严谨性的工程来说,数据库安全设计的重要性不言而喻,开发人员需要充分考虑会对数据库安全性产生影响的因素,逐一明确数据库设计过程中存在的问题,采取有效措施,从源头解决各类潜在的数据库安全问题。分析目前实际情况,软件开发中数据库设计需要解决以下问题。
1.1 数据库设计缺陷
与数据信息的日益增多相伴随,数据库的存储容量越来越大。在目前较为主流的各类数据库中,数据通常都是采用明文的方式存储于各类设备中,若存储设备不慎丢失,会有很大可能导致数据的泄露,而这无疑会对使用数据库的用户产生不利影响。另外,正是因为数据库文件采用明文方式进行存储,很多网络非法用户可能会利用网络及操作系统中存在的相关漏洞和各类数据库文件进行接触,而这必然会加大数据泄露的风险。在进行数据库设计之时,需要对此方面的问题给予高度的重视。
1.2 缺省安装漏洞
在完成数据库的安装之后,可能会出现用户名与密码缺省的问题。在当前各类主流数据库中,缺省数据库用户的数量往往都很多,而这些缺省密码具有公开性,网络非法攻击人员可以通过对这些缺省信息的利用实现对数据库的简单登录。因此,数据库设计人员应以完善的数据库设计为基础,加强对数据库缺省安装漏洞的关注,采取有效措施解决漏洞[1]。
1.3 人为原因导致的漏洞
在数据库的设计与应用方面,数据库安全同样非常重要。良好的数据库安全管理工作能够将信息泄露问题的发生率控制于一个较低水平。不过目前,运维人员在对计算机系统进行维护之时有时会出现人为层面的疏忽,如数据库管理人员未基于对最小授权原则的遵循向数据库用户授权,方便起见,他们为用户提供较为宽泛的授权,而这无疑会将数据库的风险加大。这同样是当前数据库设计需要重点考虑与解决的一个问题。
2 数据库编程设计
在利用编程语言对数据库进行设计之时,可以运用结构化查询语言(Structure Query Language,SQL)。SQL是一种标准方式,此类语言的应用有利于数据库统一设计与管理目标的实现,其功能优势突出,编写简单、操作方便,可较大规模使用。
2.1 SQL嵌入式应用
主要是在日常程序设计语言中嵌入SQL,基于C语言和Java语言,运用更加灵活的方式,在充分、准确分析各类语言的基础上,保证整体语言设计的规范性,在简化数据库语言设计流程的同时,为数据库语言管理质量的提升提供重要支持。
2.2 存储设计
在数据库设计工作中,存储设计是一项基础性的工作,语言方式比较高级。在程序设计语言中嵌入存储设计语言,可以达到设计的过程化目的。实际上,存储设计是对SQL语言的一类程序化拓展,亦是对基本结构的分析,在结构分析的基础上建立相互之间的嵌套关系,并完整操作逻辑关系。对存储过程进行分析,可将其划分为创建、执行以及删除等相关步骤,通过编译与优化,将经过处理的存储过程嵌入数据库服务器中,对于数据库运行效率的提升具有积极意义,可以达到更好地控制与维护数据库的目的[2]。
2.3 ODBC编程
此编程的主要功能在于分析用户应用、驱动与数据源。在对数据进行配置之时,需要合理与有效利用运行过程中的数据源,或借助Driver Manager执行相应的函数增加、删除与修改操作,以此达到有效提升数据使用效率、为数据质量提供保证的目的。另外,还可以在使用过程中建立临时数据源,做好对数据的分析及整理工作,加快数据调取。Driver Manager的作用体现为控制并使用运行环境,以对数据基本驱动的维持为基础,直接分析并整理数据,完成对真正数据结构的搭建。建设初始化环境,这是践行数据库实践的一个重要前提条件,而建立连接,则能够为数据库使用质量提供保证,对此,可以利用SQL语言建立起数据库和运行程序之间的连接,这一环节要设置连接函数,并对数据源名称及用户ID等各种基本信息进行严格控制[3]。制定具体的执行程序,这是顺利与有效使用数据库的基础,包括直接执行与预处理,主要是利用SQL数据库发出具体的执行指令,以此为基础准确分析数据库结果,根据结果输出适宜的数据信息。
3 数据库设计实例——资源管理数据库(CMDB)设计
3.1 CMDB整体架构
CMDB对设计与运维功能进行结合,其主要架构如图1所示。
图1 融合设计与运维功能的CMDB架构
(1)数据采集层。该层级与很多第三方平台进行结合而提供具体服务,这些第三方平台包括人工录入系统、自动化采集系统以及合同管理系统等。各系统发挥合力,从多个角度准确、实时、高效采集大量数据,可以为数据采集的全面性、丰富性、时效性以及精准度等提供可靠保证。
(2)基础资源层。以数据采集层采集到的数据信息为基础,CMDB平台可以和前文所述数据采集层中各类第三方平台建立密切联系,获取资产、维保以及运维等各相关方面的关系;而在资源物理属性与逻辑属性两者之间关联的建立,又能为物理、业务、性能和网络关系的获取提供支持。
(3)外部资源层。对于之前已经采集到的各类数据信息(对设备参数及资源库数据等均有涉及),采用相应技术和算法整合并分析各类数据信息,以分析结果为依据制定相应决策,实现对数据价值的有效创造。
(4)融合应用层。在完成对数据的分析任务之后,可以在工程设计、机房以及系统运维等各类场景中应用产出的数据价值,将其真正地转换为规划设计及自动化运维等的提升。
3.2 CMDB层次设计
在进行CMDB层次设计之时,需要建立起逐层归属或逐层分解等关系,从下至上进行设计,最底层设置为资源所属区域,基于对由大致小顺序的参照,可以将物理区域划分为多种不同的类型,涉及局址、机房、列以及机架等;而在逻辑区域方面,又可以进一步划分资源池、模块和系统等相关部分。从作用上来看,物理层可以对各种类型的物理类资源表和字段进行定义;与之对应,逻辑层则主要用于对各类逻辑资源进行定义[4]。业务层所处位置在CMDB层次的最上层,其作用以对数据文件和业务进程等各类相关指标的描述为主要体现。
由上至下对CMDB层级架构进行观察,可以发现各个层级之间存在逐级归属关系。通过采取分层理念与手段对其进行管理,有助于纵向数据关联目标的达成。若在某一机房内部,某一机架出现问题或故障,可以及时、准确而又高效地对受到影响的各设备、逻辑资源甚至是业务线条等进行定位,为解决方案的制定提供重要参考。
3.3 CMDN关系设计
在完成CMDB层次定义工作之后,为了对各个配置项CI进行有效与准确连接,还需进一步做好关系设计工作。下面对几种比较常用的CI关系进行介绍。
(1)安装:主要是指在某一硬件或是逻辑资源上对软件进行安装,或是运行已经成功安装的软件。举例而言,在主机上安装数据库。
(2)连接关系:主要是指建立物理连接层面的关系。举例而言,在交换机上连接主机。
(3)父子关系:指的是某一CI作为其他CI中的一部分而存在,举例而言,刀片服务器位于刀箱之上,前者是后者的子关系,而后者是前者的父关系。
(4)依赖关系:指的是不同的软件之间所表现出来的彼此依赖的关系,换句话来说,对于某一CI,其正常运行以及功能的有效发挥建立于其他CI正常运行的基础之上。举例而言,在某一业务的开展过程中,需要有中间件为其提供重要的支持。
3.4 CMDB数据表设计
目前,CMDB表设计工作仍有较大比重建立于设备类型的基础之上,举例而言,PC服务器和刀片服务器之间都是各自构建相应数据表。数据表不同,设置的数据存储字段同样会有相应的差异。尽管这一方式在初期有设计难度和复杂程度比较低的优点,但是灵活性比较差,并不适宜对多样性资产进行管理,后期如果出现新增表格或新增字段的情况,会有比较大的可能导致现有系统锁表,或出现较大的I/O动作[5]。
考虑这一问题,建议充分把握数据表所具有的实际特点,在此基础上开展分类定义工作,保证工作的针对性,准确区分固定数据表与组合数据表。从所具有的特点上来看,固定数据表的字段格式比较固定,后期并不会出现频繁新增或变动的情况。与之不同,组合数据表的字段数量比较多,且后期有比较大的可能发生变动。对于组合数据表,可以进一步将其划分为基本表与扩展表,其中,基本表用于记录IT设备所具有的公共字段属性,包括基础信息、运维信息、资产信息、维护与保养信息以及动力信息等;扩展表则更多的是对各类IT设备独有的属性进行存放,包括主机类、存储类以及网络安全类等类别。
IT设备资源主要是通过基本表+扩展表的组合形式生成各种类型的表。例如:服务器表可以通过基本表JOIN主机数据域的属性来生成;而网络设备表的生成则可以通过基本表JOIN网络安全数据域的属性来实现。
为了充分与有效提升数据表灵活性,为后期表与字段等的新增提供便利,同时,尽可能地降低对已有表列字段的影响,在进行数据表的设计之时,可以选择性地运用多张表,并进行虚拟表的构建,包括schema表、field表、host主机表、entity表与value表。
(1)schema表设计,对表名进行记录,各表名均为一行数据,另外,还要设计ID、表名以及描述字段等相关信息。
(2)field表设计,对字段信息进行记录,各字段名均为一行数据,另外,还要进行ID、字段名等相关字段的设计,借助于外键,建立起和schema表之间的多对一关系。
(3)host主机表设计,主要利用schema表与field表对host主机表进行虚拟化,不过host主机表的作用仅仅在于体现表与表之间的关系,不具备对数据进行存储的作用。
(4)entity表与value表设计,分别作为key-value对配置项的具体数据进行存储。其中,entity表用于记录某条配置项的实体数据的key值,借助于外键建立起和schema表之间的多对一关系;value表则是记录此条配置项实体对应的多个字段的值,借助于外键,分别建立起和entity表与field表之间的多对一关系。
上述数据表设计可以在较为明显的程度上实现对表和字段存储方式的优化,由以往以列的方式进行存储替换为全部以行的方式进行存储,后期如果有新增表的需要,只需在schema表中增加行即可,同理,如果有增加字段的需要,只需在field表中增加行即可,此设计方式将对复杂度的适当牺牲作为代价,可以有效提升数据表的灵活性,对于后期表与字段的新增操作具有积极意义。
4 结语
在软件开发过程中,数据库设计发挥着非常重要的作用,软件开发企业与人员需要对数据库设计给予高度的重视,提高数据库设计意识,针对性地强化工作人员的专业能力,不断探寻对数据库设计缺陷、缺省安装漏洞以及人员漏洞等问题的解决路径,基于对各种先进技术与手段的运用,更加高效地完成数据库设计工作,充分发挥数据库的价值,推动我国软件开发行业实现快速发展。