天天看點

《資料庫原理與應用(第3版)》——3.3 關系模型的形式化定義

本節書摘來自華章出版社《資料庫原理與應用(第3版)》一 書中的第3章,第3.3節,作者:何玉潔,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

在關系模型中,無論是實體還是實體之間的聯系均由單一的結構類型來表示——關系。關系模型是建立在集合代數的基礎上的,本節我們将從集合論的角度給出關系資料結構的形式化定義。

為了給出關系的形式化的定義,首先定義笛卡兒積。

設d1,d2,…,dn為任意集合,定義笛卡兒積d1,d2,…,dn為:

d1×d2×…×dn = {(d1,d2,…,dn) | di ∈di,i = 1,2,…,n }

其中每一個元素(d1,d2,…,dn)稱為一個n元組(n-tuple),簡稱元組。元組中每一個di稱為一個分量。

d1={計算機系,資訊系}

d2={李勇,劉晨,吳賓}

d3={男,女}

則d1×d2×d3笛卡兒積為:

d1×d2×d3={(計算機系,李勇,男),(計算機系,李勇,女),

其中(計算機系,李勇,男)、(計算機系,劉晨,男)等都是元組。“計算機系”、“李勇”、“男”等都是分量。

笛卡兒積實際上就是一個二維表,上述笛卡兒積的運算如圖3-2所示。

《資料庫原理與應用(第3版)》——3.3 關系模型的形式化定義

圖3-2中,笛卡兒積的任意一行資料就是一個元組,它的第一個分量來自d1,第二個分量來自d2,第三個分量來自d3。笛卡兒積就是所有這樣的元組的集合。

根據笛卡兒積的定義可以給出一個關系的形式化定義:笛卡兒積d1,d2,…,dn的任意一個子集稱為d1,d2,…,dn上的一個n元關系。

形式化的關系定義同樣可以把關系看作二維表,給表的每個列取一個名字,稱為屬性。n元關系有n個屬性,一個關系中的屬性的名字必須是唯一的。屬性di的取值範圍(i = 1,2,…,n)稱為該屬性的值域(domain)。

比如上述的例子,取子集:

r = {(計算機系,李勇,男),(計算機系,劉晨,男),(資訊系,吳賓,女)}

就構成了一個關系。二維表的形式如表3-3所示,把第一個屬性命名為“所在系”,第二個屬性命名為“姓名”,第三個屬性命名為“性别”。

《資料庫原理與應用(第3版)》——3.3 關系模型的形式化定義

從集合論的觀點也可以将關系定義為:關系是一個有k個屬性的元組的集合。

關系可以看作二維表,但并不是所有的二維表都是關系。關系資料庫對關系是有一些限定的,歸納起來有如下幾個方面。

1)關系中的每個分量都必須是不可再分的最小資料項。即每個屬性都不能再被分解為更小的屬性,這是關系資料庫對關系的最基本的限定。例如表3-4就不滿足這個限定,因為在這個表中,“進階職稱人數”不是最小的資料項,它是由兩個最小資料項(“教授人數”和“副教授人數”)組成的一個複合資料項。對于這種情況隻需要将“進階職稱人數”資料項分解為“教授人數”和“副教授人數”兩個資料項即可,如表3-5所示。

《資料庫原理與應用(第3版)》——3.3 關系模型的形式化定義

2)表中列的資料類型是固定的,即每個列中的分量是同類項的資料,來自相同的值域。

3)不同的列的資料可以取自相同的值域,每個列稱為一個屬性,每個屬性有不同的屬性名。

(4)關系表中列的順序不重要,即列的次序可以任意交換,不影響其表達的語義。比如将圖3-5中的“教授人數”列和“副教授人數”列交換并不影響這個表所表達的語義。

5)行的順序也不重要,交換行資料的順序不影響關系的内容。其實在關系資料庫中并沒有第一行、第二行等這樣的概念,而且資料的存儲順序也與資料的輸入順序無關,資料的輸入順序不影響對資料庫資料的操作過程,也不影響其操作效率。

6)同一個關系中元組不能重複,即在一個關系中任意兩個元組的值不能完全相同。