天天看點

《資料庫基礎及實踐技術——SQL Server 2008》一1.1 資料管理的發展

從計算機産生之後,人們就希望用計算機存儲和管理資料。最初用計算機對資料進行管理是以檔案方式進行的,即将資料儲存在使用者定義好的檔案中,然後編寫對資料檔案進行操作的應用程式。這種資料管理方式對使用者的要求比較高,需要有較高的計算機程式設計技能,同時還要具有資料存儲和通路知識,以最大限度地提高資料通路效率。随着資料量的不斷增大,計算機處理能力的不斷增強,人們對資料的要求越來越多,希望達到的目的也越來越複雜,是以用檔案對資料進行管理,通過程式設計的方法來操作檔案中資料的方式已經很難滿足人們對資料的需求,由此産生了資料庫管理系統,也就是用資料庫管理系統來對資料進行維護。綜上所述,使用計算機對資料進行管理經曆了檔案管理和資料庫管理兩個發展階段。

本節介紹檔案管理和資料庫管理在資料管理上的主要差别。

了解當今資料庫特征的最好辦法是了解一下在使用資料庫技術之前資料管理的特點。

早期的資料管理是采用檔案方式進行的,即資料儲存在檔案中,檔案是由作業系統和特定的軟體或程式共同管理的。在檔案管理方式中,資料按其内容、結構和用途分成若幹個命名的檔案。檔案一般為某一使用者或使用者組所有。使用者可以通過作業系統和特定的識别這些檔案格式的軟體對檔案進行打開、讀、寫等操作,也可以通過程式設計語言編寫對檔案進行操作的程式。

假設現在要用某種程式設計語言編寫對學生資訊進行管理的系統(注:程式負責對檔案的打開、關閉以及對其中資料的讀、寫操作,具體對磁盤檔案操作的實作是由作業系統中的檔案管理等部分完成的)。在此系統中,要對學生的基本資訊和選課情況進行管理。在學生基本資訊管理中要用到學生的基本資訊資料,假設此資料儲存在f1檔案中。學生選課情況的管理包括學生的基本資訊、課程的基本資訊和學生的選課資訊。假設用f2和f3兩個檔案分别存儲課程的基本資訊和學生的選課資訊資料,此部分的學生基本資訊資料可以使用f1檔案中的資料。設a1為實作“學生基本資訊管理”功能的應用程式,a2為實作“學生選課管理”功能的應用程式。檔案管理系統示例如圖1-1所示。

假設f1、f2和f3檔案分别包含如下資訊。

f1:學号、姓名、性别、出生日期、所在系、專業、所在班、特長、家庭住址。

f2:課程号、課程名、授課學期、學分、課程性質。

f3:學号、姓名、所在系、專業、課程号、課程名、修課類型、修課時間、考試成績。

《資料庫基礎及實踐技術——SQL Server 2008》一1.1 資料管理的發展

我們将檔案中所包含的每一個子項稱為檔案結構中的字段或列,将每一行資料稱為一條記錄。

“學生選課管理”的處理過程大緻如下:

在學生選課管理中,若有學生選課,需先查f1檔案,判斷有無此學生;若有則通路f2檔案,判斷其所選的課程是否存在;若一切合乎規則,則将學生選課資訊寫到f3檔案中。

這看起來似乎很好,但仔細分析,就會發現直接用檔案管理資料有如下一些缺點。

編寫應用程式不友善

應用程式編寫者必須對所使用的檔案的邏輯及實體結構(檔案中包含多少個字段,每個字段的資料類型,采用何種存儲結構,比如連結清單或數組等)有清楚的了解。作業系統隻提供了打開、關閉、讀、寫等幾個低級的檔案操作指令,而對檔案的查詢、修改等處理都必須在應用程式中程式設計實作。這樣也易造成各應用程式在功能上的重複,例如圖1-1中的“學生基本資訊管理”和“學生選課管理”都要對f1檔案進行操作。

資料備援不可避免

假設應用程式a2需要在f3檔案中包含學生的所有或大部分資訊。例如,除了學号之外,還需要姓名、專業、所在系等資訊,而f1檔案中也包含這些資訊,是以f3檔案和f1檔案中有重複的資訊,由此會造成資料的重複(又稱為資料備援)。

資料備援所帶來的問題不僅僅是存儲空間的浪費,更為嚴重的是會造成資料不一緻(inconsistency)。例如,假設學生所在的專業發生了變化,通常情況下,我們可能隻記得在f1檔案中進行修改,而忘記了在f3檔案中也要進行同樣的修改,由此會造成同一名學生在f1檔案和f3檔案中的“專業”不一樣,也就是資料不一緻。人們不能判定哪個檔案中的資料是正确的,是以也就失去了資料的可信度。

檔案系統中沒有維護資料一緻性的功能,這完全由使用者(應用程式開發者)負責維護。這在簡單的系統中還可以勉強應付,但在複雜的系統中,若要保證資料的一緻性,幾乎是不可能的。

應用程式依賴性

就檔案處理而言,程式依賴于檔案的格式。檔案和記錄的邏輯結構通常是應用程式代碼的一部分,如c語言用struct、visual basic用type來定義使用者的資料結構。檔案結構的每一次修改都将導緻應用程式的修改。而随着應用環境和需求的變化,修改檔案的結構是不可避免的事情。例如,增加一些字段、修改某些字段的長度(如電話号碼從7位擴充到8位)。這些都需要在應用程式中做相應的修改,而(頻繁)修改應用程式是很麻煩的,因為首先要熟悉原有程式,修改後還需要對程式進行測試、安裝等。

所有這些都是由于應用程式對資料檔案的過度依賴造成的,換句話說,檔案系統的資料獨立性(data independence)不好。

不支援對檔案的并發通路

在現代計算機系統中,為了有效地利用計算機資源,一般允許多個應用程式并發執行(尤其是在現在的多任務作業系統環境中)。檔案最初是作為程式的附屬資料出現的,它一般不支援多個應用程式同時對同一個檔案進行通路。我們可以想一下,假設某個使用者打開了一個excel檔案,如果第二個使用者在第一個使用者沒有對此檔案關閉之前,也想打開此檔案,他會得到什麼資訊?他隻能以隻讀的方式打開此檔案,而不能在第一個使用者打開的同時對此檔案進行修改。上述就是檔案系統不支援并發通路的原因。

對于以資料為中心的應用系統來說,支援多個使用者對資料的并發通路是必不可少的功能。

資料間聯系弱

在檔案系統中,檔案與檔案之間是彼此獨立、毫不相幹的,檔案之間的聯系必須通過程式來實作。例如上述的f1檔案和f3檔案,f3檔案中的學号、姓名等學生的基本資訊必須是f1檔案中已經存在的(即選課的學生資訊必須是已經存在的);同樣,f3檔案中的課程号等與課程有關的基本資訊也必須是f2檔案中已經存在的(即學生選的課程也必須是已經存在的)。這些資料之間的聯系是實際需求當中所要求的很自然的聯系,但檔案系統本身不具備自動實作這些聯系的功能,必須依靠應用程式來保證這些聯系,也就是必須通過編寫程式來手工地保證這些聯系。這不但增加了程式編寫的工作量和複雜度,而且當聯系很複雜時,也難以保證其正确性。是以,檔案系統不能反映現實世界事物間的聯系。

難以按不同使用者的願望表示資料

如果使用者需要的資訊來自于多個不同檔案中部分資訊的組合,就需要對多個檔案進行提取、比較、組合和表示。例如,假設有使用者希望得到如下資訊:

(所在班,學号,姓名,課程名,學分,考試成績)

這些資訊涉及了3個檔案:從f1檔案中得到“所在班”資訊,從f2檔案中得到“學分”,從f3檔案中得到“考試成績”;而“學号”、“姓名”可以從f1檔案或f3檔案中得到,“課程名”可以從f2檔案或f3檔案中得到。在生成一行資料(所在班,學号,姓名,課程名,學分,考試成績)時,必須對從3個檔案中讀取的資料進行比較,然後組合成一行有意義的資料。例如,将從f1檔案中讀取的學号與從f3檔案中讀取的學号進行比較,學号相同時,才可以将f1檔案中的“所在班”、f3檔案中的“考試成績”以及目前所對應的學号和姓名組合成一行資料的内容。同樣,在處理完f1檔案和f3檔案的組合後,可以在組合的結果中再與f2檔案中的内容進行比較,找出課程号相同的課程的學分,再與已有的結果組合起來。如果資料量很大,且涉及的表比較多,我們可以想象這個過程有多麼複雜。是以,這種大容量且複雜資訊的查詢,在檔案管理系統中是很難處理的。

無安全控制功能

在檔案管理系統中,很難控制某個人對檔案的操作權,如隻能讀和修改資料而不能删除資料,或者對檔案中的某個或某些字段不能讀或修改等。而在實際生活中,資料的安全性是非常重要且不可缺少的。例如,在學生選課管理中,學生對其考試成績一般隻有檢視權,而教師則有錄入其所授課程的考試成績的權限、教務部門對錄入有誤的成績有修改權等。

随着人們對資料需求的增加以及計算機科學的不斷發展,如何對資料進行有效、科學、正确、友善的管理已成為人們的迫切願望。針對檔案系統的上述缺陷,人們逐漸發展了以統一管理和共享資料為主要特征的資料庫管理系統。

資料庫技術的發展主要源于檔案管理系統在管理資料上的諸多缺陷。對于上述學生基本資訊管理和學生選課管理,如果使用資料庫技術來實作,其實作方式與檔案系統有本質的差別,如圖1-2所示。

《資料庫基礎及實踐技術——SQL Server 2008》一1.1 資料管理的發展

比較圖1-1和圖1-2,可以直覺地發現兩者有如下差别:

使用檔案系統時,應用程式直接通路存儲資料的檔案,而使用資料庫系統時則通過資料庫管理系統(database management system,dbms)通路資料,而且存儲資料的檔案以資料庫的形式展示給客戶,這個變化使得應用程式開發人員不再需要關心資料的實體存儲方式和存儲結構,這些都交給了資料庫管理系統來完成,進而極大地簡化了應用程式設計工作。

在資料庫系統中,資料不再僅僅服務于某個程式或使用者,而是看成一定業務範圍的共享資源,由一個稱做資料庫管理系統的軟體統一管理。

與檔案系統相比,資料庫管理系統實際上是在應用程式和存儲資料的資料庫(在某種意義上也可以把資料庫看成是一些檔案的集合)之間增加了一層—資料庫管理系統。資料庫管理系統實際上是一個系統軟體。正是因為有了這個系統軟體,才使得以前在應用程式中由開發人員程式設計實作的很多煩瑣的操作和功能交給了資料庫管理系統,這樣應用程式不再需要關心資料的存儲方式。而且資料存儲方式的變化也不再影響應用程式,這些變化交給資料庫管理系統來處理,經過資料庫管理系統處理後,應用程式感覺不到這些變化,是以,應用程式也不需要進行任何修改。

與直接用檔案管理資料的局限性進行比較,我們就能體會到使用資料庫技術管理資料所帶來的好處。

将互相關聯的資料內建在一起

在資料庫系統中,所有的資料都存儲在資料庫中,應用程式可通過dbms通路資料庫中的所有資料。

資料備援小

由于資料被統一管理,是以可以從全局着眼,合理地組織資料。例如,将1.1.1節中的f1、f2和f3檔案中的重複資料,可以形成如下所示的幾部分資訊。

學生基本資訊:學号、姓名、性别、出生日期、所在系、專業、所在班、特長、家庭住址。

課程基本資訊:課程号、課程名、授課學期、學分、課程性質。

學生選課資訊:學号、課程号、修課類型、修課時間、考試成績。

在關系資料庫(關系資料庫的概念在本章後續部分介紹)中,可以将每一種資訊存儲在一個表中,重複的資訊隻存儲一份,當在學生選課中需要學生的名字時,根據學生選課資訊中的學号,可以很容易地在學生基本資訊中找到此學号對應的名字。是以,消除資料的重複存儲并不影響對資訊的提取,同時還可以避免由于資料重複存儲而造成的資料不一緻問題。例如,當某個學生所學的專業發生變化時,我們隻需在“學生基本資訊”一個地方進行修改即可。

同1.1.1節中的問題一樣,當檢索(所在班,學号,姓名,課程名,學分,考試成績)資訊時,這些資訊需要從3個地方(關系資料庫為3張表)得到,也需要對資訊進行适當的組合,即學生選課中的學号隻能與學生基本資訊中學号相同的資訊組合在一起,同樣,學生選課中的課程号也必須與課程基本資訊中課程号相同的資訊組合在一起。在以前的檔案管理系統中,這個工作是由開發者程式設計實作的,而現在有了資料庫管理系統,這些煩瑣的工作完全交給了資料庫管理系統來完成。

程式與資料互相獨立

在用資料庫技術管理資料的方式中,所有的資料以及資料的存儲格式都與資料一起存儲在資料庫中,它們通過dbms而不是應用程式來通路和管理,應用程式不再需要處理資料檔案的存儲結構。

程式與資料互相獨立有兩個方面的含義,一方面是指當資料的存儲方式發生變化(這裡包括邏輯存儲方式和實體存儲方式)時,比如從連結清單結構改為哈希結構,或者是順序和非順序之間的轉換,應用程式不必做任何修改;另一方面是指當資料的邏輯結構發生變化時,比如增加或減少了一些資料項,如果應用程式與這些修改的資料項無關,則應用程式也不用修改。這些變化都由dbms負責維護。大多數情況下,應用程式并不需要知道資料存儲方式或資料項已經發生了變化。

保證資料的安全和可靠

資料庫技術能夠保證資料庫中的資料是安全的、可靠的。資料庫中有一套安全控制機制,可以有效地防止資料庫中的資料被非法使用或非法修改;同時它還有一套完整的備份和恢複機制,以保證當資料遭到破壞(由軟體或硬體故障引起的)時,能夠很快将資料庫恢複到正确的狀态,并使資料不丢失或隻有很少的丢失,進而保證系統能夠連續、可靠地運作。

最大限度地保證資料的正确性

保證資料的正确性是指存放到資料庫中的資料必須符合現實世界的實際情況,比如人的性别隻能是“男”或“女”,人的年齡應該在0~150歲之間(假設沒有年齡超過150歲的人),如果我們在性别中輸入了其他的值,或者将一個負數輸入到年齡中,在現實世界中顯然是不對的。資料庫系統能夠保證進入到資料庫中的資料都是正确的資料。保證資料正确性的特征也稱為資料完整性。資料完整性是通過在資料庫中建立限制來實作的。當使用者建立好保證資料正确的限制之後,如果有不符合限制條件的資料進入到資料庫中,資料庫管理系統能主動拒絕這些資料。

資料可以共享并能保證資料的一緻性

資料庫中的資料可以被多個使用者共享,共享是指允許多個使用者同時操作相同的資料。當然,這個特點是針對大型多使用者資料庫系統而言的,對于單使用者系統,在任何時候最多隻有一個使用者通路資料庫,是以不存在共享的問題。

多使用者問題是資料庫管理系統内部解決的問題,它對使用者是不可見的。這就要求資料庫能夠對多個使用者進行協調,保證多個使用者之間對資料的操作不發生沖突和沖突,即在多個使用者同時使用資料庫時,能夠保證資料的一緻性和正确性。可以想象一下火車訂票系統,如果多個訂票點同時對一列火車進行訂票操作,那麼必須要保證不同訂票點訂出票的座位不能相同。

資料庫技術發展到今天已經是一門比較成熟的技術,經過上面的讨論,可以發現資料庫具備如下特征:資料庫是互相關聯的資料的集合,它用綜合的方法組織資料,具有較小的資料備援,可供多個使用者共享,具有較高的資料獨立性,具有安全控制機制,能夠保證資料的安全、可靠,允許并發地使用資料庫,能有效、及時地處理資料,并能保證資料的一緻性和完整性。

需要再次強調的是,所有這些特征并不是資料庫中的資料固有的,而是靠資料庫管理系統提供和保證的。