- 错误关系模式举例:关系模式R(学生姓名,选修的课程名,任课老师,任课老师地址)
- 数据冗余:不同学生的任课老师数据可能重复
- 修改异常:修改了一个一条记录的任课老师地址后,其它同一个老师的地址都要修改
- 插入异常:如果不知道学生姓名,那么任课老师的信息就无法插入数据库
- 删除异常:删除了一个学生信息后,任课老师的信息也会被删除
- 函数依赖与键
- X函数决定Y:
- 如果R(U)是属性U上的一个关系模式,X和Y是U的子集(也即是X和Y是字段子集),对于任意的u[X]=v[X]都有u[Y]=v[Y]
- 举例:
- 完全函数依赖:在R(U)中,如果X→ Y,并且对于X的任意真子集Xn,都有Xn→ Y不成立,则Y对X完全函数依赖
- 部分函数依赖:在R(U)中,如果X→ Y,并且对于X的任意真子集Xn,可能Xn→ Y成立,则Y对X不完全函数依赖
- 键(关键字)
- 候选键: 在R(U)中,如果X→ U,并且对于X的任意真子集Xn,都有Xn→ U不成立,则U对X完全函数依赖,则称X为R的一个候选键
- 主键:用户正在使用的候选键叫做主键
- 外键:如果两个关系拥有公共属性,并且公共属性是一个关系的主键,则称公共属性为另外一个键的外键
- 举例:
- 使用图示法求候选键
- 两个步骤
- 用关系模式的函数依赖关系用有向图表示,其中顶点表示属性,弧表示属性之间的依赖关系
- 找出入度为0的属性集,并以该属性集作为起点,如果能遍历完所有的节点,则表示该顶点为候选键;如果不能则继续合并其它顶点到属性集中再次遍历
- 举例:
- 两个步骤
- 范式(NF:Normal Form)
- 第一范式(1NF)
- 概念: 如果关系模式R中,如果一个分量不可再分为其它数据项,则称R满足1NF
- 举例:
- 第二范式(2NF)
- 概念:如果关系模式R中,再满足1NF基础上,如果每个非键属性完全依赖于候选键时,则称R满足2NF
- 举例:
- 第三范式(3NF)
- 概念: 如果关系模式R中,再满足2NF基础上,如果R中没有非键属性传递依赖于候选键,则称R满足3NF
- 举例:
- BCNF
- 概念: 如果关系模式R中,再满足1NF基础上,如果R中没有属性传递依赖于候选键,则称R满足BCNF
- 判断方法
- 找出所有候选键
- 所有的非键属性对于任何候选键都是完全依赖
- 所有的候选键对每一个不包含它的候选键都是完全依赖
- 每一个函数依赖的左边都必须包含候选键
- 举例:
第四范式(4NF)
多值依赖:对于关系R(U,F),X,Y是U的非空子集,Z = U- X - Y,Z也非空,从x∈X,z∈Z取值,如果(x,z)能决定y属于Y,并且这个决定与z无关,则称为Y多值依赖于X,记为X→ → Y
如果关系模式R中,在满足1NF基础上,若对于任何X→ → Y,X必包含R的候选键,则称R满足4NF
全码关系:如果关系R(U)中所有属性合在一起形成主键则称为全码关系
举例:
- 关系模式分解
概念:将一个大的关系模式分解为小的关系模式
分解时考虑因素
函数保持依赖
是否无损联接