【软考架构】候选键求解与主属性 / 非主属性判定

候选键求解 + 主属性/非主属性判定(数据库范式核心考点)

一、基础概念先理清

1. 候选键(候选码)

设关系模式 (R(U,F))(R(U,F))(R(U,F)),UUU 是属性集,FFF 函数依赖集。

  • 候选键 K
    1. 闭包 K+=UK^+ = UK+=U(K可以推导出所有属性)
    2. K的任何真子集闭包 ≠ U(最小性,不能再去掉属性)

满足「完备性 + 最小性」的属性组就是候选键。

主键:从候选键里任选一个。

2. 主属性 & 非主属性

  • 主属性:任意一个候选键中包含的属性
  • 非主属性:不出现在任何候选键里的属性

重点易错:只要属性属于某一个候选码,就是主属性;多个候选键存在时,合并所有候选键的属性都是主属性。


二、求解候选键标准算法(属性分类法,考试通用)

步骤1:把所有属性分成4类

给定 (R(U,F))(R(U,F))(R(U,F))

  1. L类(仅出现在函数依赖左边):一定属于某个候选键
  2. R类(仅出现在函数依赖右边)一定不在任何候选键中
  3. LR类(左右两边都出现):有可能在候选键,需要组合尝试
  4. N类(左右都不出现):一定属于某个候选键

步骤2:求解流程

  1. 先计算L ∪ N 属性组的闭包
    • 若闭包 = U:boldsymbolLcupNboldsymbol{Lcup N}boldsymbolLcupN 就是唯一候选键
  2. 若闭包 ≠ U:依次和 LR 类属性逐个、两两......组合,求闭包,找到满足最小性的组合。
  3. 剔除超键(存在真子集也是候选键),剩下全部候选键。

✅ 超键:能推出全体,但不满足最小性;候选键 = 最小超键

步骤3:判定主/非主属性

收集所有候选键包含的属性 → 主属性

剩下属性 → 非主属性


三、闭包计算方法(X+X^+X+)

求属性集X所能推导出的全部属性:

  1. 初始化 X+=XX^+ = XX+=X
  2. 反复扫描F:若存在 A→BA\to BA→B,左边全部在 X+X^+X+ 中,就把B加入 X+X^+X+
  3. 直到一轮扫描没有新增属性,停止

示例演示

例:R(A,B,C,D), F={A→B, BC→D, D→A}R(A,B,C,D),\ F=\{A\to B,\ BC\to D,\ D\to A\}R(A,B,C,D), F={A→B, BC→D, D→A}

  1. 列出所有依赖左右属性
    左:A、BC、D
    右:B、D、A
    属性:A,B,C,D
    分类:
    L类:C(只出现在左侧)
    R类:无
    LR类:A,B,D
    N类:无

第一步:先算{C}+\{C\}^+{C}+

{C}+={C}≠{A,B,C,D}\{C\}^+ = \{C\} \neq \{A,B,C,D\}{C}+={C}={A,B,C,D},需要搭配LR属性尝试

依次组合:

  1. AC+\boldsymbol{AC}^+AC+

    {A,C}\{A,C\}{A,C}

    A→B⇒+BA\to B \Rightarrow +BA→B⇒+B;BC→D⇒+DBC\to D \Rightarrow +DBC→D⇒+D

    AC+={A,B,C,D}=UAC^+=\{A,B,C,D\}=UAC+={A,B,C,D}=U

    检查最小性:去掉A,{C}+≠U\{C\}^+\neq U{C}+=U;去掉C,{A}+≠U\{A\}^+\neq U{A}+=U

    ⇒AC\Rightarrow AC⇒AC 是候选键

  2. BC+\boldsymbol{BC}^+BC+

    {B,C}\{B,C\}{B,C},BC→D⇒+DBC\to D\Rightarrow +DBC→D⇒+D;D→A⇒+AD\to A\Rightarrow +AD→A⇒+A

    BC+={A,B,C,D}=UBC^+=\{A,B,C,D\}=UBC+={A,B,C,D}=U,最小性成立 ⇒ BC候选键

  3. DC+\boldsymbol{DC}^+DC+

    {D,C}\{D,C\}{D,C},D→A⇒+AD\to A\Rightarrow +AD→A⇒+A;A→B⇒+BA\to B\Rightarrow +BA→B⇒+B

    DC+=UDC^+=UDC+=U,最小性成立 ⇒ DC候选键

✅ 全部候选键:AC、BC、DC\boldsymbol{AC、BC、DC}AC、BC、DC

判定主属性/非主属性

候选键属性集合:{A,B,C,D}\{A,B,C,D\}{A,B,C,D}

所有属性都出现在候选码中

主属性:A,B,C,D;无任何非主属性

这种关系不存在非主属性,一定满足3NF,同时满足BCNF需要额外校验。


四、典型例题练习(自测)

例题1

KaTeX parse error: Can't use function '\(' in math mode at position 20: ...B,C,D,E),\ F=\{\̲(̲\boldsymbol{AB}...

属性分类:

L:A、B

R:E

LR:C、D

N:无

计算 {A,B}+\{A,B\}^+{A,B}+

KaTeX parse error: Can't use function '\(' in math mode at position 21: ...\}\xrightarrow{\̲(̲\boldsymbol{AB}...

KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲\boldsymbol{AB}...

候选键只有:KaTeX parse error: Can't use function '\(' in math mode at position 13: \boldsymbol{\̲(̲\boldsymbol{AB}...

主属性:A、B

非主属性:C、D、E

例题2(高频易错题)

R(A,B,C),F={A→C,B→C}R(A,B,C),F=\{A\to C,B\to C\}R(A,B,C),F={A→C,B→C}

分类:

L:A、B

R:C

LR:无

N:无

{A}+={A,C}≠U\{A\}^+=\{A,C\}\neq U{A}+={A,C}=U

{B}+={B,C}≠U\{B\}^+=\{B,C\}\neq U{B}+={B,C}=U

KaTeX parse error: Can't use function '\(' in math mode at position 3: \{\̲(̲\boldsymbol{AB}...

候选键:KaTeX parse error: Can't use function '\(' in math mode at position 13: \boldsymbol{\̲(̲\boldsymbol{AB}...

主属性:A,B;非主属性:C


五、常见坑总结

  1. ❌ 误区:主键里的才叫主属性
    ✅ 正确:所有候选键包含的属性都是主属性,不止主键!
  2. ❌ 把超键当成候选键
    ✅ 必须验证最小性;只要还能删掉某个属性依旧覆盖全集,就只是超键
  3. R类属性绝对不可能属于候选键
  4. 存在多个候选键时,主属性取并集
相关推荐
雨神聊编1 天前
设备指纹之建立设备库
系统架构
晏宁科技YaningAI2 天前
VoIP系统的工程实现模型:从信令控制到媒体传输的完整架构解析
网络·人工智能·架构·系统架构·信息与通信
尽兴-2 天前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
微三云 - 廖会灵 (私域系统开发)2 天前
电商秒杀系统架构设计:高并发场景下的流量削峰与防超卖实践
系统架构
Macbethad2 天前
基于WPF与.NET的洁净厂房数据孪生平台技术方案:架构、实现与SEMI标准实践
数据库·系统架构
(~ ̄▽ ̄)~凤凰涅槃3 天前
007_建立你的架构师知识地图
系统架构
(~ ̄▽ ̄)~凤凰涅槃3 天前
003_考试题型_分值与时间分配
系统架构
(~ ̄▽ ̄)~凤凰涅槃3 天前
005_案例分析的阅卷逻辑与答题模板
系统架构
(~ ̄▽ ̄)~凤凰涅槃3 天前
004_综合知识75题的得分策略
系统架构