关于数据库自我描述功能的构思

关于数据库自我描述功能的构思

袁永福 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  袁永福 电子病历,医疗信息化  阅读(855)  评论(0编辑  收藏  举报

导航