# 关系模型的数据结构

# 关系

关系模型的数据结构是规范化的二维表,亦称关系
每个表(关系)有唯一的名字。
关系数据库是表的集合,即关系的集合

# 关系代数

#

一组具有相同数据类型的值的集合
空值是所有可能的域的一个取值

# 笛卡尔积

例如:D1={A,B},D2={a,b}D_1= \{ 'A', 'B' \},D_2= \{ 'a','b' \},则 D1,D2D_1,D_2 的笛卡尔积为:

D1×D2={(A,a),(A,b),(B,a),(B,b)}D_1 \times D_2 = \{ ('A', 'a'), ('A', 'b'), ('B', 'a'), ('B', 'b')\}

# 关系

D1×D2×...×DnD_1 \times D_2 \times ... \times D_n有限子集称为在域 D1,D2,...,DnD_1,D_2,...,D_n 上的关系,表示为:r(D1,D2,...,Dn)r(D_1,D_2,...,D_n)

  • rr 表示关系的名字
  • nn 标识关系的度(目)

# 关系模式

对应于关系数据库,表的每一数据行对应于关系的一个元组,表体对应于关系,关系是元组的集合
表头部分对应于关系模式,定义了元组的结构和约束

关系的描述称为关系模式,可以形式化地表示为

R(U,D,DOM,F)R(U,D,DOM,F)

  • RR:关系模式名
  • UU:组成该关系模式的属性的集合
  • DD:属性集 UU 中所有属性所来自域的集合
  • DOMDOM:属性向域的映像集合
  • FF:属性间的依赖关系集合

#

# 超码

对于关系模式 RR 的一个或多个属性的集合 AA,如果属性集 AA 的值可以唯一标识关系模式 RR 的任何合法关系 rr 中的一个元组,则称属性集 AA 为关系模式 RR 的一个超码

# 候选码和主码

对于满足超码性质的多个属性集,称其们为关系模式 RR 的候选码(候选码是最小的超码)
若有多个候选码,则可选择一个作为主码

# 外码

FF 是关系模式 RR 的一个属性(集),KsK_s 是关系模式 SS 的主码,r,sr,s 分别是关系模式 R,SR,S 的一个合法关系
如果 FFKsK_s 相对于(即关系模式 RR 中属性 FF 的取值用于参照关系模式 SS 中给定主码 KsK_s 的取值),则称 FF 是关系模式 RR (或关系 rr)参照关系模式 SS(或关系 ss)的外码

# 关系模式的基本规范化要求

  • 该关系模式的任意合法关系中的每个元组在每个属性上只有一个值(属性域是原子的,不存在多值属性)
  • 属性集 UU 中存在能唯一标识一个元组的候选码

# 关系数据库模式

在一个给定的领域中,所有实体与实体之间的联系所对应关系构成的集合就构成一个关系数据库
关系数据库的型就是关系数据库模式
关系数据库的值就是关系模式在某一时刻对应关系的集合,称为关系数据库实例

# 关系模型的数据完整性约束

# 实体完整性规则

主码的值不能为空

# 参照完整性

如果关系(模式) rr 的外码 FF 参照关系(模式)ss 的主码,则对于关系 rr 中的每个元组在属性 FF 上的取值,要么为空值,萌等于关系 ss 中某个元组的主码值

  • 两个关系多对一:在一个关系中加外码
    • 一个班级可以有多个学生
  • 两个关系多对多:转换为两个多对一,新建一个关系
    • 一个学生可以学多门课,一门课可以被多个学生学,建立 “选课” 关系
  • 一个关系内部多对一:在关系内加外码
    • 一门课程有一节先修课,一节课可以是多个课程的先修

# 数据库模式导航图

# 用户自定义完整性

针对不同业务的语义,由用户自己定义的一些完整性约束条件

# 关系操作

  • 查询
  • 更新