本節書摘來華章計算機《資料庫技術原理與應用教程》一書中的第3章 ,第3.5.3節,徐潔磐 操鳳萍 編著更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
關系是一種數學理論,運用這種理論所得到的邏輯模型稱關系模型,關系模型由關系資料結構、關系操縱及關系限制三部分組成。
1 關系資料結構
(1)表結構
關系模型統一采用二維表結構。二維表由表架構(frame)及表元組(tuple)組成。表架構由n個命名的屬性組成,n稱為屬性元數(arity),每個屬性有一個取值範圍(即值域)。
在表架構中可以按行存放資料,每行資料稱為一個元組,或稱表的執行個體(instance)。實際上,一個元組由n個元組分量組成,每個元組分量是表架構中每個屬性的投影值。一個表架構可以存放m個元組,m稱為表的基數(cardinality)。
一個n元表架構及架構内m個元組構成了一個完整的二維表。表34給出了二維表的一個例子,這是一個有關學生(s)的二維表。
表3-4二維表的一個執行個體
二維表一般滿足下面七個性質:
二維表中元組個數是有限的——元組個數有限性。
二維表中元組均不相同——元組的唯一性。
二維表中元組的次序可以任意交換——元組的次序無關性。
二維表中元組的分量是不可分割的基本資料項——元組分量的原子性。
二維表中屬性名各不相同——屬性名唯一性。
二維表中屬性與次序無關——屬性的次序無關性(但屬性次序一經确定就不能更改)。
二維表中屬性列中分量具有與該屬性相同值域——分量值域的同一性。
(2)關系
關系(relation) 是二維表的一種抽象,它是關系模型的基本資料機關。具有n個屬性的關系稱n元關系,n=0時稱空關系。每個關系有一個名稱(即關系名),關系名及關系中的屬性構成了關系架構。設關系名為r,其屬性為a1, a2, …, an,則該關系的架構是:
r(a1, a2, …,an)
表34所示的關系架構可以表示成:
s(sno,sn,sd,sa)
每個關系有m個元組,設關系的架構為r(a1, a2,…, an),則其元組必具有下面的形式:
(a11, a12, … , a1n)
(a21, a22, … , a2n)
(am1, am2, … , amn)
其中aij(i∈{1,2,…,n},j∈{1,2,…,m})為元組分量。
按關系架構所組成的關系元組集合可構成一個關系。如表34所示的關系r可表示為:r={(98001,張曼英,cs,18),(98002,丁一明,cs,20),(98003,王愛國,cs,18),(98004,李強,cs,21)}。
一個語義相關的關系集合構成一個關系資料庫(relational database)。而語義相關的關系架構集合則構成關系資料庫模式(relational database schema),簡稱關系模式(relational schema)。
關系模式支援子模式,關系子模式是關系資料庫模式中使用者所見到的那部分資料描述。關系子模式也是二維表結構,它對應着使用者資料庫,即視圖(view)。
關系與二維表是一個概念的兩種不同表示形式,一般在理論研究中用關系讨論而在實際應用中則用二維表表示,在本書中基本上按此方法但并不嚴格區分。
(3)鍵
鍵是關系模型中的一個重要概念,它具有辨別元組、建立元組間聯系等重要作用。
鍵(key):二維表中凡能唯一最小辨別元組的屬性集稱為該表的鍵。
候選鍵(candidate key):二維表中可能有若幹個鍵,它們稱為該表的候選鍵。
主鍵(primary key):從二維表的所有候選鍵中選取一個作為使用者使用的鍵稱為主鍵。主鍵一般也簡稱鍵。
外鍵(foreign key):若表a中的某屬性集是表b的鍵,則稱該屬性集為a的外鍵。
表一定有鍵,因為如果表中所有屬性子集均不是鍵則至少表中屬性全集必為鍵,是以也一定有主鍵。
(4)關系與er模型
雖然關系的結構簡單,但它的表示範圍廣,er模型中的屬性、實體(集)及聯系均可用它表示,表35給出了er模型與關系間的比較。
在關系模型中,關系既能表示實體集又能表示聯系。表36給出了某公司職工間上下級聯系的關系表示。
2關系操縱
關系模型的資料操縱就是建立在關系上的一些操作,一般有查詢、删除、插入及修改四種操作。
(1)資料查詢
使用者可以查詢關系資料庫中的資料,它包括一個關系内的查詢以及多個關系間的查詢。
1)一個關系内查詢的基本機關是元組分量,其基本過程是先定位後操作。所謂定位,包括縱向定位與橫向定位,縱向定位就是指定關系中的一些屬性(稱列指定),橫向定位就是選擇滿足某些邏輯條件的元組(稱行選擇)。通過縱向與橫向定位後就可确定一個關系中的元組分量了。在定位後即可進行查詢操作,即将定位的資料從關系資料庫中取出并放入至指定記憶體。
2)多個關系間的資料查詢可分為3步進行。第1步将多個關系合并成一個關系,第2步對合并後的一個關系進行定位,最後進行查詢操作。其中,第2步與第3步可看作一個關系内的查詢,故我們隻介紹第1步。多個關系的合并可分解成兩個關系的逐漸合并,如果有3個關系r1、r2與r3,那麼合并過程是先将r1與r2合并成r4,然後再将r4與r3合并成最終結果r5。
是以,對關系資料庫的查詢可以分解成三個基本定位操作與一個查詢操作:
一個關系内的屬性指定。
一個關系内的元組選擇。
兩個關系的合并。
查詢操作。
(2)資料删除
資料删除的基本機關是元組,用于将指定關系内的指定元組删除。它也分為定位與操作兩部分,其中定位部分隻需要橫向定位而無需縱向定位,定位後即是執行删除操作。是以,資料删除可以分解為兩個基本操作:
關系中元組的删除操作。
(3)資料插入
資料插入僅用于一個關系,即在指定關系中插入一個或多個元組。插入資料時不需定位,隻需将元組插入關系。是以,資料插入隻有一個基本操作:
關系中的元組插入操作。
(4)資料修改
資料修改是在一個關系中修改指定的元組與屬性值。資料修改不是一個基本操作,它可以分解為兩個更基本的操作:先删除需修改的元組,然後插入修改後的元組。
(5)關系操作小結
以上四種操作的對象都是關系,而操作結果也是關系,是以它們都是建立在關系上的操作。這四種操作可以分解成6種基本操作。這樣,關系模型的資料操縱可以總結如下:
1)關系模型資料操縱的對象是關系,而操縱結果也是關系。
2)關系模型基本操作有如下六種(其中三種為定位操作,三種為查詢、插入及删除操作):
關系屬性的指定。
關系元組的選擇。
兩個關系合并。
關系的查詢操作。
關系中元組的插入操作。
(6)空值處理
在關系元組的分量中允許出現空值(null value)以表示資訊的空缺,空值的含義如下:
未知的值。
不可能出現的值。
在出現空值的元組分量中一般可用null表示。目前的關系資料庫系統都支援空值,但是它們都具有如下兩個限制:
1)關系的主鍵中不允許出現空值。因為主鍵是關系元組的辨別,如主鍵為空值則失去了其辨別的作用。
2)需要定義有關空值的運算。在算術運算中如果出現空值則其結果為空值,在比較運算中如果出現空值則其結果為f(假)。此外,在統計時,如果sum、avg、max、min中有空值輸入,其結果也為空值,而在作count時如有空值輸入則其值為0。
3 關系中的資料限制
關系模型允許定義三類資料限制,分别是實體完整性限制、參照完整性限制以及使用者定義的完整性限制。此外,關系的安全性限制、故障恢複與多使用者的并發控制實際上也是資料限制,其具體說明可見第5章。