概述
关系数据模型的基本数据结构是表table,或者说是关系relation。
与前两种数据模型需要过程化的行为描述不同,关系数据模型使用非过程化的SQL语言,只要给出条件,即可获得指定数据,用户不需要关注过程。
关系数据模型的联系用表来表达。例如可以用一张elective表将student和course表关联起来,表示某学生选了某课,成绩是多少。
属性attributes与域domain
属性:实体被描述的特征,例如学生的年龄。属性就是表里的一列。
域:属性的值域,例如学生的性别只能是男或女。
关系模型的属性必须有原子性,也就是说不能再分。(第一范式)
表中的值允许是空值,表示不确定的值。(第二范式)
关系relation与元组tuple
通俗地说,表里的一行就是一个元组,整个表就是一个关系。
主键primary key
假如某些属性的值可以唯一确定一个元组(一行),那么这些属性可以称为候选键alternate key。
候选键的确定有两个条件:
- 候选键对应的所有元组的值都不相同。
- 任意候选键的子集不符合第一个条件。否则就不是候选键,而是超键superkey。
如果一个关系中的所有属性都不是候选键,就只有把所有的属性组合起来作为候选键,这样的键叫做全键all key。
:::info student表中的学号就是一个候选键,学号+性别是超键。 :::
外键foreign key
一张表中引用其它表的主键的列就是外键。简单来说,外键就是一种指针。
外键并不是通过列名实现的,而是通过定义外键约束实现的。
外键的内容不能为空。
:::info
elective表中的S#和C#就是外键。
:::