数据库三范式

295 阅读2分钟

数据库表设计最重要的是满足业务需求跟性能,需求>性能>表结构!所以不能一味的去追求范式。

所谓**范式(NF)**就是指符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度。

简单理解就是一张表符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。

数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考虑到3NF就够。

符合高一级范式的设计,必定符合低一级范式。例如符合2NF的关系模式,必定符合1NF。

第一范式

定义 符合1NF的关系中的每个属性都不可再分

理解 表的每一列属性都是不可再分的属性

例如,用户信息中,“联系方式”字段就不好,应该为拆分为 手机号、邮箱等

以下是不符合的 image.png

以下是符合的 image.png

1NF 是所有关系型数据库的最基本要求,在关系型数据库管理系统中,例如 SQL Server、Oracle,MySQL中,创建数据表一定是符合 1NF

第二范式

定义 表中的字段必须完全“依赖”于主键,如果主键是由多字段构成,多个字段都要被其他字段“依赖”

理解 比如说学生表S(学号,姓名,年龄,地址,课程号,课程名),学号和课程号组成联合主键,这张表就是不符合 2NF 的。比如姓名只“依赖”于主键中的学号字段,而没有“依赖”主键中的课程号字段。这就是部分依赖,是不允许的。

第二范式告诉我们,不相关的东西不要放在一起,用多个小表连接来代替大表,减少修改时候的负担

第三范式

定义 不能重复存储相同的信息

理解 比如一个对象里引用了另外一个对象,这个时候,存一个引用就够了,而不是重复的存储这个对象的多个副本。