顧恩碩+劉海粟+白雪
摘 要:關(guān)系數(shù)據(jù)庫,是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,是借助于在數(shù)學概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。在現(xiàn)實世界中,各種實體以及他們之間的各種聯(lián)系均用關(guān)系模型來表示。關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束三部分組成,集中表現(xiàn)在數(shù)據(jù)的模型發(fā)展上。從最初的層次結(jié)構(gòu)、網(wǎng)狀模型結(jié)構(gòu)發(fā)展到今天的關(guān)系數(shù)據(jù)庫模型,數(shù)據(jù)庫發(fā)生了飛速的變化,在變化的過程中,關(guān)系模型的出現(xiàn),是數(shù)據(jù)庫在發(fā)展路程中的一座重要的里程碑,關(guān)系理論研究和關(guān)系型數(shù)據(jù)庫管理系統(tǒng)研究的成功,進一步促進了關(guān)系數(shù)據(jù)庫的發(fā)展。使得關(guān)系型數(shù)據(jù)模型成為具有統(tǒng)治地位的數(shù)據(jù)模型。
關(guān)鍵詞:數(shù)據(jù)庫;關(guān)系模型;關(guān)系數(shù)據(jù)庫
通俗地說,關(guān)系型數(shù)據(jù)庫就是采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫。簡單來說,關(guān)系模型就是一個類似于二維表格的模型,而關(guān)系型數(shù)據(jù)庫就是由二維表格及其中含有的數(shù)據(jù)所組成的一個數(shù)據(jù)組織。在關(guān)系數(shù)據(jù)庫中,有些名詞需要我們了解:
關(guān)系:通俗地說,在一張二維表格中,每個關(guān)系都具有一個關(guān)系名,就是通常說的表名table。
屬性:在二維表格中也就是類似于excel表格中的一列,在數(shù)據(jù)庫中被稱為字段。
域:屬性的取值范圍,也就是數(shù)據(jù)庫中某一字段的屬性限制條件。
關(guān)鍵字:一組可以唯一標識元組的屬性。數(shù)據(jù)庫中常稱為主鍵,由一個或多個列組成。
關(guān)系模式:指對關(guān)系的描述,其格式為:關(guān)系名(屬性1,屬性2,…,屬性N)。也就是數(shù)據(jù)庫中的表結(jié)構(gòu)。
隨著數(shù)據(jù)庫應(yīng)用領(lǐng)域的擴展以及數(shù)據(jù)對象的多樣化,傳統(tǒng)的關(guān)系數(shù)據(jù)模型暴露出了許多問題,如對復(fù)雜對象的表述能力差,表達能力較弱。為此,人們提出了許多新的數(shù)據(jù)模型,下面筆者向大家介紹一下以前的數(shù)據(jù)庫的主要特點:數(shù)據(jù)不保存、系統(tǒng)沒有專用的軟件對數(shù)據(jù)進行管理、數(shù)據(jù)不共享、數(shù)據(jù)不具有獨立性。
在文件系統(tǒng)層面上,數(shù)據(jù)可以以文件的形式進行長期保存,數(shù)據(jù)交由文件系統(tǒng)管理數(shù),獨立的機制使得程序與數(shù)據(jù)之間具有一定的獨立性但在這個結(jié)構(gòu)中,數(shù)據(jù)的獨立性、共享性差,冗余度大、易造成數(shù)據(jù)傳輸之間的不一致性。
在數(shù)據(jù)庫系統(tǒng)層面上,數(shù)據(jù)可以結(jié)構(gòu)化,數(shù)據(jù)之間的共享性提高,冗余度小,一個用戶可以擁有多個數(shù)據(jù)庫,因此數(shù)據(jù)獨立性高,數(shù)據(jù)控制功能也變得統(tǒng)一起來。其中大可分為4類:
第一類,數(shù)據(jù)安全性控制;第二類,數(shù)據(jù)完整性控制;第三類,數(shù)據(jù)的并發(fā)控制;第四類,數(shù)據(jù)管理與恢復(fù)。
數(shù)據(jù)結(jié)構(gòu)化,在數(shù)據(jù)庫系統(tǒng)中,將數(shù)據(jù)按照一定的數(shù)據(jù)模型插入到一個結(jié)構(gòu)化的數(shù)據(jù)庫中,需要考慮此數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),還需要考慮連接數(shù)據(jù)后的數(shù)據(jù)結(jié)構(gòu),而在以前的數(shù)據(jù)庫中,這些,是我們看不到的。下面,筆者將就幾個方面對其進行分析:
非關(guān)系型數(shù)據(jù)庫的實質(zhì):非關(guān)系型數(shù)據(jù)庫產(chǎn)品是傳統(tǒng)關(guān)系型數(shù)據(jù)庫的縮略版本,通過減少功能,來大幅度提升產(chǎn)品性能,類似于我們平時游戲中的資料篇。
目前市場上流通的大部分主流的非關(guān)系型數(shù)據(jù)庫基本上都是免費的。而大公司中,名氣大的關(guān)系型數(shù)據(jù)庫開發(fā)軟件,比如Oracle、DB2是收費的。這在很大程度上限制了一些平民用戶的使用。但是在實際開發(fā)中,有很多小型的業(yè)務(wù)需求,并不需要完整的關(guān)系型數(shù)據(jù)庫進行組建,非關(guān)系型數(shù)據(jù)庫的功能就足夠了。這種情況下,使用性能高、成本低的非關(guān)系型數(shù)據(jù)庫當然是我們的首選。在性能上NOSQL是基于鍵值對的,可以理解成類似于Java中和HashMap中的鍵值對,數(shù)據(jù)表中的主鍵和值也具有相同對應(yīng)關(guān)系,但在使用過程中是不需要經(jīng)過SQL層的解析,所以性能非常高是它的主要優(yōu)點。同樣,它也具有良好的可擴展性,這也是基于鍵值對,數(shù)據(jù)之間存在相當?shù)偷鸟詈隙龋栽谑褂玫臅r候非常容易擴展。
在SQL語言中,關(guān)系型數(shù)據(jù)庫對其也具有獨特的解讀優(yōu)勢:在復(fù)雜查詢語句中,可以用SQL語句根據(jù)表連接、嵌套、子句等方法方便地在一個表或多個表之間做復(fù)雜的數(shù)據(jù)查詢,且代碼的冗余性很低,這也使得數(shù)據(jù)庫對于安全性能要求很高的數(shù)據(jù)得以訪問,對于非關(guān)系型數(shù)據(jù)庫,就沒有這些優(yōu)點。
但是近年來的發(fā)展中,兩種數(shù)據(jù)庫類型都在不同的需求市場中發(fā)展著,雖然有所交集,但是這并不影響數(shù)據(jù)庫的進化方向。比如,NOSQL數(shù)據(jù)庫自從2008年的更新版本以后,慢慢開始具備SQL數(shù)據(jù)庫的一些復(fù)雜查詢功能,并隨著服務(wù)端的更新,這方面的功能日益完善,而SQL數(shù)據(jù)庫也在慢慢地進化著,在數(shù)據(jù)庫平臺上HandlerSocker技術(shù)的出現(xiàn),可以在MYSQL上實現(xiàn)對于數(shù)據(jù)庫SQL層的穿透,在非NOSQL數(shù)據(jù)庫上使用NOSQL的方式訪問數(shù)據(jù)庫,可以實現(xiàn)無中心化的集群等特點,更是向我們說明了數(shù)據(jù)庫在這些年間的變化。
對于研究數(shù)據(jù)庫的人來說,或許關(guān)系型數(shù)據(jù)庫只是數(shù)據(jù)庫眾多實現(xiàn)中的一個特例模型,在數(shù)據(jù)庫中,類型的劃分具有嚴格的限制??茖W家們用嚴格的數(shù)學公式和邏輯形式定義了數(shù)據(jù)關(guān)系以及其中的各種運算,雖然這兩極都因為各自的弱勢而開始進化出另一極的一些特性,但是這些特性的增加也會導致數(shù)據(jù)庫失去一些原本具備的優(yōu)勢,所以怎樣構(gòu)建和使用數(shù)據(jù)庫的系統(tǒng)模型,是數(shù)據(jù)結(jié)構(gòu)的框架構(gòu)造工程師需要考慮的問題。
參考文獻:
[1] 王珊.數(shù)據(jù)庫與信息系統(tǒng)[M].北京:高等教育出版社,2005.
[2] 劉唯一,田雯.數(shù)據(jù)模型,數(shù)據(jù)庫技術(shù)之一[M].北京.科學出版社,2001.
[3] 李紹原.數(shù)據(jù)庫技術(shù)新進展[M].北京:清華大學出版社,1997.