三个范式的理解
来源:互联网 发布:软件无线通信 芯片 编辑:程序博客网 时间:2024/05/01 09:47
三范式理解
第一范式: 属性不可分割性
如: 学生表(姓名,年龄,性别,班级,宿舍号,家庭成员) 其中家庭成员为可分割的所以不符合第一范式
第二范式: 不存在组合关键字中的某些字段决定非关键字段的情况
如:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分) 这个数据库表不满足第二范式,因为存在如下决定关系:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
部分属性依赖于关键字中的部分字段。
(1) 数据冗余:
同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
(2) 更新异常:
若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。
(3) 插入异常:
假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
(4) 删除异常:
假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
第三范式:每个非关键字之间相互独立,并依赖于关键字,不能存在传递依赖关系。
例:学生(学号,姓名,所在系,系名称,系地址)
关键字学号决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。
但这关系肯定有大量的冗余,有关学生所在的几个属性:所在系,系名称,系地址将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。即:学号-> 所在系。 而所在系-> 学号却不存在,所在系-> 系地址, 因此关键字:学号对所在系函数决定是通过传递依赖,学号-> 系地址,实现的。也就是说,学号不直接决定非主属性系地址。
解决目地:每个关系模式中不能留有传递依赖。
解决方法:分为两个关系 S(学号,姓名,所在系),D(所在系,系名称,系地址)
注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系。
- 三个范式的理解
- 通俗的理解三个范式
- 数据库三个范式的理解
- 数据库三个范式的理解
- 数据库三个范式的理解
- 我理解的三个范式
- 理解数据库设计的三个范式
- 关于MySql三个范式的理解
- 用口诀理解三个范式
- 通俗地理解三个范式
- 通俗地理解数据库设计的三个范式
- 通俗地理解数据库设计的三个范式
- 数据库的三个范式
- 数据库的三个范式
- 古老的 三个范式
- 数据库的三个范式
- 数据库的三个范式
- 数据库的三个范式
- 在32位系统下使用MongoDB的一点心得
- libgdx之tiledmappacker,texturepacker工具类应用
- Matlab伪彩色图——pcolor命令
- Java中不依赖于第三方库使用OpenSSL生成的RSA公私钥进行数据加解密
- js+flash(as3)实现复制文字内容到剪切板
- 三个范式的理解
- 将TXT中的数据读入数据库
- C# sql数据的导入导出 来自huangshunle的专栏
- HTTP 状态代码
- 爱新觉罗·载沣
- html中iframe用法解析
- 黑马程序员--File类的笔记(二)—— 一些应用的小例子
- 以https方式访问google
- html+正则_网页版申请表