關於數據庫自我描述功能的構思程序員
袁永福 2017-3-21數據庫
前言:數組
筆者正在開發一個應用程序開發支撐平臺。用於對於廣大軟件公司和自主研發軟件的醫院信息科的。平臺作底層功能支撐,開發者就能專心作業務流程開發,幫助他們快速完成應用軟件的開發。而數據庫的自我描述功能就是本開發支撐平臺中的一個功能設想。工具
行業痛點設計
在應用系統開發中,數據庫結構的管理是一個繁重的工做。一個比較大的軟件產品,包含幾百個數據表、數千個字段,歷經多代程序員的傳承。期間發生了不少數據庫表和字段結構的增刪改操做(DDL操做)。這個時候很容易出現知識的斷檔,會出現文檔和實際數據庫結構不一致的問題,這給廣大程序員帶來諸多困擾。另外在浩瀚的數據庫中找到所需的字段也是一件不容易的事情。3d
好比下圖所示:對象
這是MS SQL SERVER的數據庫字段設計器的界面。能夠定義字段名、數據類型、容許NULL值等基本信息,其實下面還有一個屬性列表來定義更多的信息,不過應該不多人用到。blog
不過這些信息實在是太少了。因此纔會出現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次的相似操做。實現「一次配置,處處使用」的功能。提升數據庫的自我描述的應用價值。
另外能夠由系統管理員來預先設置好數據庫的自我描述,這樣下降了模板製做人員的使用難度,使得不是很懂計算機的普通用戶也能修改模板,幫助實現「全民參與信息化建設」。