分解为BCNF范式的方法(详细讲解)

简介: 分解为BCNF范式的方法(详细讲解)

直接在例题中感悟:


R={A,B,C,D,E,F,G},F={A->B,A->C,C->D,C->E,E->FG},将R分解为BCNF


http://t.csdn.cn/4D939有详细解最小依赖集的步骤,建议先看这个,接下来解题:


分解的步骤可以概括为:

1.求R的闭包  

2.根据闭包求函数依赖  

3.根据函数依赖求L,R,LR,N,求出超键  

4.若左边的字母不是超键,继续分解(回到第1步)

第一轮分解:


L:A


R:B,D,F,G


LR:CE


N为空集


A一定为候选键,x0=A,x1=ABCDEFG=U


所以A为唯一候选键


R中候选键为A,又因为F中C->D,C不是超键,所以要将R分解为


R1(CD),R2(ABCEFG)

第二轮分解:


对于R2(ABCDEFG)以下用“A+”表示闭包:


A+=U


C+=CDEFG


E+=EFG


所以R2中,F2={C->EFG,E->FG,A->BCEFG}


R中候选键:L:A,R=FGB,LR=CE,N为空


所以R2中的候选键为A,C->EFG中C不是超键,所以将R2分解为


R3(CEFG)R4(ABC)

第三轮分解:


对于R4的函数依赖:A->BC


R3(CEFG)的闭包


C+=CEFG


E+=EFG


所以F3中{C->EFG,E->FG}


因为R3中超键是C,E->FG不是超键,所以将R3分解为


R5=EFG,R6=CE


R5的函数依赖  E->FG   R6的函数依赖C->E,都是BCNF

综上R分解为p={CD,ABC,EFG,CE}


对应函数依赖集为{E->FG,C->E,A->BC,C->D}


目录
相关文章
|
机器学习/深度学习 小程序 前端开发
微信小程序——实现对话模式(调用大模型图片生成)
微信小程序——实现对话模式(调用大模型图片生成)
1319 3
|
C++ 芯片 编译器
STM32F103标准外设库—— 新建工程与库函数(四)
STM32F103标准外设库—— 新建工程与库函数(四)
786 0
STM32F103标准外设库—— 新建工程与库函数(四)
|
安全 数据库
通过E-R理解 主键和外键的关系
实例 现有课程和教师两个实体,课程实体的属性有课程名称、课程编号、课程属性、考试类型;教师实体的属性包括姓名、工号、职称;一门课程可以有多个教师,且每一位教师可以教授多门课程。教师每教授一门课有课序号。
7728 1
通过E-R理解 主键和外键的关系
|
网络协议 安全 Python
python中socket客户端关闭连接
【4月更文挑战第7天】本教程介绍了如何在TCP客户端中正确关闭连接。使用`close()`方法可关闭Socket连接并释放资源,示例代码显示了在正常和异常情况下关闭连接的方法。注意异常处理以确保在任何情况下都能关闭连接,并避免并发操作同一Socket,以保证连接的稳定和安全。掌握这些技巧对编写健壮的TCP客户端至关重要。
1610 2
|
编译器
区分LR(0),SLR(1),LR(1)和LALR(1)
区分LR(0),SLR(1),LR(1)和LALR(1)
2862 1
|
关系型数据库 Linux 数据库
Linux系统安装Postgre和Postgis教程
本文详细介绍了PostgreSQL/PostGIS的卸载与安装步骤。卸载部分涵盖Docker、Yum/RPM及源码编译安装的清理方法,包括停止服务、删除容器/包、清理残留文件和环境变量等操作,并强调卸载前需备份数据库数据。安装部分提供在线yum安装和离线源码编译两种方式,前者简单快捷,后者需准备依赖(如gcc、readline-devel等)、创建用户组、初始化数据库及配置访问规则。每步均附带命令示例,确保操作清晰明确。
1810 0
|
Web App开发
求最小函数依赖集:求候选键(例题讲解)超详细,易理解
求最小函数依赖集:求候选键(例题讲解)超详细,易理解
814 1
判断是否保持函数依赖的方法
判断是否保持函数依赖的方法
945 2
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
网络安全
client_loop: send disconnect: Connection reset by peerB/s4-5
client_loop: send disconnect: Connection reset by peerB/s4-5