2.1 關系
關系數據模型中,無論是實體還是實體間的聯系均由單一的數據結構—關系來表示。在實際的關系型數據庫中的關系也被稱為表。一個關系型數據庫就是由若干個表組成的。
關系的每一行對應一條記錄,也稱為元組;每一列對應一個屬性。關系簡記為
R(A1, A2,…, An)
其中,R是關系名,A1, A2,…, An是屬性名。
同一關系中的屬性不能同名,且所有屬性是不可再分的簡單屬性。每一個屬性中各分量的數據類型相同,屬性的取值范圍稱為域。屬性之間的排列順序可以是任意的。元組的順序可以是任意的,但不允許兩個元組完全相同。
能夠唯一標識一個元組的屬性或屬性集稱為關系的鍵(Key),又稱碼、關鍵字。鍵分為超鍵、候選鍵、主鍵、外鍵。
1. 超鍵
超鍵(Super Key)是一個或多個屬性的集合,這些屬性可以在一個關系中唯一地標識一個元組。如果K是一個超鍵,那么所有包含K的集合也是超鍵。
2. 候選鍵
超鍵的范圍如果太廣,其中某些屬性對于標識元組是無用處的。候選鍵(Candidate Key)是指能夠唯一標識一個元組的最小屬性集,即候選鍵是沒有多余屬性的超鍵。候選鍵中的屬性稱為主屬性(Prime Attribute),不包含在任何候選鍵中的屬性稱為非主屬性(Non_prime Attribute)。
3. 主鍵
如果一個關系有多個候選鍵,則選定其中一個作為主鍵(Primary Key)。例如,對于關系student(SID, name, gender, college)而言,如果所有學生不重名,SID、name都是該關系的候選鍵,也都是主屬性,可以任選一個作為主鍵。包含SID或name的屬性集都是超鍵。如果有學生重名,則name無法唯一標識一個元組,即根據name的值無法唯一確定一個學生,該關系的候選鍵和主鍵都是SID。
4. 外鍵
設屬性F是關系R的一個屬性,但不是關系R的主鍵,并對應著關系S的主鍵K,如圖2-1所示。F在R中的取值要參照關系S中K的取值,稱關系R為參照關系(Referencing Relation)或從表。關系S為被參照關系(Referenced Relation)或主表,并稱F是關系R的外鍵(Foreign Key)。關系R和S不一定是不同的關系,但是K與F的域相同。

圖2-1 外鍵參照主表的主鍵
例如,關系salebill(number, CID, BID, payamount, saledate)的主鍵是number,CID不是關系salebill的鍵,而是關系card的主鍵。因此關系salebill是從表,card是主表,CID是關系salebill的外鍵。我們只能使用有效的校園卡消費,salebill中CID的取值只能是關系card中存在的CID值。
- 在你身邊為你設計Ⅲ:騰訊服務設計思維與實戰
- Mastering Ninject for Dependency Injection
- Python數據分析入門:從數據獲取到可視化
- Live Longer with AI
- SQL應用及誤區分析
- 企業級容器云架構開發指南
- Google Cloud Platform for Developers
- Hadoop 3實戰指南
- 數據修復技術與典型實例實戰詳解(第2版)
- Unity 2018 By Example(Second Edition)
- NoSQL數據庫原理(第2版·微課版)
- 大數據原理與技術
- Data Analysis with Python
- Hands-On Meta Learning with Python
- 數據挖掘:你必須知道的32個經典案例(第2版)