写在最前

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,即满足不同的范式。

目前关系型数据库有六种范式,分别为:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。要求最低的范式是第一范式。第二范式在第一范式的基础上又进一步的添加了要求,其余范式依次类推。

一般说来,数据库只需满足第三范式就行了,而通常我们用的最多的就是第一范式第二范式第三范式,也就是接下来要讲的“三大范式”。

第一范式

第一范式(1NF)用来确保每列的原子性,要求每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元)。

下表为“不满足第一范式”设计的表:

员工编号 姓名 性别 学历信息
101 张德华 本科,南京大学
102 李星驰 专科,北京大学
103 马润发 硕士,香港大学

在上面的表中,“学历信息”列不满足原子性的要求,即可再分,故不满足第一范式,调整如下:

员工编号 姓名 性别 学历 毕业院校
101 张德华 本科 南京大学
102 李星驰 专科 北京大学
103 马润发 硕士 香港大学

第二范式

第二范式(2NF)在 1NF 的基础上,要求表中的每列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。如果一个表满足第一范式,并且除了主键以外的其他列全部都依赖于该主键,那么该表满足第二范式。

下表为 “不满足第二范式” 设计的表:

员工编号 姓名 性别 技能 掌握程度
101 张德华 Java 90%
101 张德华 Oracle 80%
102 李星驰 Java 85%
103 马润发 Java 75%
103 马润发 Mysql 95%

在上图所示的情况中,同一个员工可能掌握不同技能,因此主键必须是“员工编号”和“技能”联合组成。

这样在该表中掌握程度字段不与该表的主键相关,而仅仅是与技能相关。故不满足第二范式,调整如下:

员工编号 姓名 性别
101 张德华
102 李星驰
103 马润发
员工编号 技能 掌握程度
101 Java 90%
101 Oracle 80%
102 Java 85%
103 Java 75%
103 Mysql 95%

第三范式

第三范式(3NF)在 2NF 的基础上,确保每列都和主键列直接相关,而不是间接相关,即限制列的冗余性。如果一个关系满足第二范式,并且除了主键以外的其他列都依赖于主键列,列和列之间不存在相互依赖关系,则满足第三范式。

下表为 “不满足第三范式” 设计的表:

员工编号 姓名 性别 学历 毕业院校 部门编号 部门名称 部门人数
101 张德华 本科 南京大学 d_1 研发一部 10
102 李星驰 专科 北京大学 d_2 研发二部 15
103 马润发 硕士 香港大学 d_2 研发二部 15

上表中,“部门名称”和“部门人数”是间接相关主键“员工编号”,故不满足第三范式,调整如下:

员工编号 姓名 性别 学历 毕业院校 部门编号
101 张德华 本科 南京大学 d_1
102 李星驰 专科 北京大学 d_2
103 马润发 硕士 香港大学 d_2
部门编号 部门名称 部门人数
d_1 研发一部 10
d_2 研发二部 15

范式化反范式化

在实际的数据库设计中,既要考虑三大范式,避免数据的冗余和各种数据操作异常,又要考虑数据访问性能。为了减少表连接,提高数据库的访问性能,也可以允许适当的数据冗余列,这也许就是最合适的数据库设计方案。

范式化

满足范式的数据库设计,就是范式化。

  • 优点:

    • 减少数据冗余;
    • 范式化后的表中只有很少的重复数据,更新时只需要更新较少的数据,所以范式化的更新操作比反范式化更快;
    • 范式化的表通常比反范式化更小;
  • 缺点:
    • 范式化的表在查询时经常需要很多的关联,这回导致性能降低;
    • 增加了索引优化的难度;

反范式化

不满足范式的数据库设计,就是反范式化。

  • 优点:

    • 可以减少表的关联;
    • 可以更好的进行索引优化;
  • 缺点:
    • 数据表存在数据冗余及数据维护异常;
    • 对数据的修改需要更多的成本;

浅聊数据库设计的三大范式相关推荐

  1. mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...

    数据库设计的三大范式: 1.列的原子性,即列是不可再分的 2.表里的每一列都应该与主键有关系, 3.表里的每一列都应该与主键有直接关系, 当使用自增长列不满足2.3范式,是特殊例子,只用在解决较为复杂 ...

  2. 5、数据库设计的三大范式

    为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中的关系必须满足一定的要求,即满足不同的范式. ...

  3. 数据库设计的三大范式:详细

    在大学学习数据库的时候,不明白为什么会学习很多关系代数.设计范式的理论.但是,有了这些理论基础,在遇到问题的时候脑袋会有灵光一闪的感觉.那种感觉很像是大雾天太阳照射大地的感觉,心中一片光亮.^_^ 那 ...

  4. 数据库设计常用三大范式

    前言 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF). ...

  5. 数据库设计的三大范式(举例详解)

     为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就被称为范式.范式是符合某一种设计要求的总结.因此要设计一个结构合理的关系型数据库,就必须要满足下面这三大 ...

  6. 数据库设计的三大范式通俗解释

    一.三大范式通俗解释: (1)简单归纳: 第一范式(1NF):字段不可分: 第二范式(2NF):有主键,非主键字段依赖主键: 第三范式(3NF):非主键字段不能相互依赖. (2)解释: 1NF:原子性 ...

  7. 数据库设计的三大范式

    为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际 ...

  8. 数据库设计的三大范式、BCNF、4NF

    一.理解数据库的范式需要理解几个基本概念: 码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码.相当于键值的意 ...

  9. 数据库设计的三大范式[学习笔记]

    * 概念:设计数据库时,需要遵循的一些规范.要遵循后边的范式要求,必须先遵循前边的所有范式要求 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种 ...

最新文章

  1. 论一枚数据科学家的自我修养
  2. iar升级芯片库_顶10个GPU!阿里巴巴重磅发布含光800芯片
  3. 项目经理问:为什么总是只有我在加班 – 挂包袱现象
  4. 说说浏览器的沙箱机制
  5. 人生百味,浓缩到最后就是一个淡字
  6. 小程序中神秘的用户数据
  7. 真格量化——中性策略交易期权
  8. ARCore-Unity3d教程2 - 基本概念
  9. “Talk is cheap, show me the code”你一行代码有多贵?
  10. 自动安装与配置复制batch脚本
  11. 背包问题(Knapsack Problem) ----- 蛮力法
  12. 淘宝接口 http://ip.taobao.com/service/getIpInfo.php?ip=myip 获取不到手机ip地址
  13. scroll lock键 和 sandy bridge
  14. 学校学生计算机配备标准,规模控制在900人至5000人 每百名学生应有15台电脑
  15. BZOJ3168. 【HEOI2013】钙铁锌硒维生素
  16. 世界经济论坛报告:全方位评估Fintech将如何颠覆金融业竞争格局,包括路径、模式和终局(二)...
  17. SSL在线生成地址惠存
  18. 持续爆点:一对一直播和短视频
  19. 找字符串中出现次数最多的字符
  20. Unity3d Android SDK接入解析(三)接入Android Library的理解(爱贝云支付为例)

热门文章

  1. SDNUOJ 1025.马踏飞燕
  2. 关于文件夹同步的那点事
  3. 思维模型 5Why分析法
  4. Deep Learning(深度学习)学习笔记整理系列之(三)
  5. 中M22春C、Java入门练习-7.9
  6. c语言struct的作用和用法,c语言中的关键字struct(结构体)的用法
  7. 关于CSDN博客(积分,等级与勋章)
  8. 对在校本科毕业生的一点应聘建议
  9. axis equal的作用
  10. Springboot中添加contextPath