[DB]Database System Concepts Chapter 2
Introduction to the Relational Model
1 Structure of Relational Databases
一个关系型数据库包含一组表,每个表都有一个独特的名字。
通常来说,表中的一行代表着一组值之间的关系。
术语
tuple:一组值的序列
n个值的关系用一个n-tuple来表示(表中的一行)
relation - 一张表
tuple - 表中的一行
attribute - 表中的一列
relation instance - 某种关系的一个示例(某些特定的行)
domain - 某种关系某个attribute的可行值集合
对于所有关系 r,r 的所有属性域都是原子的。域是原子的的意思是域的元素被视为不可分割的单位。
null value - 用来指示某个值未知或者不存在
2 Database Schema
- database schema - 数据库的逻辑视图
- database instance - 某个给定的数据库的某个确定时间的一个快照
- relation - 对应编程中的变量
- relation schema - 对应编程中的类型定义
对于下图中的department关系,其schema为:
$$
department(dept_name, building, budget)
$$
3 Keys
必须提供一种方法来区分一个关系中不同的tuple。
超键superkey
超键是一个或几个属性的集合,它们可以唯一标识一个关系中的某个tuple。
$$
if \space t_1 \neq t_2,then \space t1.K \neq t2.K
$$
其中$K$是某个关系$r$的所有属性集合$R$的一个子集。
如果$K$是一个超键,那么$K$的任何一个超集也是超键
候选键candidate keys
候选键的任何一个子集都不是超键。
对于一个关系,可以有多个候选键。
主键primary key
被选定的某个候选键,用来区分tuple。主键的值应该从不或者很少改变。
主键约束primary key constraints
键是整个关系的一个性质,而无关某个具体的tuple。任何两个不同的tuple,它们键的值不能相同。这代表这被建模的真实世界的一个约束(主键约束primary key constraints)
外键约束
考虑一下教师关系中的部门名属性。如果 instructor 中的元组的系名值与系关系中的系不对应,那是不合理的。因此,在任何数据库实例中,给定教员关系中的任何元组(如 ta),部门关系中一定有某个元组(如 tb),使得 ta 的部门名属性值与 tb 的主键(部门名)值相同。
从关系 r1 的属性集 A 到关系 r2 的主键 B 的外键约束规定,在任何数据库实例中,r1 中每个元组的 A 值也必须是 r2 中某个元组的 B 值。属性集 A 被称为来自 r1 并引用 r2 的外键。关系 r1 也被称为外键约束的引用关系,而 r2 被称为被引用关系。