【摘要】數據庫作為一個共享資源,數據庫中提供的信息必須準確有效,為了防止出現不符合語義的數據,防止錯誤信息的輸入和不一致的數據,數據庫管理系統必須提供一定的機制來保證數據的完整性。作為一個功能強大的數據庫管理系統,SQL Server提供了多種完整性規則來保證數據的完整性。
【關鍵詞】SQL Server;數據完整性;數據庫系統;約束
數據的完整性是指數據庫中數據的正確性、有效性和一致性。正確性是指數據的合法性;有效性是指數據是否在定義的有效范圍;一致性是指表示同一個事實的兩個數據應相同。數據庫管理系統要提供必要的功能,保證數據庫中存儲的數據在更新過程中始終與客觀世界實際的信息狀態保持一致。數據完整性包括:實體完整性,它是指主鍵的值不能為空或部分為空,如果主鍵為空或部分為空,則失去了主鍵的惟一標識性。參照完整性是指一個表的外部鍵必須在另一個表中找到或者為空。參照完整性反映了事物之間的相互聯系。用戶自定義完整性是針對具體應用環境數據必須滿足的語義要求。
1.數據完整性的界定
SQL Server 2003是一種比較復雜的數據庫,主要靠內部的映射關系的一種數據庫,這種數據庫的服務一般來說是對于復制、集成、分析、通知以及報表等相關服務的融合,此外,Visual Studio.NET等第三方開發工具的有效結合。因此,本系統使將用SQL Server 2003數據庫。
首先,.NET Framework 與SQL Server 2003有機結合的過程中,SQL Server利用.NET平臺特有的公用語言運行時(CLR-Common Language Runtime)的特性來生成數據庫的相關對象,在數據庫管理系統中充分利用.NET代碼的功能。
其次,借助SQL Server 2003,可以為網頁服務開發提供便利,這樣,SQL Server使用的是 HTTP技術,對于以Web服務為中心的應用程序的數據訪問得以更新。
最后,SQL Server 2003還新增了T-SQL事務語句,從而實現了可伸縮性數據庫應用的開發語言功能的拓展。
數據庫設計是針對應用需求和環境,建立合理的數據庫模式和存儲結構,保證數據的高效存取,并滿足應用的任務處理要求。
數據庫設計過程分為4個階段:需求分析、概念設計、邏輯設計、物理設計。需求分析包括數據分析和功能分析。確定用戶要達到的目標,從這些目標中獲得數據庫的要求,并整理成說明書,包括數據流程圖、約束條件、技術指標等信息。概念設計產生反映企業組織信息需求的數據庫概念結構,概念設計的主要方法是采用E-R方法和數據字典。邏輯設計是從概念模型導出特定的數據庫邏輯模式,在功能、性能、完整性和一致性約束及數據庫可擴展性等方面均應滿足用戶提出的要求。邏輯設計中,將E-R圖轉換為關系模型。物理設計是從滿足用戶需求的、已確定邏輯數據庫結構轉換出一個有效的、可實現的物理數據庫結構的過程。最終生成一個物理設計說明書,在實現數據庫時根據說明書進行操作。
1.1規范化
第一范式(1NF):數據表中每一個數據項均不能拆分成兩個或兩個以上的數據項。
第二范式(2NF):數據表滿足第一范式,并且數據表中任何一個非主鍵字段的數值都依賴于主鍵。
第三范式(3NF):數據表滿足第二范式,并且數據表中任何兩個非主鍵字段的數值之間不存在函數依賴。
1.2數據完整性
(1)實體完整性:設置主鍵、唯一鍵、唯一索引、標識列等方法實現。
(2)域完整性:設置默認值、檢查、外鍵、數據類型、規則等方法實現。
(3)參照完整性:設置外鍵、檢查、觸發器、存儲過程等方法實現。
(4)用戶定義完整性:設置規則、觸發器、存儲過程、約束等實現。
2.實現數據完整性的實現
2.1數據庫的連接
數據庫連接:(ADO通過OLEDB實現對不同數據源的訪問)
(1)初始化COM庫:在CMannagementApp::InitInstance中調用:CoInitialize(NULL)
(2)初始化數據庫:在CManagementDlg的構造函數中實現:
CSting strConnection=\"driver={SQL Server};
Server=127.0.0.1; DATABASE=QUEStoneDB; UID=sa;PWD=123;\";
pDB=new CADODatabase;
pDB->Open(strConnection);
(3)使用創建記錄集:pRs=new CADORecordest(pDB0;
(4)操作完成后關閉并釋放記錄集指針:
if(pRs pRs->IsOpen())
pRs->Close();
if(pRs)
delete(pRs);
(5)退出系統時釋放數據庫指針
在CManagementDlg的析構函數中實現
if(pRs pRs->IsOpen())
pRs->Close();
if(pRs)
delete(pRs);
(6)退出系統時清除COM庫:
在CManagementApp::ExitInstance中調用::CoUninitialize();
2.2 ADO.NET 中SQL Server xsgl數據庫建立連接的代碼
String cnStr= \"Password=sa;Persist Security Info=True; User ID=sa;\"+\"Initial Catalog=xsgl; Data Source=B402\";//服務器名稱
SqlConnection cn=new SqlConnection();
cn.ConnectionString=cnStr;
cn.open();
ConnectionString屬性是Connection對象最重要的一個屬性,他用來指定與數據庫建立連接時使用的連接串,連接串包涵有源數據庫的名稱和建立初始連接所需的其他參數,例如用戶名和密碼這些信息。
2.3使用ASP.net /c#連接access和sql server數據庫
using system.data.oledb;引用命名空間,string strconnection=\"procider=microsoft.jet.oledb.4.0;\";數據庫提供者。
strconnection+=@\"data source=c:\begaspnet\northwind.mdb\";數據源標準形式data source=mydrive:mypath\myfile.mdb@防止后面的\解析為轉義字符oledbconnection objconnection=new oledbconnection(strconnection);利用定義好的字符串建立連接對象方便后面使用strconnection 是存放連接數據庫中使用的 提供者和數據源兩個變量如果連接的數據庫文件和當前文件在同一個目錄下strconnection+=\"data source=”;\+=mappath(\"northwind.mdb\")。
2.4 sql server 連接
String strconnectiong=\"user id=;pwd=;\";
strconnection+=\"initial catalog=northwind;server=yoursqlserver;\";
strconnection+=\"connect timeout=30\";
sqlconnection objconnection=new sqlconnection(strconnection);
2.5 C#訪問數據庫的幾種函數和參數
(1)Provider,指定要連接的數據源種類。如果使用的是SQL Server DataProvider,則不需要指定Provider參數,因為SQL Server DataProvider已經指定了所要連接的數據源是SQL Server服務器。如果使用的是OleDB Data Provider 或者其他的連接數據源,則不需指定Provider參數對應關系 : SQLOLEDB對應于Microsoft OLEDB Provider for SQL Server,
MSDASQL對應于Microsoft OLEDB Provider for ODBC
Microsoft.Jet.OLEDB.4.0對應于Microsoft OLEDB Provider for Access
MSDAORA對應于Microsoft OLEDB Provider for Oracle
(2)Server,指定需要連接的數據庫服務器(或者數據域)。比如Server=(local),指定連接的數據庫服務器是在本地。如果本地的數據庫還定義了實例名,Server參數可以寫成Server=(local)\實例名。另外,可以使用計算機名作為服務器的值。如果連接的是遠程的服務器,Server參數可以寫成Server=IP或者\"Server=遠程計算機名\"的形式 Server參數也可以寫成Data Source,比如Data Source=IP。
\"server=(local);Initial Catalog=student;user Id=sa;password=;\"=\"Data Source=(localhost);Initial Catalog=student;user Id=sa;password=;\"
(3)DataBase:
DataBase參數用來指定連接的數據庫名。比如DataBase=Master,說明連接的數據庫是Master,DataBase參數也可以寫成Initial Catalog,如 Initial Catalog=Master。
(4)Uid參數和Pwd參數:
指定登錄數據庫的用戶名和密碼。
(5)Connect Timeout參數:
指定打開數據庫時最大的等待時間,單位是秒。如果不設置此參數,默認是15秒。如果設置-1表示無限期等待,一般不推薦使用。
(6)Intergrated Security參數:
用來說明登錄到數據源時是否使用SQL Server的集成安全驗證。如果該參數的取值是True(或者SSPI,或者YES),表示使用Windows驗證模式,即不需要通過Uid和Pwd這樣的方式登錄。如果取值是False或者No,表示登錄時使用Uid和Pwd方式登錄。一般來說,使用集成安全驗證的登錄方式比較安全,因為這種方式不會暴露用戶名和密碼。安裝SQL Server時,如果選中”Windows身份驗證模式“單選按鈕則應該使用如下的連接字符串:Data Source=(local);Init Catalog=student;Integrated Security=SSPI。
(7)Pooling、MaxPool Size和Min Pool Size參數:
Pooling參數用來說明在連接到數據源時,是否使用連接池,默認是True。當改值為True時,系統從適當的池中提取SQLConnection對象,或者需要時創建該對象并將其添加進去。當Fasle時,不適用連接池。
當應用程序連接到數據源或者創建連接對象時,系統不僅要開銷一定的通信和內存資源,還必須完成諸如建立物理通道(例如套接字或命名管道),與服務器進行初次握手,分析連接字符串信息,由服務器對連接進行身份驗證,運行檢查以便在當前事務中登記等任務,因此往往成為最為耗時的操作。
實際上,大多數應用程序使用一個或幾個不同的連接配置。這意味著在執行應用程序期間,許多相同的連接將反復地打開和關閉。為了使打開的連接成本最低,ADO.NET使用稱為Pooling的優化方法。
在連接池中們為了提高數據庫的連接效率,根據實際情況,預先存放了若干數據庫連接對象,這些對象即使在用完后也不會被釋放。應用程序不是向數據源申請連接對象,而是向連接池盛情數據庫的連接對象。另外,連接池中的連接對象數量必須同實際需求相符,空置和滿載都對數據庫的連接效率不利。
Max Pool Size和Min Pool Size這兩個參數分別表示連接池中最大和最小連接數量,默認分別是100和0。根據實際應用適當地取值將提高數據庫的連接效率。
3.結束語
數據的完整性是數據庫應用系統最基本的要求之一,在SQL Server數據庫應用系統中可采用在服務器端數據表上定義完整性約束,創建數據表的完整性規則、默認和觸發器,或者通過客戶端應用程序控制等三種方式來進行數據的完整性保護。在開發應用系統中,應根據各種完整性約束的優點并將它們結合起來使用,充分發揮SQL Server提供的數據完整性的效能,在確保數據準確性和一致性方面減少對用戶的依賴性,從而大大提高系統的可靠性。
【參考文獻】
[1]楊正洪.SQL Server7.0關系數據庫系統管理與開發指南.機械工業部出版社,2000.
[2]薛華成.管理信息系統.清華大學出版社,1995.
[3]薩師煊,王珊.數據庫系統概論(第三版)[M].北京:高等教育出版社.2002.
[4]羅遠模,王珊.SQL Server數據庫系統基礎[M].北京:高等教育出版社,2002.