数据库笔记(3)数据库三大范式

数据库设计关系型数据库建议在E_R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一部在开发时有很多设计数据库软件,常用的如powerdesigner,dbdesigener等,这些软件可以直观地实体及实体间的关系设计数据库,可能由专门的数据库设计人员完成,也可能是项目经理带组员完成现阶段不需要独立完成数据库设计三范式经过研究和对使用中问题的总结,对...

数据库笔记(3)数据库三大范式
数据库设计
  • 关系型数据库建议在E_R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一部
  • 在开发时有很多设计数据库软件,常用的如power designer,db desigener等,这些软件可以直观地实体及实体间的关系
  • 设计数据库,可能由专门的数据库设计人员完成,也可能是项目经理带组员完成
  • 现阶段不需要独立完成数据库设计
三范式
  • 经过研究和对使用中问题的总结,对于设计数据库提出一些规范,这些规范被称为范式(Normal form)
  • 目前有迹可循的共8中范式,一般需要遵守3范式即可
  • 第一范式(1NF):强调的是列的原子性,即列不能够再分为其他几列

考虑这样一个表:【联系人】(姓名,性别,电话)如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构就没有达到1NF。我们需要将列(电话)拆分,即【联系人】(姓名,性别,家庭电话,公司电话)。1NF很好辨别,但2NF和3NF容易混淆

  • 第二范式(2NF):首先是1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含主键的列必须完全依赖于主键,而不能只是依赖主键的一部分。

考虑一个订单明细表:【OrderDetail】
(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。因为我们知道在一个订单中可以订购多种产品,所以一个OrderID是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见,Discount(折扣),Quantity(数量)完全依赖于主键(OrderID,ProductID),而UnitPrice,ProductName只依赖于ProductID。所以OrderDetail表不符合2NF。不符合2NF的设计容易产生冗余数据。
可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单中UnitPrice,ProductName多次重复的情况。

  • 第三范式(3NF):首先是2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。

考虑一个订单表【order】
(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。其中OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity等非主键列都完全依赖于主键(OrderID),所以符合2NF,不过问题是
CustomerName,CustomerAddr,CustomerCity直接依赖的是CustomerId(非主键列),而不是直接依赖于主键,它是通过通过传递才依赖于主键,所以不符合3NF.。通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到3NF。
**第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分关键是2NF:非主键列是否温泉依赖于主键,还是燕来主键的一部分;
3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列

总结

1NF、列不可分(原子性)

2NF、不存在部分依赖(唯一性)

3NF、不存在传递依赖(直接性)

E-R模型图
  • E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

每一类数据对象的个体叫【实体】,而每一类对象个体的集合叫【实体集】,如学生是一个实体集,张三是一个实体,姓名是一个属性。

总结来说,E-R图的四个组成的部分

1、矩形框:表示实体,在矩形框中写上实体的名字

2、椭圆形框:表示实体或联系的属性

3、菱形框:表示联系,在框中记入联系名

4、连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)。
在这里插入图片描述

在这里插入图片描述

参考链接:
[1]https://blog.csdn.net/weixin_42724467/article/details/86503858

源文地址:http://www.guoxiongfei.cn/csdn/1524.html