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