摘要:本文主要介紹了SQL Server數據庫應用系統在服務器端和客戶端實現數據完整性的設計方法,闡述了結合醫院管理信息系統(簡稱JY-HMIS)實現數據完整性的策略。
關鍵詞:數據完整性;數據庫;事務處理
前言
數據完整性是指數據的正確性和壹致性,有兩層含義:(1)數據值的正確性,即字段的列值必須符合數據的取值範圍、類型和精度;(2)相關數據的壹致性,即相關表的關聯字段與列值相匹配。(2)相關數據的壹致性,即相關表聯系字段列值匹配。在數據庫應用系統中,保證數據的完整性是應用系統設計的基本要求;數據完整性實現的好壞,關系到系統數據的正確性、壹致性和可靠性,關系到系統的成敗。JY-HMIS采用C/S模式體系結構,其數據庫應用系統為:SQL Server 7.0;客戶端開發工具為:PowerBuilder 6.5。PowerBuilder 6.5。下面主要從服務器端的數據庫管理系統和客戶端的應用程序兩個方面進行介紹。
1.服務器端使用 SQL Server 7.0 數據庫實現數據完整性
在使用 INSERT、DELETE、UPDATE 語句修改數據庫內容時,可能會破壞數據的完整性,為了保證存儲數據的正確性和壹致性,SQL Server 強加了壹個或多個數據完整性約束。數據完整性約束。這些約束限制了數據到數據庫的值,或限制了由數據庫修改生成的數據的值,或限制了對數據庫中某些值的修改。
在 SQL Server 關系數據庫中,數據完整性主要有以下三種類型:實體完整性(保證表中所有行的唯壹性);參照完整性(主要維護外部健康和內部健康之間的關系,它涉及兩個或多個表中數據的壹致性維護);域完整性(列集合的有效性,是對管理業務或數據庫數據的限制)。在服務器端實現數據完整性有兩種方法:定義 Creat 表完整性約束和定義規則、默認值、索引和觸發器。
1.1定義創建表完整性約束
這種方法是在創建數據庫表的命令語句中添加表級約束或列級約束,以實現數據完整性。如在建表的語句中添加非空(not null)約束、缺省(default)約束、唯壹碼(unique)約束、主鍵碼(primary key)約束、外鍵碼(foreign key)約束、校驗(check)約束等。其主要特點是:定義簡單、安全可靠、易於維護。
1.1.1非空約束、默認約束和校驗約束
非空約束限制列的值不能為空;默認約束規定在向數據庫插入數據時,如果用戶沒有明確給出某列的值,SQL Server 會自動輸入壹個預定值;校驗約束用於限制列的值在壹定範圍內。
例如,在創建圖書登記表時,限定登記日期、圖書類別代碼、登記號、中文名稱等列不允許為空;頁數的默認值為 1;單價的默認值為 0;圖書狀態只能為:"在庫"、"外借"、"遺失"、"丟失"、"在庫"、"外借"、"丟失 "等。圖書狀態只能是"在圖書館"、"借出"、"丟失 "壹種。
1.1.2 主鍵約束和唯壹約束
主鍵約束和唯壹約束,都是為指定的列建立唯壹索引,即不允許在相同值的列上建立唯壹索引。主鍵約束更為嚴格,不僅不允許重復值,而且不允許空值。
例如,在章節代碼表中,為列 ksbm 創建主鍵約束,為 ksmc 創建唯壹約束。
1.1.3 外鍵約束
外鍵約束也稱為參照完整性約束,用於限定本表中的外鍵代碼列與相關表中的主鍵代碼字段列相匹配,即確保相關數據的壹致性。
例如,在創建醫生編碼表時,醫生所屬科室ssks為外鍵代碼,限定它與科室編碼表中科室代碼ksbm列的值壹致。
1.2定義規則、默認值、索引和觸發器
在數據庫表的創建命令語句中定義約束的方法雖然簡單、方便、安全,但它只對特定的表有效,不能應用於其他表,而且只能通過使用 alter 表命令來修改或刪除約束,不靈活。相比之下,在數據庫中創建壹個相對獨立於表規則、索引和觸發器的對象,同樣可以實現數據完整性,而且可以實現更復雜、更完整的數據完整性約束。其主要特點是功能強、效率高、易維護。
1.2.1定義規則
規則類似於表定義的校驗和約束,用於限制列中的取值範圍。它並不局限於特定的表,而是可以綁定到其他表中的列,或與用戶定義的數據類型壹起使用。
例如,在藥品編碼規則 Rul-ypbm 的定義中,可以綁定到其他表。
1.2.2 定義默認
默認與表定義中的默認約束類似,用於為列設置默認值輸入。它也不局限於特定的表,可以綁定到其他表中的列,或與用戶定義的數據類型壹起使用。
1.2.3 定義索引
索引類似於表定義中的唯壹約束,用於確保列值的唯壹性。此外,還可以使用聚類和非聚類索引選項來提高數據檢索的性能。
例如,對於門診收費明細分類賬表,分別按收費日期和收費序號建立非聚類索引,大大提高了數據查詢速度,在沒有索引的情況下,在 20 多萬條記錄中查詢滿足條件的記錄,大約需要 5 分鐘左右,建立索引後,只需要 4 秒左右。
1.2.4 定義觸發器
觸發器是執行復雜完整性約束的有效方法,當對數據進行更改時,觸發器會自動激活,以防止對數據進行不正確、未經授權或不壹致的修改。觸發器與表定義中的完整性約束類似,也可用於確保相關數據的壹致性。它還可以完成壹些表定義參照完整性約束無法完成的任務。
2使用PB開發的客戶端應用程序實現數據完整性
2.1使用PB控件保證數據的完整性
在使用PB開發工具編寫的應用程序中,可以使用數據窗口對象中的列檢查屬性來檢查輸入數據的正確性;在窗口輸入界面中可以使用下拉列表、復選框、單選按鈕等控件來實現固定數據的完整性。按鈕等控件,實現定值選擇輸入,確保數據的正確性;此外,應用程序本身也可以有效檢查輸入數據,確保數據的完整性。
2.2利用事務特征確保數據壹致性
由於PB的每壹個操作都是基於控件中的壹個事件,因此壹個完整的事務應該圍繞壹個事件或壹個操作單元展開。例如,門診價格的支付處理;同壹收費序號下的數據,處理後要錄入明細賬、總賬,還要更新收費序號的登記表等;所有這些過程都被認為是壹個完整的任務,必須等待所有語句都執行成功後才能提交給數據庫;如果有壹條語句沒有執行成功,就要撤銷所有的事務操作,回到事務開始時的狀態,這樣才能保證數據的壹致性。利用客戶端應用程序實現數據完整性的方法,其主要特點是:交互性好、功能強,但編程偏頗、維護困難、可靠性差。
實現數據完整性的3種策略
從以上可以看出,在SQL Server數據庫應用系統中,實現數據完整性的方法各有特點。具體到應用系統中,需要根據需要采用其中的壹種或幾種方法來建立數據完整性機制,其策略是:
(1)對於在操作窗口中輸入的數據,壹般采用客戶端應用程序來保證數據的完整性。這樣,壹方面非法數據可以在提交到數據庫之前被拒之門外,另壹方面用戶可以及時得到操作反饋,做出正確的選擇。
(2)對於其他方式傳輸的數據,壹般需要服務器端的數據庫管理系統來實現數據的完整性。
(3)對於數據壹致性的維護,宜采用服務器端數據庫觸發器或表定義約束來實現。這樣可以減少客戶端應用程序的開發量,提高應用系統的運行效率、可維護性和可靠性。
(4)針對系統的數據完整性和安全性要求,有必要采用多層保護屏障來確保數據的完整性和安全性。如:既要在客戶端應用系統程序中檢查輸入數據的有效性,又要在服務器端數據庫中建立表約束、規則、默認值和觸發器等進行數據完整性約束。這可以提高系統數據的可靠性和安全性。
4 結語
數據庫的完整性是數據庫應用系統最基本的要求之壹。在 SQL Server 數據庫應用系統中,可以使用服務器端數據庫表定義約束和數據庫規則、默認值、索引、觸發器以及客戶端應用程序等三種方法來實現數據完整性。它們各有特點,在應用系統中,應根據具體情況靈活使用。
參考文獻
[1]楊正紅.SQL Server 7.0 關系型數據庫系統管理與開發指南.機械工業部出版社,2000。
[2] Microsoft SQL Server 7.0 數據庫系統管理與應用開發。北京人民郵電出版社,1999.
[3] 薛華成。管理信息系統》。清華大學出版社,1995.
[3] 薛華成.