關于數據庫自我描述功能的構思
關于數據庫自我描述功能的構思
袁永福 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 袁永福 電子病歷,醫療信息化 閱讀(879) 評論(0) 收藏 舉報
浙公網安備 33010602011771號