数据库设计的三大范式:

1、第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式。
上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

2、第二范式(确保表中的每列都和主键相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键。
订单信息表
这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。
这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

3、第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

BCNF范式

BCNF是3NF的改进形式
一个满足BCNF的关系模式的条件:
1.所有非主属性对每一个码都是完全函数依赖。
2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。

如上表
(仓库名,管理员)->(物品名,数量)
(管理员,物品名)->(仓库名,数量)
但是(仓库名)->(管理员) 不满足第二条
所以需要改成两种表:
第一张:仓库名,管理员
第二张:仓库名,物品名,数量

反范式

一般说来,数据库只需满足第三范式(3NF)就行了。
没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,达到以空间换时间的目的。
〖例〗:有一张存放商品的基本表,如表1所示。“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。
在Rose 2002中,规定列有两种类型:数据列和计算列。“金额”这样的列被称为“计算列”,而“单价”和“数量”这样的列被称为“数据列”。

数据库三大范式、BCNF范式、反范式相关推荐

  1. mysql范式与反范式_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”...

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  2. mysql范式与反范式_给女同事讲解MySQL数据库设计范式与反范式,她夸我“技术好”...

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  3. Java学习笔记:数据库中的范式和反范式

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出率.优雅的数据库,否则可能会设计出 ...

  4. 数据库中的范式和反范式详解!

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出率.优雅的数据库,否则可能会设计出 ...

  5. 从第一范式到第二范式所做的操作是_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

  6. Java学习之数据库中的范式和反范式

    范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法.数据库的设计范式是数据库设计所需要满足的规范.只有理解数据库的设计范式,才能设计出高效率.优雅的数据库,否则可能会设 ...

  7. MySQL之库表设计篇:一到五范式、BC范式与反范式详解

    引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...

  8. mysql 怎么反选_MySQL 范式与反范式的选择 | 剑花烟雨江南

    对于任何给定的数据通常有很多种表示方法,从完全的范式化到完全的反范式话,以及两者的折中.在范式化的数据库中,每个事实数据会出现并只出现一次.相反,在反范式化的数据库中,信息是冗余的. 如果不熟悉范式和 ...

  9. 数据库三大范式(1NF,2NF,3NF)及ER图

    数据库三大范式(1NF,2NF,3NF)及ER图 百度官方解释: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据 ...

  10. mysql三大范式 答案_数据库三大范式的个人理解~!

    下面引用的是百度文库的解释,之后是我自己的理解,如果我写的理解不了可以看下百度文库的解释! 百度文库: 范式简介编辑 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求 ...

最新文章

  1. 有多少人在51job上找到工作_人不在日本,找到日本工作的最佳方案
  2. android studio串号,AndroidStudio使用常见问题集锦
  3. System Control Processor Firmware简介
  4. HDU 5527:Too Rich(DFS+贪心)***
  5. web前端零基础入门学习!前端真不难!
  6. POJ 2195 Going Home 最小费用最大流
  7. python 测试用例的无输入_如何为无参数方法自动生成测试用例?
  8. NandFlash详述
  9. oo面向对象第一单元总结
  10. 工业以太网交换机和普通商用交换机的区别
  11. OpenCV修养(一)——引入
  12. NSString,最美的创建方式也最毒
  13. 构建集中式会话的分析与实践(一)
  14. Python+Flask+MysqL的web建设技术过程
  15. android dialog动画_Android超级酷炫实用的UI框架
  16. 【视频云端SDK】关于安卓指令集的兼容,Library xxx.so not found
  17. wiresshark抓包
  18. 用proteus来看二极管的压降
  19. 浅谈游戏辅助程序的制作 【经典】
  20. edge播放视频HTML5黑屏,Win10 edge浏览器播放视频黑屏解决方法

热门文章

  1. Mysql数据库实现分页查询
  2. 国内信息安全行业常见法律法规介绍及个人理解
  3. 控制台接收信息转发_微信多群转播能够起到什么作用?微信群聊录制课程语音转发多群怎么操作?...
  4. 支付宝转账银行卡/隐藏卡号
  5. php怎么使用类库,如何使用 Composer 引用类库
  6. 励磁电感公式_ANSYS Maxwell 电感矩阵计算
  7. 计算机ps基础知识大全,全国计算机ps一级考试题型
  8. MFiX存储ReactionRates的模块
  9. c语言红外解码程序,红外线遥控器软件解码原理和程序(C语言)
  10. iis访问服务器文件夹权限设置,Windows中合理设置共享文件夹访问权限