基于 pureXML 技術的數據庫表結構擴展_.Net教程
推薦:SQL Server 2005中插入XML數據方法SQL Server 2005數據庫中增加了XML類型,在創建表的時候可以指定某一列為XML類型,示例如下: CREATE TABLE customers ( name VARCHAR(20) NOT NULL P
信息系統交付使用之初,數據庫表結構的設計往往邏輯結構清晰,管理使用方便,但是當信息系統項目運行一段時間,隨著業務的不斷變化和增加,處理流程不斷的變革,信息系統需要從前臺界面到后臺數據庫的完善和修改,勢必要對數據庫表結構必須要進行擴展。我們通常的數據庫擴展往往采用增加備用字段、擴展字段的內涵、增加主從表和管理表的方式,這種數據庫表結構的擴展往往會帶來營運的中斷和操作的風險,本文通過分析常見的數據庫庫表結構的擴展方法中的不足,提出了幾種基于 pureXML 方式的數據庫表結構的擴展模式,可以成功的結束數據庫擴展的技術難題。
概述
信息系統的建設往往遵循業務調研、需求分析、再進入到數據庫和軟件的概要設計、詳細設計、代碼編寫等等階段,在這個過程中數據庫設計者往往根據已有的業務調研、需求分析的成果進行數據庫表結構的設計,這時的數據庫的設計者是通盤考慮,全局謀劃所設計的數據庫結構,整個庫表結構邏輯清晰,管理方便并且符合 3NF 的要求。信息系統項目運行一段時間,隨著業務的不斷變化和增加,處理流程不斷的變革,這種業務需求的驅動下,我們的軟件體系也需要不斷的修改和完善,這種修改和完善不僅是界面的調整和模塊的增加,而且必須對數據庫表結構進行必要的調整和修改。
這種項目維護期間的數據庫調整和擴展,必須對數據庫設計文檔進行修改,對數據字典進行調整,理想的情況是文檔齊備、資料完整,但實際工作中,由于設計和開發人員的責任心和對文檔的輕視,每次對數據庫表結構的調整都會造成數據庫庫表結構混亂,為今后的工作帶來系統管理、維護和軟件的再次修改和調整帶來隱患;其次,數據庫的擴展和調整中,對數據庫設計者要求很高,很容易導致數據庫設計中范式設計的隱患,進而造成數據庫性能的急劇下降;最值得注意的是,由于數據庫存儲有大量的業務數據庫,每次對數據庫字段的修改和調整必須停機操作,從而帶來運營的中斷和操作的風險。特別是對于上線運行的核心業務系統,和若干 7×24 小時的業務系統,每次的數據庫停機操作對營運的影響非常的巨大,而且還可能引來不良的社會影響。
為了對數據庫進行有效的擴展,實際工作中往往采用預留備用字段、字段內涵擴展、增加從表擴展和增加關聯表的方式進行擴展,這種擴展往往存在若干的問題:
設計之初預留備用字段帶來的不足
為了減少對今后對數據庫表中的字段調整,某些設計者在設計之初,根據經驗對若干可能擴展的表中預留部分備用字段。預留備用字段的方式在某些程度上可以增加擴展的靈活性,但是確存在如下隱患:
預留字段的數量無法預測 , 預留 N 個還是預留 N 1,由于無法預知需要預留的數量造成擴展的不確定性;
預留字段的類型無法預測,預留字符型還是數值,無法去預測和評估;
常見在預留的擴展字段中,這些預留的擴展字段往往會破壞數據庫最基本的范式要求,數據庫的范式的最基本要求就是原子性和唯一性,而擴展的字段本身的定義是不明確的,這是不未確定的,也就是非原子的和非唯一的。
表結構的字段數據量不擴展,擴展若干字段的內涵
數據庫的調整會帶來運營的風險,部分數據庫設計者為了應付數據庫存儲的需要,不對數據庫表結構的字段的數量進行增加,而是非常“聰明”的將某個字段的內涵進行擴展,使得某些字段中同時存入 2 以上含義,由程序分析存入該字段的值的屬性和內容。例如:某字段原定義為 VARCHAR(4),如果存儲字母開頭的值,如 A001 表示意思 XX;存儲數值開頭的值,如 1000 表示意思 YY;還有一種方式就是采用間隔符,對字段進行擴展,例如 A001 1000 等形式。我們的數據庫設計中,數據庫表中的每一個字段都是單一屬性,是不可再分的、原子性的,這個是數據庫設計的第一范式理論,任何的數據庫設計都應該遵守第一范式。這種設計不僅違反的數據庫設計的第一范式理論,而且造成讀取數據時需要程序進行“解碼”后才能進行查詢、統計等等,使得數據庫的整體性能大大降低。
增加從表,但又不能確定從表的數量
當對庫表進行擴展時,往往遇到存在 1:N 的情況時,這時必須增加從表來應對數據庫的擴展,但是由于每次增加數據庫從表時,無法預測需要增加多少個從表,每次增加從表都會造成數據庫的修改和調整。
增加關聯,但關聯表的字段無法預測
由于業務邏輯的改變,如果發現原表 T1,T2 存在 N:M 的關系時,必須增加關聯表,但是關聯表的字段數量又無法預測 , 每次對關聯表的調整又會造成對數據庫的影響。
通過對數據庫表結構中經常采用表和字段擴展的方式進行分析,我們都會發現對數據庫的修改,往往會造成諸多的不便,而且值得注意的是每次修改數據庫往往是業務需要非常緊迫,考慮到之前確保之前程序的穩定性和可靠性,此時又不能對原有的數據庫進行調整和重組,DBA 往往只能進行部分數據庫表結構的字段,往往最終導致數據庫表結構混亂,以及管理維護的失控。
分享:ASP.NET2.0向其它網頁傳遞信息的方法傳統辦法 為了便于比較,我想花一分鐘來回顧網頁傳遞數據的老方法。HTML的表格元素有一個action(動作)屬性,用來指定服務器端哪項資源(所謂資源,是指一個網頁、一段腳本、程序等)來處理這些
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-基于 pureXML 技術的數據庫表結構擴展。