-
函数依赖
首先解释一下
A->B
是什么意思。通俗一点说就是 一个A只有唯一的B与其对应(b = f(a)
)。记
A->B
为 A函数决定B,也可以说是B函数依赖于A什么是完全函数依赖和部分函数依赖?
如果A中有真子集 A’ 使得
A'->B
,则称A->B
为部分函数依赖,否则就是完全函数依赖。如果A集合决定了关系的其他所有属性,且不可分!则A为键码 -
传递函数依赖
对于
A->B,B->C
,则A->C
为传递函数依赖 -
数据库中表的异常
下面给出一张数据库表
SNO Sname Sdept Mname Cname Grade 1 张三 计算机 院长1 计算机网络 90 2 李四 自动化 院子2 操作系统 100 3 李四 自动化 院子2 计算机网络 70 4 王五 自动化 院子2 操作系统 50 异常:
- 冗余数据:
Sname:李四
出现了两次 - 修改异常:修改了一个记录信息,导致另一个记录中的相同信息没有被修改
- 删除异常:删除一个信息,导致信息丢失
- 插入异常:插入一个学生信息,但是由于没有选课,则取消添加。
为了解决这些问题,提出了三个范式
-
第一范式:属性不可分,意思是每个属性不能在分割。(关系型数据库的基准)
-
第二范式:每个非主属性完全函数依赖于键码
对于上表,分解前:
SNO Sname Sdept Mname Cname Grade 1 张三 计算机 院长1 计算机网络 90 2 李四 自动化 院子2 操作系统 100 3 李四 自动化 院子2 计算机网络 70 4 王五 自动化 院子2 操作系统 50 以上的关系中有如下的函数依赖:
Sno->Sname,Sdept Sdept->Mname Sno,Cname->Grade
有上述可以看出
Sno, Cname
为键码,且Grade
完全依赖于键码其他的都是部分依赖于键码
则可以做出如下分解(表一与表二)
表一Sno Sname Sdept Mname 1 张三 计算机 院长1 2 李四 自动化 院长2 3 王五 自动化 院长2 表二
Sno Cname Grade 1 计算机网络 90 2 操作系统 100 2 计算机网络 70 1 操作系统 50 上述两表的函数依赖如下:
表一 Sno->Sname,Sdept Sdept->Mname 表二 Sno,Cname -> Grade
-
第三范式
非主属性不传递函数依赖于键码
分析:
表一的关系可以看出:
Sno->Sdept->Mname
,存在传递函数依赖则表一可以进一步分成如下的表
表11
Sno Sname Sdept 1 张三 计算机 2 李四 自动化 3 王五 自动化 表12
Sdept Mname 计算机 院长1 自动化 院长2
- 冗余数据:
数据库----三范式
最新推荐文章于 2024-04-26 13:29:49 发布