当前位置: 首页 > news >正文

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

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

袁永福 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次的类似操作。实现“一次配置,到处使用”的功能。提高数据库的自我描述的应用价值。

    另外可以由系统管理员来预先设置好数据库的自我描述,这样降低了模板制作人员的使用难度,使得不是很懂计算机的普通用户也能修改模板,帮助实现“全民参与信息化建设”。

 

相关文章:

  • POJ 3648 Wedding(2-ST)
  • topcoder srm 460 div1
  • ssh-agent
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 基于原型链劫持的前端代码插桩实践
  • Java动态代理机制——那些让你面试脱颖而出的技能 推荐
  • python正则表达式的使用
  • Nginx配置SSL实现服务器/客户端双向认证
  • reqeusts用法
  • 【总结整理】交互心理学---摘自《人人都是产品经理》
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • 在线uml软件,在线思维导图软件
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • 楚留香mv
  • TestDriven.NET和Visual Studio Express的纠纷往事
  • 【mysql】环境安装、服务启动、密码设置
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Android交互
  • Intervention/image 图片处理扩展包的安装和使用
  • java概述
  • JS基础之数据类型、对象、原型、原型链、继承
  • MySQL数据库运维之数据恢复
  • Python socket服务器端、客户端传送信息
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Yeoman_Bower_Grunt
  • 百度小程序遇到的问题
  • 力扣(LeetCode)357
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 面试总结JavaScript篇
  • 全栈开发——Linux
  • 用简单代码看卷积组块发展
  • 移动端高清、多屏适配方案
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (原創) 物件導向與老子思想 (OO)
  • (转)程序员技术练级攻略
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .Net 6.0 处理跨域的方式
  • .NET 8.0 发布到 IIS
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 微服务 服务保护 自动重试 Polly
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .so文件(linux系统)
  • /etc/fstab 只读无法修改的解决办法
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @RestControllerAdvice异常统一处理类失效原因
  • [ C++ ] STL---string类的模拟实现