关系数据模型中,无论是实体还是实体间的联系均由单一的数据结构—关系来表示。在实际的关系型数据库中的关系也被称为表。一个关系型数据库就是由若干个表组成的。
关系的每一行对应一条记录,也称为元组;每一列对应一个属性。关系简记为
R(A 1 , A 2 ,…, A n )
其中,R是关系名,A 1 , A 2 ,…, A n 是属性名。
同一关系中的属性不能同名,且所有属性是不可再分的简单属性。每一个属性中各分量的数据类型相同,属性的取值范围称为域。属性之间的排列顺序可以是任意的。元组的顺序可以是任意的,但不允许两个元组完全相同。
能够唯一标识一个元组的属性或属性集称为关系的键(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值。