键与超键
怎样用函数依赖定义关系的键?
- 定义: 属性集 是关系 R 的键, 当且仅当 R 中不可能存在两个元组在该属性集上取值相同;
- 等价说法: R 的全部属性, 即键函数决定整个元组;
- 落地: 键上的属性值唯一, 声明为
PRIMARY KEY时不允许 NULL;
最小键与超键有什么区别?
- 最小键: 属性集 是键, 且 的任一真子集都不是 R 的键;
- 超键: 任何包含某个键的属性集;
- 关系: 键必定是超键; 最小键是不能再去掉属性的键;
键、最小键、超键三者如何区分?
| 概念 | 定义 | 例子 (属性 A,B,C, 已知最小键为 A) |
|---|---|---|
| 键 | 属性值唯一确定元组 | A |
| 最小键 | 任一真子集都不是键 | A |
| 超键 | 包含某个键的属性集 | A, AB, AC, ABC |
- 判定用途: BCNF 要求每个非平凡依赖的左边是超键, 见 BCNF;
(source: 020-关系数据库设计理论.md §函数依赖/§关系的键/§最小的键/§超键)