数据库设计之三泛式

1 阅读4分钟

范式:对设计数据库提出的一些规范,目前有迹可循的共有8种范式,一般遵守3范式即可。

  • 第一范式(1NF):强调的是列的原子性,即列不能再分成其他几列
  • 第二范式(2NF):满足1NF,另外包含两部分内容,一实表必须有一个主键:二是非主键字段必须完全依赖于主键, 而不能只依赖于逐渐的一部分。
  • 第三范式(3NF):满足2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖,即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。

第一范式介绍

1nf.png

  • 这种表结构设计就没有达到1NF,要符合1NF我们只需要把列拆分,即:把contact字段拆成name、tel、addr等字段。

第二范式介绍

2nf.png

  • 这种表结构设计就没有达到2NF,因为Discount(折扣),Quantity(数量)完全依赖于主键(OderID),而UnitPrice单间,ProductName产品名称,只依赖于ProductID,所以OderDetail表不符合2NF
  • 我们可以把【OrderDetail】表拆分为【OderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)这样就符合第二范式了。

第三范式介绍

3nf.png

  • 这种表结构几何级就没有达到3NF,因为OderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity等非主键列都完全依赖于主键(OrderID),所以符合2NF。不过问题是CustomerName,CustomerAddr,CustomerCity直接依赖的是CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合3NF
  • 我们可以把【Order】表拆分为【Order】(OderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到3NF。

E-R模型介绍

E-R模型即实体-关系模型,E-R模型就是描述数据库存储数据的结构模型。

E-R模型的使用场景

  1. 对于大型公司开发项目,我们需要根据产品经理的设计,我们先使用建模工具,如:power designer,db desinger等这些软件来画出实体-关系模型(E-R模型)
  2. 然后根据第三范式设计数据库表结构

E-R模型图.png

  • 实体:用矩形表示,并标注实体名称
  • 属性:用椭圆表示,并标注属性名称
  • 关系:用菱形表示,并标注关系名称
    • 一对一
    • 一对多
    • 多对多

一对一关系:

1对1.png

  • 关系也是一种数据,需要通过一个字段存储在表中
  • 1对1关系,在表A或表B中创建一个字段,存储另一个表的主键值

一对多关系:

1对多.png

  • 1对多关系,在多的一方表(学生表)中创建一个字段,存储班级表的主键值

多对多关系:

多对多.png

  • 多对多关系,新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值。

总结

  • 范式就是设计数据库的一些通用规范
    • 1NF强调字段是最小单元,不可再分
    • 2NF强调在1NF基础上必须要有主键和非主键字段必须完全依赖于主键,也就是说不能部分依赖
    • 3NF强调在2NF基础上,非主键字段必须直接依赖于主键,也就是说不能传递依赖(简介依赖)
  • E-R模型由实体、属性、实体之间的关系构成,主要用来描述数据库中表结构。
  • 开发流程是先画出E-R模型,然后根据三范式设计数据库中表结构。