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

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

一、基础概念先理清

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. 存在多个候选键时,主属性取并集
相关推荐
youngerwang2 小时前
【软件系统架构案例分析每日深耕 Day 17】CBAM成本效益分析:微服务改造决策
微服务·系统架构·cbam·案例每日深耕·微服务改造
办公室马主任18 小时前
制造业数字化的系统架构:从车间数据到经营闭环怎么设计
人工智能·系统架构·制造
物质波波波19 小时前
WS-RPE:面向边缘物理AI实时特征值计算的硬件工作窃取调度器与冗余PE激活架构
人工智能·fpga开发·架构·系统架构·硬件架构
万岳科技前端阿宁1 天前
同城外卖技术中台建设指南:多商家、多门店与多配送模式系统架构解析
系统架构
书香门第1 天前
系统设计练习 - 分布式黑名单服务(design a distributed denylist service)
分布式·系统架构·系统设计
火云牌神2 天前
如何用项目规则给 AI 划定编码边界
人工智能·系统架构·ai编程·vibecoding
@insist1232 天前
系统集成项目管理工程师-架构基础与系统架构
架构·系统架构·软考·系统集成项目管理工程师·软考中项·软件水平考试
科技之门2 天前
精密制造设备国产替代提速:机器视觉系统架构解析与选型评估指南
系统架构·制造
caimouse3 天前
ReactOS 图形系统架构分析
系统架构
黄俊懿4 天前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第三节:CDN扩展-多地址直连
网络·计算机网络·架构·系统架构·cdn·dns·架构设计