`
piperzero
  • 浏览: 3470835 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

深入浅出数据库设计三范式

 
阅读更多

设计良好结构的数据库,可以有效减小数据冗余,减少增删改中出现的问题。深入理解数据库设计的三范式,对于设计“健壮的数据库“十分有必要。数据库三范式是设计数据库 时参考的准则,接下来我们一一进行介绍:


一、数据库第一范式

数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(保持数据的原子性

数据原子性很好理解,就是表中的字段不可再分。符合数据库第一范式的表,每个字段表意明确,看个例子:


这是一张简单的员工信息表,其中有工号、姓名、电话三个字段。通过电话这个字段获得的信息有可能是家庭电话,或是工作地点的电话,或是手机,因此表达的信息并不明确,我们可以改成这样:


那这样改完以后,表中所表达的信息就非常明确了。


二、数据库第二范式

在满足第一范式的基础上,实体的每个非主键属性完全函数依赖于主键属性(消除部分依赖

主键:凡是接触过数据库的人,肯定都会知道主键,主键明确标识了每条记录,一般是一个字段,也可以由两个或两个字段组成。

依赖:对于X的每个值,Y都有一个值与之对应,反过来则不一定不成立,这叫做X函数决定Y,Y函数依赖X(X往往是主键)。

还拿上面的那张表举来说,对于每个工号,都有一个姓名与之对应,即工号决定姓名,姓名依赖工号;但由于员工之间可能有重名,一个姓名可能对应多个工号,所以姓名不能决定工号。

部分依赖:当主键由两个或两个以上字段构成,而表中的某些信息通过主键的一个字段就能唯一确定,我们称这样的依赖关系为部分依赖,比如这个例子:


学生选课(学号,姓名,专业,课程号,课程名,成绩),该表中一个学生可以选多门课,一门课有多个学生。学号和课程号可以唯一确定一条记录,因此用学号和课程号做主键。

表中的姓名、专业通过主键中的学号就能唯一确定,而课程名通过课程号唯一确定,这就是部分依赖,这样的设计不符合第二范式。


不符合第二范式会带来哪些问题呢?

1、数据信息冗余,可见上表

2、增删改会出现问题,比如有一门《微机原理》没有人选,那么由于缺少学号(主键之一)那么这门课就不能出现在表里。

如何解决呢,我们可以用关系分解的方法消除部分依赖,将上表改成如下三张表:


数据库第三范式

在满足第二范式的基础上,在实体中不存在非主键属性传递函数依赖于主键属性。(表中字段[非主键]不存在对主键的传递依赖

传递依赖:A依赖于B,B依赖于C,就可以说A依赖C。看这样一张表:

这张表中有如下决定关系: 学号-->姓名,性别,系号-->决定系名,宿舍号-->决定宿舍电话,也有 学号-->系名,学号-->宿舍电话。

在这样一张表中则存在着传递依赖。也就是系名依赖系号,系号依赖学号,那么间接的系名依赖学号,宿舍号、宿舍电话和学号之间也有同样的关系。这样设计表的同样会带来数据冗余,操作异常等问题。那么我们同样可以用关系分解的分解的方法来消除传递依赖,将这张表分成三张表:

这就是数据可设计的三范式了,在设计数据表的过程中注意三范式的应用,多多实践,有助于对三范式有更深入的理解。






分享到:
评论

相关推荐

    SQL Server 2008数据库设计与实现

    本书深入浅出地介绍了目前世界上最受欢迎的数据库管理系统之一——SQL Server。全书共分三个部分:第一部分阐释了数据库的基本概念,讲解了数据库建模语言;第二部分展示了从概念建模到在SQL Server 2008上真正实现...

    数据库系统设计(第七版)

    一本介绍数据库设计的经典教材,深入浅出,对新手和资深开发人员都有裨益。

    系统学习Mysql

    系统学习Mysql 深入浅出MySQL.pdf 数据库设计三大范式.docx MySQL函数大全及用法示例.docx MySQL笔记.pdf

    数据库系统概论新技术篇-大数据的应用特征.pptx

    我们需要一种探索型的 信息需求工具,兼顾搜 索与分析的技术手段, 支持用户在微观层面和 宏观层面进行自由切换 的、深入浅出的、交互 式地发现数据价值。 大数据价值发现手段:数据探索 An Introduction to ...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    深入搜索引擎--海量信息的压缩、索引和查询

    《深入搜索引擎:海量信息的压缩、索引和查询》理论和实践并重,深入浅出地给出了海量信息数据处理的整套解决方案,包括压缩、索引和查询的方方面面。其最大的特色在于不仅仅满足信息检索理论学习的需要,更重要的是...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    ├─面试必问-微服务架构深入浅出讲解springcloud │ 微服务架构 --深入浅出讲解springcloud.mp4 │ ├─面试必问-教你手写MyBatis框架 │ 一小时教你手写MyBatis框架.mp4 │ ├─面试必问-架构杀手锏——java混乱...

    Oracle 教程电子书 3本压缩 精心推荐

    2.深入浅出Oracle:DBA入门、进阶与诊断案例 ——盖国强 3.Oracle 书籍《Oracle 11g 实用教程》 引言 ............................................................................................................

    Managing Gigabytes: Compressing and Indexing Documents and Images

    本书理论和实践并重,深入浅出地给出了海量信息数据处理的整套解决方案,包括压缩、索引和查询的方方面面。其最大的特色在于不仅仅满足信息检索理论学习的需要,更重要的是给出了实践中可能面对的各种问题及其解决...

    vc源代码合集0951.rar

    2012-06-12 11:55 3,721,136 VC++动态链接库(dll)编程深入浅出.rar 2012-06-12 13:02 23,185 VC++图像平滑处理+程序.rar 2012-06-12 12:12 45,056 VC++操作INI配置文件的实现.doc 2012-06-12 11:48 11,728,284 VC++...

Global site tag (gtag.js) - Google Analytics