关系R(A,B,C,D,E)候选键求解及3NF分解技术咨询
关系模式R的候选键求解、依赖校验与3NF分解
已知前提
关系模式为R(A,B,C,D,E),给定显式函数依赖如下:
- A→B,C
- B→D
一、候选键求解
首先对属性分类:
- L类属性:仅出现在函数依赖左部的属性,即A、E
- R类属性:仅出现在函数依赖右部的属性,即C、D
- LR类属性:同时出现在函数依赖左右部的属性,即B
- N类属性:未出现在任何函数依赖中的属性:无
根据候选键判定规则,L类属性必须全部出现在候选键中,我们计算属性集的闭包(AE)+:
- 初始值:
(AE)+ = {A,E} - 应用依赖A→B,C,加入B、C,更新为
{A,B,C,E} - 应用依赖B→D,加入D,更新为
{A,B,C,D,E},已覆盖R的所有属性
因此该关系模式的唯一候选键为AE。
二、函数依赖校验
不存在未被覆盖的“缺失依赖”,基于Armstrong公理,可以从给定的两个显式依赖推导出所有成立的隐式依赖:
- 自反律导出的所有平凡依赖(例如A→A、AB→A等,所有平凡依赖均自动成立)
- 传递律导出:A→D(由A→B、B→D推导)
- 合并规则导出:A→B,C,D
- 增广律导出的所有扩展依赖(例如AE→任意属性、AB→D等)
如果没有额外业务规则约束,上述就是R上全部成立的函数依赖,无需补充额外的显式依赖。
三、到3NF的分解
我们采用既保持函数依赖、又满足无损连接性的3NF分解方案,步骤如下:
- 先将给定的函数依赖集转化为极小依赖集:现有依赖拆分为单属性右部后为
{A→B, A→C, B→D},不存在冗余左部属性和冗余依赖,已经是极小依赖集 - 将每个独立的函数依赖对应为一个关系模式:
- 由A→B,C 得到
R1(A,B,C),主键为A - 由B→D 得到
R2(B,D),主键为B
- 由A→B,C 得到
- 检查现有模式是否包含候选键:当前两个模式都不包含候选键AE,因此新增模式
R3(A,E),主键为AE
最终满足3NF要求的分解结果为:R1(A,B,C)、R2(B,D)、R3(A,E)
内容的提问来源于stack exchange,提问作者Maho
相关产品推荐
相关产品推荐

