文章目录
第3讲 关系模型简述
关系模式(Relation Schema)
关系模式用来描述关系,使用四元组 R ( U , D , D O M , F ) R(U,D,\mathrm{DOM},F) R(U,D,DOM,F)表示,其中
- R R R为关系名;
- U U U为属性名集合;
- D D D为 U U U中属性所来自的域;
- D O M \mathrm{DOM} DOM为属性向域的映射集合;
- F F F为属性间数据的依赖关系集合。
关系模式通常可以简记为 R ( U ) R(U) R(U)、 R ( A 1 : D 1 , A 2 : D 2 , ⋯ , A n : D n ) R(A_1:D_1,A_2:D_2,\cdots,A_n:D_n) R(A1:D1,A2:D2,⋯,An:Dn)或 R ( A 1 , A 2 , ⋯ , A n ) R(A_1,A_2,\cdots,A_n) R(A1,A2,⋯,An),其中 A 1 , A 2 , ⋯ , A n A_1,A_2,\cdots,A_n A1,A2,⋯,An为属性名。
关系(Relation)
从集合论的角度看, D 1 × D 2 ⋯ × D n D_1\times D_2\cdots\times D_n D1×D2⋯×Dn的子集叫做在域 D 1 , D 2 , ⋯ , D n D_1,D_2,\cdots,D_n D1,D2,⋯,Dn上的关系,记作 R ( D 1 , D 2 , ⋯ , D n ) R(D_1,D_2,\cdots,D_n) R(D1,D2,⋯,Dn),其中 R R R表示关系的名字, n n n为关系的度。
关系是笛卡尔积的有限子集,所以在用户看来,一个关系就是一张表(Table),表的每行对应一个元组,表的每列对应一个域(Domain)。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(Attribute),因此 n n n度关系有 n n n个属性。
关系有三种类型:
- 基本关系(通常又称为基本表或基表)
- 查询表
- 视图表
关系的性质:
- 列是同质的(homogeneous):每一列中的分量是同一类型的数据,来自同一个域。
- 不同的列可能出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
- 列是无序的。
- 行是无序的。
- 候选键是唯一的:任意两个元组的候选键不能取相同的值。
- 关系的第一范式(1NF):分量必须取原子值,即每一个分量都必须是不可分的数据项。
键(Key)
候选键(Candidate Key)
某一属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选键(。
例如,在关系Students(Sno, Sname, Sage, Sclass)中,Sno就是一个候选键,在关系SC(Sno, Cno, Grade)中,(Sno, Cno)是一个候选键。
一个关系中可能有很多组候选键,例如在关系Accounts(uuid, username, password, email)中,uuid和username都是候选键。
主键(Primary Key)
当有一个候选键时,候选键就是主键;当有多个候选键时,可以选定其中一个作为主键。
在关系Accounts(uuid, username, password, email)中,DBA可以选择uuid作为Accounts的主键,也可以选择username作为Accounts的主键。
外键(Foreign Key)
若关系 R R R中一个属性组不是其候选键,但是另一个关系的候选键,则称这个属性组为 R R R的外键。
例如,在关系Customers(id, name, address, contacts)和Contracts(id, name, customer)中,Contracts.customer的域是Customers.id的值的集合,因此Contracts.customer是Contracts的外键。
关系完整性
实体完整性(Entity Integrity)
若属性 A A A是基本关系 R R R的主属性,则 A A A不能取空值(null)。
参照完整性(Referential Integrity)
若属性(或属性组) F F F是基本关系 R R R的外键,它与基本关系 S S S的主键 K s K_s Ks相对应,则对于 R R R中每个元组在 F F F上的值只能是以下情况:
- 空值;
- 等于 S S S中某个元组的主键值。
用户定义的完整性(User-Defined Integrity)
用户定义的完整性反映某一具体应用所涉及的数据必须满足的语义要求,例如在关系Students(no, name, age, class)中,no必须是长度为12的字符串。