数据库三范式

♣ \color{red}{\clubsuit}

1、三范式

第一范式:无重复的列,是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

例如,S-L-C(Sno,Sdept,Sloc(宿舍),Cno,Grade),该表存在(Sno,Cno)–>Grade,Sno–>Sdept,(Sno,Cno)–>Sdept,Sno–>Sloc,(Sno,Cno)–>Sloc,Sdept–>Sloc;该表中就存在Sno和Cno推出Sdept,同时Sno又能推出Sdept,即存在部分依赖;

第二范式:属于第一范式,且每一个非主属性的完全函数依赖于任何一个候选码(简单理解,就是第二范式消除了部分依赖,但存在完全函数依赖)

第三范式:满足第二范式的基础上,不存在传递函数依赖(即第三范式既消除了传递函数依赖有消除了部分函数依赖)
一个关系模式不属于2NF,会产生插入异常、删除异常,修改复杂的问题;

2、名词解释

1. 函数依赖

函数依赖:
某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。

平凡函数依赖:
当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
2.若 X → Y,但 Y 为 X 的子集, 则称 X → Y 是平凡的函数依赖
平凡函数依赖: (Sno, Cno) → Sno ,(Sno, Cno) → Cno。

非平凡函数依赖:
当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
例:在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade。

完全函数依赖:
设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
若 x → y 并且,对于 x 的任何一个真子集 x1,都不存在 x1 → y 则称y完全依赖于x。
例:成绩表(学号,课程号,成绩)关系中,
(学号,课程号)→ 成绩,学号 -\→ 成绩,课程号 -\→ 成绩,所以(学号,课程号)→ 成绩 是完全函数依赖。

部分函数依赖:
设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
若 x → y 并且,存在 x 的真子集 x1,使得 x1 → y, 则 y 部分依赖于 x。
例:学生表(学号,姓名,性别,班级,年龄)关系中,
(学号,姓名)→ 性别,学号 → 性别,所以(学号,姓名)→ 性别 是部分函数依赖。

传递函数依赖:
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
若x → y并且y → z,而y -\→ x,则有x → z,称这种函数依赖为传递函数依赖。
例:关系S1(学号,系名,系主任),
学号 → 系名,系名 → 系主任,并且系名 -\→ 学号,系主任 -\→ 系名,所以学号 → 系主任为传递函数依赖。

函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖

2. 码

♡ \color{red}{\heartsuit} 候选码:如果关系中的某一属性组的值能唯一地标识一个元祖,则称该属性组为候选码;候选码是从超码中选出的
♣ \color{red}{\clubsuit} 主码:如果一个关系有多个候选码,则选定其中一个为主码;
♢ \color{red}{\diamondsuit} 主属性:候选码的诸属性称为主属性;
♠ \color{red}{\spadesuit} 非主属性:不包含在任何候选码中的属性称为非主属性;

例如三个关系:
学生信息表(学号、姓名、性别、出生年月、籍贯、所属学院) //学号 是主键/主码
课程表(课程号,课程名称,学分) //课程号 是主键/主码
成绩表(学号,课程号,成绩) //学号 是外码;课程号 是外码

例如:学生是一个实体,则学生的集合是一个实体集,而超码是用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属性:学号,身份证号,姓名,性别。因为通过学号可以找到唯一一个学生,所以{学号}是一个超码,同理{学号,身份证号}、{学号,身份证号,姓名}、{学号,身份证号,姓名,性别}、{身份证号}、{身份证号,姓名}、{身份证号,姓名、性别}也是超码。在这里,因为不同的学生可能拥有相同的姓名,所以姓名不可以区别一个学生,既{姓名}不是一个超码,{性别}、{姓名、性别}也不是。
候选码:{学号}、{身份证号};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值