关于数据库自我描述功能的构思
关于数据库自我描述功能的构思
袁永福 2017-3-21
前言:
笔者正在开发一个应用程序开发支撑平台。用于对于广大软件公司和自主研发软件的医院信息科的。平台做底层功能支撑,开发者就能专心做业务流程开发,帮助他们快速完成应用软件的开发。而数据库的自我描述功能就是本开发支撑平台中的一个功能设想。
行业痛点
在应用系统开发中,数据库结构的管理是一个繁重的工作。一个比较大的软件产品,包含几百个数据表、数千个字段,历经多代程序员的传承。期间发生了很多数据库表和字段结构的增删改操作(DDL操作)。这个时候很容易出现知识的断档,会出现文档和实际数据库结构不一致的问题,这给广大程序员带来诸多困扰。另外在浩瀚的数据库中找到所需的字段也是一件不容易的事情。
比如下图所示:
这是MS SQL SERVER的数据库字段设计器的界面。可以定义字段名、数据类型、允许NULL值等基本信息,其实下面还有一个属性列表来定义更多的信息,不过应该很少人用到。
不过这些信息实在是太少了。所以才会出现PDM、MS WORD、MS EXCEL等各种格式的文档来定义数据库结构。不过文档是和数据库分开保存的,两者没啥互动,时间久了造成程序猿没有更新文档的动力。埋怨前任留下坑的同时自己也在为后来者挖坑。
数据库自我描述
为此笔者提出了数据库自我描述的功能的构想。将数据库结构的描述信息直接保存在数据库中,并提供一套工具来将两者紧密的关联在一起。使得数据库能自己描述自己,减少对文档的依赖,增强数据库对业务的支持,并为一些自动化机制提供支持。
以下是管理工具用户界面原型。
在这个界面中,左边是数据库结构树状列表。根节点是若干个数据库连接对象。每一个数据库连接对象是独立。比如第一个是ORACLE,第二个可以是SQL SERVER,第三个是MYSQL。这样本功能就不仅仅用于公司产品了,也适用于客户的数据库管理了。因为一些客户的系统是万国系统,各个厂家的软件的数据库堆在一起,此时可以采用这种方式进行集中照看。
这个树状列表的第二层节点就是各个数据库中的数据表和视图了。按照名称进行排序。
当用户点击数据库连接节点时,右边的列表控件列出了该数据库下所有的数据表和视图的信息。在这个列表中,对象是分组的,而且数据表和视图的图标不一样。对象所在的组名是可以在对象属性对话框中维护的。由于能分组,使得几百个数据表能按照逻辑业务关联而拆分成多组,降低管理难度。
这个列表中列出的栏目有:
名称:数据表和视图的原始名称。该栏目的数据是自动生成的,不能修改。
记录个数:该数据表中所有的记录个数。也就是“Select Count(*) From 表名”的结果。展示出这个列表内容后会后台延时加载该栏目的数据。该栏目的数据是自动生成的,不能修改。
标题:也就是对象的中文名。
说明:对象的更进一步的详细的说明。
对应实体类型:程序中和该数据表对应的实体类型的全名。可以自动扫描,也可以手动修改。
当用户点击左边树状列表中的某个数据表或视图时,右边列出了该对象所包含的字段信息。其原型如下图所示:
在这个字段列表中,各个栏目的说明如下:
名称:字段的原始名称。
字段类型:字段的原始类型。
允许NULL:字段是否允许为NULL值。前3个栏目是自动解析生成的,是不可修改的。
标题:也就是字段中文名。
说明:字段的更详细的说明。
扩展数据类型:列出了字段的在软件中的抽象的数据类型。目前有:
yyyyMMddHHmmss:表示精确到秒的日期时间数据。很多系统为了扩展性和对各种数据库的兼容性,不会定义原生态的DataTime格式。而是采用通用的字符串格式来存储日期时间数据。
yyyyMMdd:表示精确到天的日期数据。
HHmmss:表示精确到秒的时间数据。
Base64:Base64格式的字符串,应该转换为一个字节数组。
GUID:GUID格式的字符串。
还有其他应用系统自定义的扩展数据类型。
在这个列表界面中,对于不同的字段类型,比如主键、索引、外联字段等,其图标是不一样的。
数据库字段赋予应用系统可以解释的扩展数据类型,这提高了数据库的自我描述性。增强了数据库的机器可读性和人类可读性。
在这个主界面中的工具条按钮功能说明如下:
新增数据库连接:弹出空白的数据库连接属性对话框,让用户输入数据库连接信息来新增数据库连接对象。
删除数据库连接:删除当前选中的数据库连接节点。
刷新:不保存而重新加载数据。如果数据被用户修改了,则提示用户是否保存数据。
属性:显示属性对话框。如果树状列表获得焦点则显示当前节点的属性对话框,如果列表控件获得焦点则显示当前列表项目的属性对话框。
保存:保存设置。
查找:输入一个关键字,查找指定的表或者字段对象。查找范围包括对象的名称、标题和说明。
导入PDM:打开一个PDM的XML文件对话框,然后导入PDM中的设计信息到当前数据库连接下面的表和字段。
导出HTML文件:导出当前数据库连接下所有的表和字段信息到一个本地HTML文件中。也就是自动生成数据库的API文档。
点击工具条的属性按钮,会弹出对象属性对话框,对于数据库表对象,弹出的对话框界面原型如下:
对于字段,弹出的属性对话框界面原型如下:
在这个界面中,点击“编辑列表内容对话框按钮”则弹出如下所示的对话框:
点击“列表来源对话框按钮”,则显示如下所示的对话框:
该对话框显示了系统中所有预定义的字典项目。
用户点击“显示校验格式对话框按钮”,则显示如下所示的对话框:
用户点击“显示格式对话框按钮”,则显示如下对话框:
经过上述界面的编辑维护,软件将产生一些配置信息,这些配置信息就存在数据库的特定表中。这样就实现了数据库结构的自我描述。另外能为某些自动化的操作来提供支持。
比如在下面的表单设计界面:
右边列出了所有可用的字段,用户可以将字段拖拽到模板中来自动生成和字段关联的输入域元素。如果没有数据库的自我描述,则需要设置输入域的背景文字、显示宽度、前面的标题文本、内容校验规则等等。如下图所示,需要在右下角的属性列表中做不少操作。
如果有了数据库的自我描述,则可以自动设置。如果整个系统中有100处需要引用“UserName”字段,则只要进行一次字段自我描述定义,则能省掉其他99次的类似操作。实现“一次配置,到处使用”的功能。提高数据库的自我描述的应用价值。
另外可以由系统管理员来预先设置好数据库的自我描述,这样降低了模板制作人员的使用难度,使得不是很懂计算机的普通用户也能修改模板,帮助实现“全民参与信息化建设”。
posted on 2017-03-22 09:28 袁永福 电子病历,医疗信息化 阅读(847) 评论(0) 编辑 收藏 举报