來源
《數據庫系統原理》
第二節 關系數據模型
關系數據庫系統是支持關系模型的數據庫系統。作為一種數據模型,關系模型同樣包含三個組成要素,分別是關系數據結構、關系操作集合和關系完整性約束。
一、關系數據結構
關系模型的數據結構非常簡單,只包含單一的數據結構。即關系。在關系模型中,現實世界的實體以及實體間的各種聯系,均是使用關系來表示。在用戶看來,關系模型是把數據庫表示為數據的集合,且關系數據庫 是以二維表格的形式組織數據,例如表2.1就是一張記錄學生基本信息的二維表格,該表格為學生基本信息登記表。
表2.1 學生基本信息登記表
學號 |
姓名 |
性別 |
出生日期 |
籍貫 |
民族 |
班號 |
身份證號 |
201311111 |
張沙 |
男 |
1997/12/11 |
山西 |
漢 |
AC1311 |
XXX1 |
201311112 |
張萌 |
女 |
1996/6/1 |
安徽 |
漢 |
AC1311 |
XXX2 |
201311113 |
張伊尉 |
女 |
1998/1/1 |
安徽 |
漢 |
AC1311 |
XXX3 |
下面。以表2.1所示的二維表格為例,介紹關系數據庫的基本術語。
1.表(Table)
表,也稱為關系,是一個二維的數據結構,它由表名、構成表的各個列(如學號,姓名,性別,出生日期等)及若干行數據(各個學生的基本信息)組成。每個表有一個唯一的表名,表中每一行數據描述一條具體的記錄值,如一個學生的基本信息。
2.關系(Relation)
一個關系邏輯上對應一張二維表,可以為每個關系取一個名稱進行標識。例如,表2.1所示的學生基本信息登記表,也即學生基本信息登記表關系。
關系可以有三種類型,即基本關系、查詢表和視圖表。其中,基本關系通常又稱為基本表或基表,是實際存在的表,它是實際存儲數據的邏輯表示;查詢表是查詢結果對應的表;視圖表是由基本表或其他視圖表導出的表,是虛表,部隊營實際存儲的數據。
3.列(Column)
表中的列,也稱作字段(Field)或屬性(Attribute)。表中每一列有一個名稱,稱為列名、字段名或屬性名。每一列表示實體的一個屬性,具有相同的數據類型。如表2.2所示,它列出了表2.1學生基本信息登記表中各個字段的字段名及其數據類型的定義。
表2.2 學生基本信息登記表的結構定義
中文字段名 |
數據類型 |
寬度 |
學號 |
字符型 |
10 |
姓名 |
字符型 |
20 |
性別 |
字符型 |
3 |
出生日期 |
日期型 |
|
籍貫 |
字符型 |
20 |
民族 |
字符型 |
30 |
班號 |
字符型 |
8 |
身份證號 |
字符型 |
18 |
需要說明的是:在一個數據庫中,表名必須唯一;在表中,字段名必須唯一,不同表中可以出現相同的字段名;表和字段的命名應盡量有意義,盡量簡單。
4.屬性(Attribute)
表中的一列即為一個屬性,給每一個屬性起一個名稱極為屬性名。與之同義的術語是“列”。表中屬性的個數稱為關系的元或度。列的值稱為屬性值;屬性值的取值范圍稱為值域。例如,表2.1中學生基本信息登記表關系的屬性有:學號、姓名、性別、出生日期、籍貫、民族、版號、身份證,所以元數是8,即學生基本信息登記表關系是一個8元關系或8度關系。
5.行(Row)
表中的行(Row),也稱作元組(Tuple)或記錄(Record)。表中的數據是按行存儲的。表中的一行數據即為一個元組或一條記錄,其每行由若干字段值組成,每個字段值描述該對象的一個屬性或特征。例如,在表2.1中,第一行數據表示的是學號為201311111、姓名為張沙的學生基本信息。
6.元組(Tuple)
表中的一行即為一個元組。例如,在表2.1中的元組有:
201311111 |
張沙 |
男 |
1997/12/11 |
山西 |
漢 |
AC1311 |
XXX1 |
201311112 |
張萌 |
女 |
1996/6/1 |
安徽 |
漢 |
AC1311 |
XXX2 |
201311113 |
張伊尉 |
女 |
1998/1/1 |
安徽 |
漢 |
AC1311 |
XXX3 |
等。
7.分量(Component)
元組中的一個屬性值,稱為分量。例如,在學生基本信息登記表中元組
201311112 |
張萌 |
女 |
1996/6/1 |
安徽 |
漢 |
AC1311 |
XXX2 |
的每一個屬性值:“201311112”、“張萌”、“女”、“1996/6/1”,“安徽”,“漢”,“AC1311”,“XXX2”都是它的分量。
8.碼或鍵(Key)
如果在一個關系中,存在這樣的屬性(或屬性組),使得在該關系的任何一個關系狀態中的兩個元組,在該屬性(或屬性組)上值的組合都不相同,即這些屬性(或屬性組)的值都能用來唯一標識該關系的元組,稱這些屬性(或屬性組)為該關系的碼或鍵。(讀者譯:物理數據“實際數據”值的引用)
9.超碼或超鍵(Super Key)
如果在關系的一個碼中移去某個屬性,它仍然是這個關系的碼,則稱這樣的碼或鍵為該關系的超碼或超鍵。一般的,每個關系至少有一個默認的超碼或超鍵,即該關系的所有屬性的集合,也是這個關系的最大超碼或超鍵。例如,在表2.1中,
學號 |
姓名 |
性別 |
出生日期 |
籍貫 |
民族 |
班號 |
身份證號 |
都是超碼或超鍵。
10.候選碼或候選鍵(Candidate Key)
如果在關系的一個碼或鍵中,不能從中移去任何一個屬性,否則它就不是這個關系的碼或鍵,則稱這樣的為該關系的候選碼或候選鍵。可見,一個關系的候選碼是這個關系的最小超碼或超鍵。例如,表2.1最中學號和身份證號都是候選建,因為若給定學號或身份證號,都可以確定一個學生的全部基本信息。
有些情況下,需要幾個屬性(即屬性組或屬性集合)才能唯一確定一條記錄。例如,對於表2.3所示的學生成績表的結構定義,僅僅確定學號或課程號,都不能唯一確定某個學生具體一門課程的成績。所以,學生成績表的主鍵是由學號和課程號兩個屬性組成的屬性集合,即(學號,課程號)。
表2.3 學生成績表的結構定義
中文字段名 |
數據類型 |
寬度 |
學號 |
字符型 |
10 |
課程號 |
字符型 |
6 |
開課學期 |
字符型 |
5 |
成績 |
數值型 |
|
11.主碼或主鍵(Primary Key)
在一個關系的若干候選碼或候選鍵中指定一個用來唯一標識關系的元組,則稱這個被指定的候選碼或候選鍵為該關系的主碼或主鍵。
12.全碼或全鍵(All-Key)
一個關系模式的所有屬性集合是這個關系的主碼或主鍵,責成這樣的主碼或主鍵為全碼或全鍵。
13.主屬性(Primary Attribute)和非主屬性(Nonprimary Attribute)
關系中包含在任何一個候選碼中的屬性稱為主屬性或碼屬性,不包含在任何一個候選碼中的屬性稱為非主屬性或非碼屬性。例如,在表2.1在學生基本信息登記表中,學號和身份證號是主屬性,其他屬性是非主屬性。
14.外碼或外鍵(Foreign Key)
當關系中的某個屬性(或屬性組)不是這個關系的主碼或候選碼,而是另一關系的主碼時,稱該屬性(或屬性組)為這個關系的外碼或外鍵。例如,在表2.4中班號是班級表的主鍵,而該屬性又是表2.1學生基本信息登記表的一個屬性,則成屬性班號為學生基本信息表的外鍵。
中文字段名 |
數據類型 |
寬度 |
班號 |
字符型 |
8 |
班級名稱 |
字符型 |
20 |
所屬院系 |
字符型 |
30 |
入學時間 |
日期型 |
|
班級最大人數 |
數值型 |
|
15.參照關系(Referencing Relation)和被參照關系(Referened Relation)
參照關系也稱為從關系,被參照關系也稱為主關系,它們是指以外鍵相關聯的兩個關系。以為外鍵為主碼的關系稱為被參照關系;外鍵所在的關系稱為參照關系。被參照關系與參照關系是通過外鍵相聯系的,這種聯系通常是一對多聯系。例如,表2.4所定義的班級表是被參照關系,而表2.1所示的學生基本信息登記表是參照關系,它們通過外鍵“班號”相聯系。
16.域(Domain)
域表示屬性的取值范圍。
17.數據類型(Date Type)
表中每個列都有對應的數據類型,它用於限制(或容許)該列中存儲的數據。每個字段表示同一類信息,具有相同的數據類型。
18.關系模式(Relation Schema)
同數據模型一樣,數據庫也有“型”(Type)和“值”(Value)之分。在關系數據庫中,關系模式是型,關系是值,即關系模式是對關系的描述,例如表2.2就是對對關系的結構定義,關系則是元組的集合,是關系模式在某一時刻的狀態或內容。
關系模式是靜態的、穩定的,而關系是動態的、隨時間變化的。這是因為關系操作在不斷的更新着數據庫中的數據,例如,(讀者譯:別例如了,這東西自己想象,哦描述了數據模式,用概念來創造一個概念模型,這個模型在開發中,是不能更改的,除非用戶需求更改)。
在實際工作中,人們常常會把關系模式和關系都籠統地稱為關系,(讀者譯:甚至表>__<),當然這不難從上下文中加以區別。
19.關系數據庫(Relation DateBase)
關系數據庫是以關系模型作為數據的邏輯模型,並采用關系作為組織方式的一類數據庫,其數據庫操作建立在關系代數的基礎上。在一個給定的應用領域中,所有關系的集合構成一個關系數據庫。
此外,盡管關系模型的數據結構表示為二維表,但不是任意的一個二維表都可以作為一個關系。關系數據庫對關系是有限定的,具體要求如下。
i)每一個屬性都是不可分解的。這是關系數據庫對關系的最基本的一個限定,要求關系的每一個分量必須是一個不可分的數據項。
ii)每一個關系僅僅有一種關系模式,即每一個關系模式中的屬性的數據類型以及屬性的個數是相對固定的。
iii)每一個關系模式中的屬性必須命名,在同一個關系模式中屬性名必須是不同的。
iv)同一個關系中不允許出現候選碼或候選鍵完全相同的元組。
v)在關系中元組順序(即行序)是無關緊要的,任意交換。
vi)在關系中屬性的順序(即列序)是無關緊要的。任意交換。