1第一范式

数据库表中不能出现重复记录,每个字段是原子性的不能再分

1.1不符合第一范式的示例

数据库设计的三范式_字段

1.2存在问题:

  1. 最后一条记录和第一条重复(不唯一,没有主键)
  2. 联系方式字段可以再分,不是原子性的

数据库设计的三范式_主键_02

关于第一范式,每一行必须唯一,也就是每个表必须有主键,这是我们数据库设计的最基本要求,主要通常采用数值型或定长字符串表示,关于列不可再分,应该根据具体的情况来决定。如联系方式,为了开发上的便利行可能就采用一个字段了。

2第二范式

第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖

2.1示例:

数据库设计的三范式_主键_03

确定主键:

数据库设计的三范式_主键_04

2.2解决方案如下:

学生信息表:

数据库设计的三范式_第二范式_05

教师信息表:

数据库设计的三范式_第二范式_06

教师和学生的关系表:

数据库设计的三范式_主键_07

如果一个表是单一主键,那么它就复合第二范式,部分依赖和主键有关系

以上是一种典型的“多对多”的设计

3第三范式

建立在第二范式基础上的,非主键字段不能传递依赖于主键字段。(不要产生传递依赖

数据库设计的三范式_主键_08

学生信息表:

数据库设计的三范式_字段_09

班级信息表:

数据库设计的三范式_第二范式_10

以上设计是一种典型的一对多的设计,一存储在一张表中,多存储在一张表中,在多的那张表中添加外键指向一的一方的主键

4三范式总结

第一范式:有主键,具有原子性,字段不可分割

第二范式:完全依赖,没有部分依赖

第三范式:没有传递依赖

数据库设计尽量遵循三范式,但是还是根据实际情况进行取舍,有时可能会拿冗余换速度,最终用目的要满足客户需求。

一对一设计,有两种设计方案:

第一种设计方案:主键共享

第二种设计方案:外键唯一