Lecture 2:关系数据库
Chinese-language Computer Science 408 note: Lecture 2:关系数据库. Original source available where applicable.
On this page
This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.
描述:本节整理关系模型中的关系、元组、属性和域,严格区分超码、候选码、主码、复合码、全码、外码、主属性与非主属性;随后说明实体/参照/用户定义完整性,以及笛卡尔积、选择、投影、$\theta$ 连接、等值连接和自然连接。
2.1 关系模型基本术语
2.1.1 关系模式
关系模式描述关系的结构,可写为:
$$ R(A_1,A_2,\ldots,A_n). $$
其中:
- $R$ 是关系名。
- $A_1,\ldots,A_n$ 是属性名。
- 每个属性 $A_i$ 都有一个取值域 $D_i$。
例如课件中的学生关系模式:
$$ \operatorname{Student}( \text{学号}, \text{姓名}, \text{性别}, \text{年龄} ). $$
2.1.2 域 Domain
域是一组具有相同数据类型和语义的合法值集合。
例如:
- 学号域:合法学号字符串。
- 性别域:系统允许的枚举值。
- 年龄域:满足范围约束的整数。
课件第一页绿色框“列取值为域”表示同一属性列中的各分量均来自该属性的域。
2.1.3 属性 Attribute
属性对应关系表的一列,用来描述实体的某一特征。
每个属性具有:
- 属性名。
- 数据类型或域。
- 可选的默认值、空值规则和其他约束。
2.1.4 元组 Tuple
元组对应关系表的一行,是各属性值的有序组合:
$$ t=(a_1,a_2,\ldots,a_n), \qquad a_i\in D_i. $$
课件图中学号 803、姓名 王五、性别 男、年龄 20 所在整行就是一个元组。
2.1.5 分量、度与基数
- 分量:元组在某个属性上的值,例如
王五。 - 度/目(degree/arity):关系模式的属性个数 $n$。
- 基数(cardinality):某个关系实例中的元组数。
2.1.6 关系
在关系模型中,关系是笛卡尔积的有限子集:
$$ r(R)\subseteq D_1\times D_2\times\cdots\times D_n. $$
关系模式 $R$ 描述结构,关系实例 $r(R)$ 表示某一时刻实际存在的元组集合。
WARNING · 易错点 关系模式是结构定义,关系实例是当前数据;表只是关系在数据库中的常用实现和显示方式。
2.2 超码与候选码
设关系模式的属性全集为 $U$。
2.2.1 超码 Superkey
若属性集 $K\subseteq U$ 能唯一标识关系中的每个元组,则 $K$ 是超码。
超码只要求唯一性,允许包含多余属性。
如果 EmployeeID 能唯一标识员工,则:
$$ {\text{EmployeeID}} $$
是超码,包含它的:
$$ {\text{EmployeeID},\text{Name}} $$
也仍是超码。
2.2.2 候选码 Candidate Key
候选码是最小超码,同时满足:
- 唯一性:能够唯一标识每个元组。
- 最小性:删除其中任一属性后都不再具有唯一性。
最小性是集合包含意义上的不可再约简,不是“属性个数在所有码中最少”。
一个关系可以有多个候选码。
2.2.3 主码 Primary Key
从候选码中选定一个作为主码,也称主键或主关键字。
设候选码的集合为 $\mathcal C$,超码的集合为 $\mathcal S$,被选中的主码为 $K_{\text{primary}}$,则:
$$ K_{\text{primary}}\in\mathcal C\subseteq\mathcal S. $$
也就是说,主码是候选码集合中的一个元素,不是候选码集合的子集;每个候选码本身都是一个最小超码。
SQL 中主键满足:
- 唯一。
- 每个组成列非空。
- 一个表只能声明一个
PRIMARY KEY约束,但该主键可以包含多列。
其余没有被选为主码的候选码称为备用码/替代码(alternate key)。
2.3 复合码与全码
2.3.1 复合码
由两个或多个属性共同组成的候选码或主码,称为复合码/联合码。
课件中的订单明细:
CREATE TABLE OrderDetails (
OrderID INT,
ProductID INT,
Quantity INT,
PRIMARY KEY (OrderID, ProductID)
);
这里:
$$ {\text{OrderID},\text{ProductID}} $$
是复合主码。
2.3.2 全码 All-key
若关系模式的全部属性共同构成一个候选码,则称该候选码为全码。
例如关系:
$$ R(A,B,C) $$
只有属性全集:
$$ {A,B,C} $$
能唯一标识元组,且删除任一属性后都不能唯一标识,则 $ABC$ 是全码。
WARNING · 课件术语纠错 课件把“由多个属性组合而成的主码”称为全码,这是错误的;它应称为复合主码。全码要求码包含关系模式的全部属性。上面的
OrderDetails还含Quantity,所以(OrderID, ProductID)是复合主码而不是全码。
2.4 主属性与非主属性
2.4.1 主属性
只要某属性属于任意一个候选码,它就是主属性。
2.4.2 非主属性
不属于任何候选码的属性是非主属性。
课件员工表:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE,
Name VARCHAR(50),
Department VARCHAR(50)
);
假设 EmployeeID 和 Email 都非空且各自唯一,则候选码为:
$$ {\text{EmployeeID}}, \qquad {\text{Email}}. $$
于是:
- 主属性:
EmployeeID、Email。 - 非主属性:
Name、Department。 {EmployeeID, Name}是超码,但不是候选码,因为Name多余。{Email, Department}也是超码,但不是候选码。
NOTE · SQL 口径 标准 SQL 中
UNIQUE通常允许空值,且不同 DBMS 对多个 NULL 的处理可能不同。要把NOT NULL。
2.5 外码
2.5.1 定义
若关系 $R$ 的属性集 $F$ 引用关系 $S$ 的候选码 $K$,则 $F$ 是 $R$ 的外码(Foreign Key)。
被引用关系可以是另一个关系,也可以是 $R$ 自身。
外码用于建立关系之间的联系,但外码值不要求在引用表中唯一。
2.5.2 SQL 例子
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(50)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
CustomerID INT,
FOREIGN KEY (CustomerID)
REFERENCES Customers(CustomerID)
);
其中:
Customers.CustomerID是被引用码。Orders.CustomerID是外码。- 多个订单可以引用同一客户。
- 若外码列允许空,则没有客户的订单可暂时取 NULL;若业务不允许,应再加
NOT NULL。
WARNING 外码引用的是被引用关系中的候选码/唯一键,不一定只能引用被选定的主码;但引用列必须满足 DBMS 对唯一性的要求。
2.6 各种码的包含关系
课件第二页的同心结构应按概念理解:
属性集合
└─ 超码:能够唯一标识元组
└─ 候选码:最小超码
└─ 主码:被选中的一个候选码
还需补充:
- 主属性不是候选码集合本身,而是出现在任一候选码中的单个属性。
- 外码与上述“唯一标识本关系”的包含链不同,它承担跨关系引用。
- 全码是一个特殊候选码:候选码恰好由全部属性组成。
2.7 关系完整性
数据库完整性指数据的正确性、有效性和相容性。
关系模型的完整性约束包括实体完整性、参照完整性和用户定义完整性。
2.7.1 实体完整性
实体完整性要求主码能够稳定标识每个实体:
- 主码值唯一。
- 主码的任何组成属性都不能为 NULL。
中国数据库教材常把规则表述为“基本关系的主属性不能取空值”;SQL 实现中最直接、强制的规则是 PRIMARY KEY 各列非空且唯一。
2.7.2 参照完整性
若 $F$ 是关系 $R$ 的外码,引用关系 $S$ 的候选码 $K$,则 $R$ 中每个外码值必须:
- 等于 $S$ 中某个现有元组的 $K$ 值;或
- 在允许空值时取 NULL,表示未知或不适用。
删除或修改被引用元组时,可配置:
- 拒绝操作(RESTRICT/NO ACTION)。
- 级联更新或删除(CASCADE)。
- 把外码置空(SET NULL)。
- 设置默认值(部分 DBMS 支持)。
2.7.3 用户定义完整性
用户定义完整性是特定业务的语义约束,例如:
UNIQUE:值唯一。NOT NULL:不允许空值。DEFAULT:缺省值。CHECK:条件检查。- 触发器或应用级复杂约束。
2.7.4 两个不变性
实体完整性和参照完整性是关系模型必须满足的基本完整性规则;用户定义完整性随业务而变化。
2.8 关系代数概览
传统集合运算包括并、差、交和笛卡尔积;专门的关系运算包括选择、投影、连接、除等。
本课件重点讲:
- 笛卡尔积。
- 选择。
- 投影。
- $\theta$ 连接。
- 等值连接。
- 自然连接。
关系代数采用集合语义,结果仍是关系,具有闭包性。
2.9 笛卡尔积
设:
$$ R\subseteq D_1\times\cdots\times D_r, \qquad S\subseteq E_1\times\cdots\times E_s. $$
笛卡尔积为:
$$ R\times S
{(t_R,t_S)\mid t_R\in R,\ t_S\in S}. $$
若:
$$ |R|=m, \qquad |S|=n, $$
则:
$$ |R\times S|=mn. $$
结果的属性数为:
$$ \deg(R\times S)=\deg(R)+\deg(S). $$
课件图中一个 2 行关系与一个 2 行关系做笛卡尔积,得到 4 行;纯笛卡尔积只枚举所有组合,通常没有直接业务含义。
若两关系有同名属性,需要用关系名前缀区分。
2.10 选择
选择(Selection)按条件筛选元组:
$$ \sigma_F(R)
{t\mid t\in R\land F(t)}. $$
课件从学生关系中选择女生:
$$ \sigma_{\text{Ssex}='女'}(\text{Student}). $$
结果只保留赵六所在元组。
选择的特点:
- 横向筛选行。
- 属性列不变。
- 结果元组数不超过原关系。
2.11 投影
投影(Projection)选择指定属性列:
$$ \pi_{A_1,A_2,\ldots,A_k}(R). $$
课件例子:
$$ \pi_{\text{Sno},\text{Sname}}(\text{Student}). $$
投影的特点:
- 纵向选择列。
- 结果度数为 $k$。
- 关系代数采用集合语义,投影后重复元组要消除。
若只投影年龄,原表多行年龄都为 20,结果中只保留一个 (20) 元组。
NOTE SQL 默认是多重集合语义,
SELECT Age会保留重复行;要对应关系代数投影,应使用SELECT DISTINCT Age。
2.12 $\theta$ 连接
$\theta$ 连接是在笛卡尔积上按比较条件筛选:
$$ R\bowtie_{A\ \theta\ B}S
\sigma_{R.A\ \theta\ S.B}(R\times S), $$
其中:
$$ \theta\in{=,\ne,<,\le,>,\ge}. $$
课件第六页“姓名-分数”与“分数线-等级”的例子使用:
$$ \text{分数}>\text{分数线}. $$
系统先形成组合,再保留满足比较关系的元组。例如分数 75 可与分数线 60 匹配,但不能与 80 匹配。
2.13 等值连接
等值连接是 $\theta$ 连接中 $\theta$ 为等号的特殊情况:
$$ R\bowtie_{R.A=S.B}S
\sigma_{R.A=S.B}(R\times S). $$
课件学生表与教师表按:
$$ R.\text{教师号}=S.\text{教工号} $$
连接。
过程:
- 概念上形成 $R\times S$。
- 保留连接属性值相等的元组。
结果中通常同时保留 教师号 与 教工号 两个连接列。
WARNING 等值连接不是“去列、去值相同的行”。它是按相等条件筛选笛卡尔积元组;是否删除重复连接列是自然连接与等值连接的重要区别。
2.14 自然连接
自然连接自动对两个关系中所有同名属性做等值匹配,并在结果中只保留一份同名属性:
$$ R\bowtie S. $$
课件过程可整理为:
- 找出两个关系的同名属性组。
- 保留这些属性值全部相等的元组组合。
- 删除重复的同名属性列。
自然连接与等值连接对比:
| 维度 | 等值连接 | 自然连接 |
|---|---|---|
| 条件 | 显式指定任意属性相等 | 自动使用全部同名属性 |
| 属性名 | 可不同 | 必须同名 |
| 重复连接列 | 通常保留 | 只保留一份 |
| 风险 | 条件明确 | 新增同名属性可能改变结果 |
若两关系没有同名属性,自然连接退化为笛卡尔积。
WARNING 自然连接的同名属性会全部参与匹配,实际 SQL 中常优先显式写
JOIN ... ON ...,避免无意同名列改变语义。
2.15 各运算对行列的影响
| 运算 | 行数 | 列数 | 核心作用 |
|---|---|---|---|
| 笛卡尔积 | $ | R | |
| 选择 | 不增加 | 不变 | 横向筛选行 |
| 投影 | 可能因去重减少 | 减少或不变 | 纵向选择列 |
| $\theta$ 连接 | 不超过笛卡尔积 | 通常为列数之和 | 按比较条件匹配 |
| 等值连接 | 不超过笛卡尔积 | 通常保留两连接列 | 按等号匹配 |
| 自然连接 | 不超过笛卡尔积 | 去掉重复同名列 | 同名属性等值匹配 |
2.16 易错点
- 超码只要求唯一,候选码还要求最小;候选码是最小超码。
- 主码是被选中的候选码,一个关系可以有多个候选码但只选一个主码。
- 复合码由多个属性组成;全码必须包含关系模式的全部属性,两者不能混用。
- 主属性属于任意候选码,不是只属于已选主码。
- 外码不要求在引用表中唯一,它引用被引用关系的候选码/唯一键。
- SQL 的
UNIQUE允许 NULL 的规则因 DBMS 而异,理论候选码不能含未知值。 - 实体完整性保证主码非空且唯一;参照完整性保证外码为空或匹配被引用码。
- 笛卡尔积行数相乘、列数相加。
- 选择筛行不改列,投影选列并在关系代数集合语义下去重。
- $\theta$ 连接是带任意比较符的连接,等值连接只是其中等号情况。
- 等值连接通常保留两边连接列,自然连接自动匹配全部同名属性并删除重复列。
- SQL 默认保留重复行,与纯关系代数集合语义不同。
相关知识
- 科目导航:复试常考科目导航
- 阅读顺序:上一篇:数据库绪论 · 下一篇:数据库安全性
2.17 本节复盘
- 关系模式由关系名、属性和域组成;元组是关系中的一行,关系是笛卡尔积的有限子集。
- 超码唯一标识元组,候选码是最小超码,主码是选定候选码,其余候选码为替代码。
- 复合码强调多个属性联合,全码强调候选码包含全部属性。
- 主属性出现在任一候选码中,非主属性不属于任何候选码。
- 外码引用另一关系或本关系的候选码,用于建立关系并维护参照完整性。
- 实体完整性、参照完整性是关系模型基本规则,用户定义完整性表达具体业务要求。
- 笛卡尔积生成全部组合,选择筛选行,投影选择列并按集合语义去重。
- $\theta$ 连接是在笛卡尔积上按比较条件选择,等值连接使用等号,自然连接自动匹配同名属性并去重连接列。