跳到主要内容

键与超键

怎样用函数依赖定义关系的键?​

  • 定义: 属性集 {A1A2⋯An}\{A_1A_2\cdots A_n\} 是关系 R 的键, 当且仅当 R 中不可能存在两个元组在该属性集上取值相同;
  • 等价说法: A1A2⋯An→A_1A_2\cdots A_n \rightarrow R 的全部属性, 即键函数决定整个元组;
  • 落地: 键上的属性值唯一, 声明为 PRIMARY KEY 时不允许 NULL;

最小键与超键有什么区别?​

  • 最小键: 属性集 AA 是键, 且 AA 的任一真子集都不是 R 的键;
  • 超键: 任何包含某个键的属性集;
  • 关系: 键必定是超键; 最小键是不能再去掉属性的键;

键、最小键、超键三者如何区分?​

概念定义例子 (属性 A,B,C, 已知最小键为 A)
键属性值唯一确定元组A
最小键任一真子集都不是键A
超键包含某个键的属性集A, AB, AC, ABC
  • 判定用途: BCNF 要求每个非平凡依赖的左边是超键, 见 BCNF;

(source: 020-关系数据库设计理论.md §函数依赖/§关系的键/§最小的键/§超键)