天天看點

《資料庫原理與應用(第3版)》——3.2 關系模型的基本術語

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

在關系資料模型(簡稱關系模型)中,現實世界中的實體、實體與實體之間的聯系都用關系來表示,關系模型源于數學,它有自己嚴格的定義和一些固有的術語。

關系模型采用單一的資料結構——實體以及實體間的聯系均用關系來表示,并且用直覺的觀點來看,關系就是二維表。表3-1和表3-2所示的都是關系。

下面分别介紹關系模型中的有關術語。

1.?關系(relation)

通俗地講,關系就是二維表,二維表的名字就是關系的名字,圖3-1中的關系名就是“學生”。

2.?屬性(attribute)

二維表中的列就稱為屬性(或叫字段),每個屬性有一個名字,稱為屬性名。二維表中對應某一列的值稱為屬性值;二維表中列的個數稱為關系的元數。如果一個二維表有n個列,則稱其為n元關系。表3-1所示的學生關系有學号、姓名、年齡、所在系、性别5個屬性,是一個五元關系。

3.?值域(domain)

二維表中屬性的取值範圍稱為值域。例如在表3-1中,“年齡”列的取值為大于0的整數,“性别”列的取值為“男”和“女”兩個值,這些就是列的值域。

4.?元組(tuple)

二維表中的一行稱為一個元組(記錄值),例如,表3-1所示關系中的元組有:

(0512101,李勇,男,19,計算機系)

(0512102,劉晨,男,20,計算機系)

(0512103,王敏,女,20,計算機系)

(0521101,張立,男,22,資訊系)

(0521102,吳賓,女,21,資訊系)

5.?分量(component)

元組中的每一個屬性值稱為元組的一個分量,n元關系的每個元組有n個分量。例如,元組(0512101,李勇,男,19,計算機系)有5個分量,對應學号屬性的分量是“0512101”、對應姓名屬性的分量是“李勇”、對應年齡屬性的分量是“19”、對應性别屬性的分量是“男”,對應所在系屬性的分量是“計算機系”。

6.?關系模式(relation schema)

二維表的結構稱為關系模式,或者說,關系模式就是二維表的表架構或表頭結構。設關系名為r,其屬性分别為a1,a2,…,an,則關系模式可以表示為:

r(a1,a2,…,an)

對每個ai(i = 1,…,n)還包括該屬性到值域的映像,即屬性的取值範圍。例如,表3-1所示關系的關系模式為:

學生(學号,姓名,性别,年齡,所在系)

如果将關系模式了解為資料類型,則關系就是一個具體的值。

7.?目或度(degree)

關系表包含的屬性個數即為目或度。

8.?關系資料庫(relation database)

對應于一個關系模型的所有關系的集合稱為關系資料庫。

9.?候選鍵(candidate key)

如果一個屬性或屬性集的值能夠唯一辨別一個關系的元組而又不包含多餘的屬性,則稱該屬性或屬性集為候選鍵。候選鍵又稱為候選關鍵字或候選碼。在一個關系上可以有多個候選鍵。

10.?主鍵(primary key)

主鍵也稱為主關鍵字,是表中的屬性或屬性組,用于唯一地确定一個元組。主鍵可以由一個屬性組成,也可以由多個屬性共同組成。例如,表3-1所示的學生基本資訊表中,學号就是此學生關系的主鍵,因為它可以唯一地确定一個學生。而表3-2所示的學生選課關系的主鍵就由學号和課程号共同組成。因為一個學生可以修多門課程,而且一門課程也可以有多個學生選擇,是以,隻有将學号和課程号組合起來才能共同确定一行記錄。我們稱由多個屬性共同組成的主鍵為複合主鍵。當某個表是由多個屬性共同作為主鍵時,我們就用括号将這些屬性括起來,表示共同作為主鍵。比如,表3-2的主鍵是(學号,課程号)。

注意,我們不能根據關系在某時刻所存儲的内容來決定其主鍵,這樣做是不可靠的,隻能是猜測。關系的主鍵與其實際的應用語義有關、與關系模式的設計者的意圖有關。例如,對于表3-2所示的“選課”關系,用(學号,課程号)作為主鍵在一個學生對一門課程隻能有一次考試的前提下是成立的,如果實際情況是一個學生對一門課程可以有多次考試,則用(學号,課程号)作主鍵就不夠了,因為一個學生對一門課程有多少次考試,則其(學号,課程号)的值就會重複多少遍。如果是這種情況,就必須為這個關系添加一個“考試次數”列,并用(學号,課程号,考試次數)作為主鍵。

有時一個關系中可能存在多個可以作主鍵的屬性,比如,對于“學生”關系,假設增加了“身份證号”列,則“身份證号”列也可以作為學生表的主鍵。如果關系中存在多個可以作為主鍵的屬性,則稱這些屬性為候選鍵屬性,相應的鍵為候選鍵。

當一個關系中有多個候選鍵時,可以從中選擇一個作為主鍵。每個關系隻能有一個主鍵。

11.?主屬性(primary attribute)和非主屬性(nonprimary attribute)

包含在任一候選鍵中的屬性稱為主屬性。不包含在任一候選鍵中的屬性稱為非主屬性。