数据库八股文——关系模型的基本概念
关系、关系模式、关系实例的定义
一个 关系 对应一张 表格
引入关系的目标是更数学化,规范化的描述一张表格
例如对于下面的表格:
① 关系的属性和属性值
关系中的每一列中的数据都属于某个域中(域是属性的取值范围),并有一个独特的名字称为属性名,关系中具体的值是属性值。ID 是属性名,该列的域为无符号整数域,10101为属性值。
域是一个集合,集合的个数成为域的基数。
② 关系的元组
关系的每一行称为属于关系的一个元组,关系包含的元组集合是所有域笛卡尔积的子集。元组的每一个值叫做一个分量。(12121, Wu, Finance, 90000) 为一个元组
③ 关系的度/目
关系的属性个数称为关系的度/目。上述关系是一个四度关系。
关系模式
关系可用 R(A1:D1, A2:D2, ..., An:Dn) 来表示,这种描述又被称为关系模式。
其中 R 是关系的名字,A 是属性,D 是属性所对应的域,n 是关系的度或目, 关系中元组的数目称为关系的基数。
上述表格的描述为:table_name(ID: unsigned int, name: string, dept_name: string, salary: int)
关系实例
关系模式是在关系模式下的一组元组,或者称一个确定的表格。
上述表格就是在关系模式 table_name(ID: unsigned int, name: string, dept_name: string, salary: int) 下的一个关系实例
关系的特性
- 列的同质性: 每一列的属性值属于同一个域
- 行/列的互换等价性:关系中区分行和列通过元组值与属性名,和顺序无关
- 元组的不重复性:不能存在两个完全一致的元组
- 属性不可再分性(关系第一范式):属性不能再分成子属性,一个元组的各个分量的值只能为一个
关系的重要概念——码
超码 Super Key
能够唯一标识一条记录的属性或属性集
标识性 + 非空性
超码:(学号, 课程名),(学号,课程名,成绩),(学号,课程名,性别,姓名)
候选码 Candicate Key
能够唯一标识一条记录的最小属性集(不含多余属性)
标识性 + 非空性 + 最小性
候选码:(学号, 课程名),(课程名, 姓名)
主码 Primary Key
人为选择的候选码中的一个
标识性 + 非空性 + 最小性 + 唯一性
主码:(学号, 课程名)
主属性/非主属性
出现在候选码中的属性/不出现在候选码中的属性
主属性:{学号,课程名,姓名}
非主属性:{成绩,性别}
外码 Foreign Key
关系 R 中的一个属性组,它不是 R 的候选码,但它与另一个关系 S 的候选码相对应,则成这个属性组 R 的外码
两个关系通常是靠外码连接起来的
超码,候选码,主码的关系
关系中的数据约束
实体完整性约束——主码约束
一个关系的主码不能取空值、重复值。
一个复合主码中的每一个属性均不能取空值。
只有关系才有实体完整性约束,对于查询结果(例如 SQL 语句的输出),不需要满足该约束。
参照完整性约束——外码约束
一个关系的外码可以取空值。
一个关系的外码如果是有效值,则必须包含于其对应另一个关系的主码的实际取值集合。
用户完整性约束
用户针对具体的应用环境定义的完整性约束条件。
例如要求年龄在 0 ~ 100 之间,工资在 3000 ~ 6000 之间等。
其他约束
自增长约束、默认值约束、检查约束等。