五、關系數據庫 1.表格
表格(或簡稱表)表示了用戶的特定類型(Type)的一些實體。表頭由一些屬性名(Attribute Name)組成,每個屬性名對應于一列。在表上屬性名必須唯一,不允許重名。表體是由一些行或元組(tuple)、或記錄(record)組成。一個元組對應于傳統的文件結構中的一個記錄,一個記錄含有若干個域(field)用以存儲屬性值(Attribute value)。一個元組對應于一個“用戶”實體的出現(occurrence)。表體中每一行和某一列的交叉點(相當于記錄中的域)上保存一個屬性值。這個屬性值叫做這一行(或這個實體出現)的相應屬性值。表體中每一列可以保存的值對應于某種屬性類型(Type of Attribute),也就是說,這一列的屬性值只能取這個屬性類型的值。某個屬性所能取的所有值的集合叫做這個屬性的值域(Domain of Attribute)。類型和值域的對應關系是一對多的。一個類型有一個值域,但一個值域可以作為多個類型,基名稱不同,但實質上值域一樣。實際上,類型是對值域的命名。
能唯一標識一個元組的屬性稱之為關鍵屬性(Primary Key Attribute)或簡稱為主關鍵字(Primary Key)。主關鍵字有時是由多個屬性組成的,此時的主關鍵字叫做組合關鍵字(Conˉcatenated primary Key)。
有的時候,表中必須由一些組合的主關鍵字才能唯一地標識一個元組,也就是說,不存在能作關鍵字的一個屬性。這時為了方便,往往引入一個附加的屬性并稱之為外來關鍵字(Foreigh Key)來作主關鍵字。外來關鍵字為以后檢索和查詢帶來了方便,但也增加了信息冗余。
2.表名、表頭和表體
表名、表頭和表體在關系模型中具有不同的作用或功能,因而也具有完全不同的性質。表頭是一個屬性的集合,它規定了表的結構。表體是一個特殊的集體,稱作為關系(relation)。“關系模型”中的“關系”一詞就是指表體中的這個數學關系。
在關系數據庫中,表名對應于數據庫名(或關系名),表頭對應于數據描述(或結構描述),表體對應于數據庫。表體是數據庫的內容及數據庫操作的對象。
另外,有兩個概念必須加以強調:型(type)和值或出現(occurence)。表頭定義了實體(或元組)的型,也就是說規定了實體(或元組)的值域。而表體則給出了實體(或元組)的出現。出現是型中的一個值。
3.關系的數學定義
關系模型是建立在集合論(Set Theory)的基礎之上的。現在,開始用集合論的術語來嚴格地定義數學上的關系,即給出關系的數學定義。定義1 域(Domain)是值(Value)的集合。
例如:整數、實數、{0,1,2,3}、{真,假}等等都可以是域。對于是什么值根本沒有限定,值可以有結構。例如{(北京,010),(哈爾濱,0451)}是一個域,其值為(北京,010)和(哈爾濱,0451),其值是有結構的。但值應是可區分的。在域中相同的值被視為是同一個值。故此{0,1,1}和{0,1}這兩域是等同的。
域若是一個有限集,其元素的個數叫做域的基數(Cardinal Number)。例如{1,2,3}的基數為3,{1,2,1,1,1}的基數為2。
定義2 給定一組域D 1 ,D2 ,…,Dn ,這些域中有些域可以是相同的。D1 ,D2 ,…,D n 的笛卡爾乘積(Cartesian Product)為D1 ×D2 ×…×Dn ={(d1 ,d2 ,…,dn ) di ∈Di ,i=1,2,…,n},其中每一個元素(d1 ,d2 ,…,d n )叫做一個n元組(n-tuple),或簡為元組,元組(d 1 ,d 2 ,…,dn )中的值d i 叫做該元組的第i個分量(component)。
定義3 D 1 ×D 2 ×…×D n 的子集叫作域D1 ,D2 ,…,D n 上的關系(Relation),用R(D1 ,D2 ,…,Dn )表示,這里R表示關系的名字,n是關系的度(或元數,Degree)。
一個n元關系R(D1 ,D2 ,…,Dn )很容易地表示為一張表。表名為R,屬性為D 1 ,D2 ,…,Dn 作為表頭,R中的元素,即D1 ×D2 ×…×Dn 的子集作為表體。例如,D1 ={A,B,C},D2 ={1,2},D3 ={True,False},R(D1 ,D2 ,D3 )={(A,1,Ture),(A,2,False),(B,1,True),(c,2,True)}可表示為表格。
對于關系R(D 1 ,D 2 ,…,D n ),
當n=1時,稱之為一元關系(Unary relation),n=2時,稱之為二元關系(Binary relation)。
關系是笛卡爾乘積的子集。但這只是關系的數學定義。在實際中,一般說來只有取某一子集才有一定的意義。
在關系數據庫中,要求關系的每個分量是不可分的數據項,并把這樣的關系稱為規范化的關系(或規范關系),簡稱為范式(Normal Form)。總之,數據庫的關系具有以下性質:
(1)列是同質的(Homogeneous),即每一列中的分量均是同一類型的數據,即均來自同一個域。
(2)不同的列可以出自同一個域,每一列稱為一個屬性,要給予不同的列不同的屬性名。
(3)列的順序是無所謂的,即列的次序可以變換。但順序一旦固定,就不再變化,不能導致沖突發生。
(4)任意兩個元組不能完全相同。
(5)行的順序是無所謂的,即行的次序可以交換。
(6)每一分量必須是不可分的數據項。
4.關系模型
關系模型由三部分組成:數據結構(即關系)、關系操作、關系的完整性。下面將對這三個部分進行分別的討論。
(1)單一的數據結構———關系 在關系模型中,無論是實體還是實體之間的聯系均由單一的類型結構—關系來表示。在前面,已給出了關系和域的數學定義,介紹了n元關系、元組和屬性等概念。下面介紹關鍵字、關系模式和關系數據庫等一些基本概念。
關鍵字 關系中的某一組屬性,若其值可以唯一地標識一個元組,則稱該屬性組為一個候選關鍵字(Candidate Key)。
若一個關系有多個候選關鍵字,則可以任選其中一個作為主關鍵字(Primary Key)。主關鍵字中的諸屬性被稱為主屬性。
關系模式 關系的描述稱為關系模式。它包括:關系名、組成關系的諸屬性名、屬性到域的映象、屬性間的數據依賴關系等等。所以,關系模式由關系名、諸屬性名和屬性到域的映象三個部分組成,關系模式通常簡記為R(A 1 ,A 2 ,…,A n ),其中R是關系名,A 1 ,A 2 ,…,A n 為諸屬性名。屬性到域的映象一般通過指定屬性的類型和長度來說明。
某個關系模式在某一時刻所具有的狀態是指關系的外延,即元組的集合。關系的外延內容有時簡稱為關系。但關系模式和關系的內容有時也統稱為關系。讀者可以從上下文中區別其確切的含義。形象地說,關系模式是關于表名和表頭的描述,而關系的內容是表體。
關系數據庫 在關系數據庫中,要分清型和值兩個基本概念。關系數據庫的型是指數據庫的結構描述,它包括關系數據庫名、若干屬性的定義,以及這些屬性上的若干關系關系模式。亦稱為數據庫的內涵(Intension),數據庫的值亦稱為數據庫的外延。在關系數據庫中,內涵是比較穩定的,它規定了外延的取值范圍。而外延卻是隨時間變化的。這和在一般的形式邏輯中外延和內涵一一對應有所區別。此處外延是指任意一個滿足內涵的集合,而不一定恒指滿足內涵的最大的一個集合。
關系模式(即內涵)是穩定的;而關系的內容,即外延,卻是隨時間動態的變化而變化的。數據庫的結構(即模式)是穩定的;而數據庫中的數據內容卻在不斷地更新。
(2)關系操作 關系模型規定了關系操作的功能和特點,但不對DBMS語言的語法做出具體的規定。關系數據庫語言的主要特點(或優點)是其高度的非過程化(Non-procedureae)或者說明性(declarative)。關系數據庫語言的語句是透明的。用戶只須知道語句做什么,而不須知道怎么做的。
Codd在其早期的文章中,引入了8種基本的操作:并(Union)交(Intersection)差(Difference)
笛卡爾乘積(Cartesian Product)限制(Restrictions)投影(Projection)連接(Join)除(Division)
這些操作都是對關系的內容或表體實施操作的,得到的結果仍為關系。注意,這些操作只是基本的操作,而不是不再可分的原始(Primitive)操作,例如,Join,Intersection和Division可以由其它五種操作合成。但是,把它們三個也作為基本操作使用起來很方便。
另外,Codd并沒說上述8種操作就是關系數據庫只能有的8種操作。實際上,上述8種操作僅僅是作為最小的DML操作的基礎部分,并且也還未考慮到DDL的需求。SQL支持的操作多于上述8種DML操作,而且SQL還支持DDL操作。
關系操作的特點是集合操作,即操作的對象和結果都是集合。這種操作方式也稱為一次一集合(set-at-a-time)方式。而非關系模型的數據庫的操作方式則為一次一記錄(record-at-a-time)方式。
關系操作可以用兩種方式來表示:①代數方式,即關系代數②邏輯方式,即關系演算
而關系演算又進一步分為元組關系演算和域關系演算。已經證明,這些表示方式在功能上是相互等價的。一般選其一即可。
(3)關系模型的三類完整性 關系模型的三類完整性是:
①實體完整性(Entity Integrity)
②參照完整性(Referential Integrity)
③用戶定義的完整性(User Defined Integrity)
其中,實體完整性和參照完整性是任何關系模型都必須滿足的完整性約束條件,應該由關系數據庫DBMS自動支持。而用戶定義的完整性的支持是由DBMS提供完整性定義設施(或機制),可以隨DBMS商品軟件不同而有所變化。
實體完整性是指:若屬性A是基本關系R的主關鍵字的屬性(即主屬性),則屬性A不能取空值(NULL)。
在關系數據庫中有各種關系,如基本關系(常稱為基本表)、查詢表、視圖表等等。基本表是指實際存在的表,它是實際存儲數據的邏輯表示。查詢表是指和查詢結果相對應的表。而視圖表是由基本表或視圖表導出的表,是虛表,不對應實際存儲的數據。實體完整性是針對基本關系的。空值是指“不知道”或者“無意義的”或“不屬于定義域”值。空值以“NULL”表示。對于實體完整性作如下說明:
(1)一個基本關系通常對應于現實世界中的一個實體集。例如學生關系對應于學生實體集。基本關系不是由其它關系生成的關系。基本關系是本原(Primitive),是定義復雜關系的出發點。
(2)現實世界中的實體是可區分的,即實體具有某種唯一性的標識。
(3)在關系模型中由主關鍵字作為滿足唯一性的標識。
(4)主關鍵字中屬性不能取空值。因為若主關鍵字中某屬性取空值,則意味著某個實體不可標識,而這和(2)相矛盾。
參照完整性是指:若基本關系R中含有另一個基本關系S的主關鍵字K S 所對應的屬性組F(F稱為R的外部關鍵字(external keys)),則在關系R中的每個元組中的F上的值必須滿足:①或者取空值(即F中的每個屬性的值均為空值);②或等于S中某個元組的主關鍵字的值。基本關系R和S不一定是不同的關系。外部關鍵字也稱為外來關鍵字。
例如,某數據庫中有職工關系EMP(職工號,姓名,部門號)和部門關系DEPT(部門號,部門名稱)為兩個基本關系。
關系EMP的主關鍵字為“職工號”,DEPT的主關鍵字為“部門號”在EMP中,“部門號”是EMP的外部關鍵字。故此,在EMP中的每個元組中“部門號”的值只有兩種可能性:①取空值。這說明這個職工尚未分到某個部門;②或取非空值。這時“部門號”的值必須是DEPT中某個元組中的“部門號”的值。這說明一個職工不可能被分配到一個不存在的部門。也就是說,被參照的關系DEPT中一定存在一個元組,該元組的關鍵字的值等于EMP中某元組的外部關鍵字的值。實體完整性和參照完整性是針對任何關系數據庫系統的所有數據庫的一般性原則。
用戶定義的完整性針對某一具體的數據庫的約束條件。條件是由現實世界中的應用環境決定的。它涉及到某一具體的應用中的數據所必須滿足的語義要求。關型模型的DBMS應提供定義和檢驗這類完整性條件的機制,以使用統一的方法來自動地處理它們而不要求應用程序員來承擔這一功能。
5.關系數據庫語言概述
關系數據庫語言分三類:數據描述語言DDL、數據操縱語言DML和數據控制語言DCL。其中,DDL負責數據庫的描述,提供一種數據描述機制,用來描述數據庫的特征或數據的邏輯結構。DML負責數據庫的操作,提供一種處理數據庫操作的機制。DCL負責控制數據庫的完整性和安全性,提供一種檢驗完整性和保證安全的機制。
DML是用戶經常使用的語言,包括了DBMS的主要功能。DML包括數據查詢和數據的增、刪、改等功能。其中查詢的表達方式是DML的主要部分。關系數據庫的DML按照查詢方式可以分為兩大類:
(1)用對關系的集合代數運算來表示查詢的方式,稱為關系代數(Relational Algebra)。
(2)用謂詞演算來表達查詢的方式,稱為關系演算(Relational Calculus)。關系演算又可按謂詞變元的基本對象是元組變量(tuple variable)還是域變量(domain variable)分為元組關系演算和域關系演算兩種。
關系代數和兩種關系演算均是抽象的查詢語言,這些抽象的查詢語言和實際的DBMS軟件產品中實現的具體的查詢語言并不完全一樣。但它們是DBMS中查詢語言的理論基礎。
關系代數、元組關系演算和域關系演算這三種語言在表達能力上是彼此相互等價的,它們均可以作為評價實際DBMS軟件產品中查詢語言能力的標準。
實際DBMS軟件產品的查詢語言,除了提供關系代數(或一種關系演算)之外,還提供了許多附加的功能,如庫函數、算術運算等功能。SQL是介于關系代數和關系演算之間的一種語言。SQL不僅具有豐富的查詢功能,而且還具有數據庫定義和數據庫控制功能。SQL是集DDL、DML、DCL為一體的標準的關系數據庫語言。SQL充分體現了關系數據庫語言的優點。
希望與更多計算機等級考試的網友交流,請進入計算機等級考試論壇
更多信息請訪問:考試吧計算機等級考試欄目