数据库设计范式

作者: AlvinL | 来源:发表于2015-03-31 13:38 被阅读431次

1NF

  • 概念

    1NF,第一范式,数据模型中一个实体的所有属性的值都是单一的,这样的实体的被称为符合第一范式。

  • 例子

    图片1图片1

    这是一个描述CD(唱片)的模型,我们可以看到Songs这个属性当中有重复的值,如歌曲名字,歌曲长度等描述歌曲的属性,因此Song可以抽象为一个实体来描述,如图2:

    图片2图片2

    改进之后,CD和Song实体的属性都是单一的值,因此符合第一范式。

2NF

  • 概念

    如果实体符合第一范式,并且其所有非标识属性都完全依赖于实体的唯一标识,则称实体符合第二范式。

  • 例子
    图2中,CD的属性BandName(乐队名)不完全依赖于CD ID,因为一个乐队可能是两张不同CD的BandName,因此我们应该为BandName创建一个新实体。BandName是用来描述乐队的,或者,更一般来说,它描述的是一位表演者,把它作为一个新的实体,并添加一个属性BandName, 但不是所有的表演者都是一个乐队,因此重命名为ArtistName,创建一个新的模型,如图3:

    图片3图片3

    但这个模型还不符合第二范式,Record Label(唱片公司)属性对每张CD都是唯一的值,但在多个CD行中可以看到相同的唱片公司,因此需要把Record Label单独作为一个实体,如图4,这个数据模型符合第二范式:

    图片4图片4

3NF

  • 概念

    如果实体符合第二范式,并且其所有非标识属性均不依赖于其他任何非标识属性,则称这个实例符合第三范式。非标识属性是不作为实体标识的一部分的任何属性。对于依赖于其他非标识属性的属性,可以将依赖属性和它所依赖的属性都移到一个新的实体当中。

  • 例子
    为了演示第三范式,在Record Label表中增加地址信息,如图5:

    图片5图片5

    其中,State Name为州名,State Abbreviation为州名缩写,这里有个问题:State Name和State Abbreviation彼此依赖,如果State Name改了,那么State Abbreviation也必须改变,这显然不符合第三范式,解决方案是将这两个属性分离出来创建一个新的实体,如图6,最后的模型,符合第三范式:

    图片6图片6

相关文章

  • 数据库设计三范式与反范式

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 第一范式: 1、数据库的所有...

  • 数据库设计范式

    数据库设计三大范式 数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都...

  • mysql的优化总结(一)

    一。数据库设计方面 1)遵循数据库设计三大范式 ,适当的进行反范式设计 第一范式:1NF 原子性 字段不能再拆分 ...

  • python学习笔记-数据库07_高级操作_数据库设计

    数据库设计之三范式 范式:对设计数据库提出的一些规范,目前有迹可循的共有8中范式,一般遵循3范式即可。第一范式(1...

  • 数据库设计-三大范式

    讲到数据库设计,就需要先说一下数据库设计的三大范式(Normal Form)。 三大范式 第一范式(1NF):列属...

  • (系列7)数据库

    MySQL 数据库概念 范式 范式是数据库设计规范,范式越高则数据库冗余越小,但查询也更复杂,一般只需满足第三范式...

  • SQL范式

    范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据...

  • 范式

    范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据...

  • java_sql数据库的设计

    数据库设计三范式(重点) 1.什么是设计范式 2.设计范式是哪些 3.第三范式 是建立在第二范式基础上 所有非主键...

  • MySQL 数据库性能优化之表结构优化

    【IT168 技术】很多人都将数据库设计范式作为数据库表结构设计“圣经”,认为只要按照这个范式需求设计,就能让设计...

网友评论

  • 65edc25d4e73:求解,把state name 和 state abbreviation分离出去作为一个单独实体,但在state里abbreviation依然依赖name不是么,还是不符合第三范式呀
    哎哟喂程序猿:@OO王先生OO state里abbreviation依赖的name是标识属性了。

本文标题:数据库设计范式

本文链接:https://www.haomeiwen.com/subject/eikoxttx.html