`

数据库范式总结

阅读更多

数据库表结构设计时,遵从一定的范式(NF,Noraml Form)可以减少数据冗余和操作异常。

第一范式(1NF)

1NF指的是每个属性值都是不可再分的。

满足1NF的关系被称为规范化的关系,1NF也是关系模式应具备的最起码的条件。

比如有这样一张表user的两列:

  • name
  • phone_number

phone_number这一列只存储一个电话号码,如果一条数据同时存储了住宅电话和手机号码,比如:“010-65576558,13765556765”,那么这个属性是可以再分的,违背了1NF。

第二范式(2NF)

2NF要求去除局部依赖。

也就是说,表中的属性完全依赖于全部主键,而不是部分主键。

比方说user表包含下面几列:

  • user_id
  • name
  • phone_number
  • job_id
  • job_description

其中job_description依赖于job_id,而不是全部主键(user_id,job_id),所以违背了2NF。这时可以把job部分单独抽取成一张job表,去除冗余。

第三范式(3NF)

3NF要求消除非主属性对候选键的传递依赖。

比如user表现在组成如下:

  • user_id
  • name
  • classification

仅有user_id是主键,用户姓名依赖于主键user_id,根据姓名name来给用户分类,而用户可能重名,因此name是允许重复的,再有用户分类classification依赖于用户姓名。这张表已经满足了2NF,即属性依赖于全部主键user_id,但是形成了从classification到非候选键name再到主键user_id的传递依赖,不符合3NF。

BC范式(BCNF)

3NF中只是排除了非主属性对候选键的传递依赖,于是更进一步,BCNF还要求消除主属性对候选键在内的传递依赖。

user表现在变成这样:

  • user_id
  • card_id
  • passport_id

其中护照号passport_id是主键,身份证号card_id和用户号user_id都是候选键,存在主属性passport_id到card_id再到候选键user_id的传递依赖。

第四范式(4NF)

4NF是要消除多值依赖。

在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。

比如user表:

  • user_id
  • position
  • salary_level

user_id是主键,薪水等级salary_level看似被用户id直接确定,但其实薪水等级是根据职位position来确定的,和用户本身无直接关系,这就是多值依赖。

第五范式(5NF)、DK范式(DKNF)和第六范式(6NF)

5NF要求消除连接依赖,并且必须保证数据完整。多值依赖是连接依赖的特殊情况,定义稍复杂。这几种范式已经很少涉及。

在保证数据完整性基础上,通常达到3NF,有时达到2NF已经足够了,追求过高的NF级别会导致混乱的库表,大量的多表连接查询,性能低下。

文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

2
0
分享到:
评论
2 楼 lvwenwen 2013-02-16  
反范式反范式
1 楼 zhuchao_ko 2013-02-14  
......反范式呢?

相关推荐

    详解MySQL 数据库范式

    关于数据库范式,时常有听说过,一直没有详细去了解。一般数据库书籍或数据库课程会介绍范式相关内容,范式也经常出现在数据库考试题目中。不清楚你是否对范式有比较清晰的了解呢?本篇文章我们一起来学习下数据库...

    建立数据库不一定要遵循三范式

    下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的。对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握。并逐步做到:在应用中发展,在发展中应用。

    数据库模拟题总结

    关于数据库的考题 练习题 很有帮助 范式分解的例题 E-R图

    数据库三大范式

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

    数据库范式及MYSQL优化整体思路

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

    数据库系统原理总结.pdf

    数据库系统原理总结 重新拿起数据库原理,感觉明显不⼀样了。重新学习,学到的东西多了很多,出来混总是 要还的,上次不会的,这次都得重新学⼀次。关于数据库系统原理,我来讲讲我⾃⼰的理 解:主要内容有:数据库...

    数据库设计三大范式简析

    范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。  在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中...

    数据库设计原则总结

    在数据库设计过程中总结了一些经验,相信对大家的数据库数据库设计很有帮助,欢迎下载

    数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析

    数据库入门(一)范式理解:1NF,2NF,3NF,BCNF,4NF详析引言范式种类第一范式(1NF)符合1NF的关系中的每个属性都不可再分存在问题第二范式(2NF)在1NF基础上消除了非主属性对码的部分函数依赖二范式判断步骤优缺点第...

    数据库系统概念复习总结.pdf

    数据库系统概念复习总结 数据库系统概念复习总结 数据库系统概念 数据库系统概念 Database Systems Concepts 第六版 来源: // 感谢原作者整理的笔记。 // 更改了部分错误,但不保证叙述完全正确。 // 供复习参考。 ...

    数据库设计与优化.pdf

    所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关 的注意事项。 1.2 分析阶段 一 般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引 了我们大...

    MySQL数据库面试题总结

    涉及MySQL数据库相关面试知识, 三大范式,建表,建约束,增删改查,触发器,存储过程,游标,索引,视图,集群,事务,优化等,

    数据库经典笔试题总结 -- 相当全面

    数据库经典笔试题,知识点很全面,每个知识点都有详尽解释,主要包括: 范式,索引,备份,死锁,数据库操作,SQL语法等等,非常全面!!!

    程序员面试——数据库篇

    总结了程序员面试中数据库有关的知识点,包括:范式,SQL语言,存储过程.并给出了部分相关的面试题目。

    数据库+研究生复试+求职+面试题

    汇总了计算机研究生复试有关编译原理各章节简答题,使用了易于口头表达的语言进行了总结。包括数据库基本概念及各章节问题回答。可供研究生复试或相关专业岗位面试使用。 1. 基本术语 数据、数据库、数据库管理系统...

    数据库的设计和设计合理性检验.pdf

    数据库的设计和设计合理性检验 数据库的设计和设计合理性检验 以下是学习笔记: ⼀,数据库的设计 ...不合理的情况: 数据库三范事式原则: 1,第⼀范式: 2,第⼆范式: 经过分析后: 3,第三范式: 分析后最后: 总结:

    MySQL之范式的使用详解

    范式的英文名称是Normal Form,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法...

    数据库(主要是MySQL)相关面试知识点总结

    自己秋招总结的内容~~~ 数据库(主要是MySQL)相关面试...分布式和集群、主从服务器、数据库的数据结构、索引以及索引创建、数据库设计四大范式、反范式化、事务基本要素、隔离级别及实现、事务并发问题、MVCC、SQL注入

    Oracle数据库、SQL

    13.1按范式要求设计表结构 23 13.2多表连接的种类 23 13.3交叉连接 23 13.4内连接 23 13.5外连接 25 13.6非等值连接 27 13.7表连接总结 27 十四、 集合 28 14.1表连接主要解决的问题 28 14.2集合运算 28 14.3集合...

Global site tag (gtag.js) - Google Analytics