<>数据库设计

* 关系型数据库建议在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模型图 <https://blog.csdn.net/weixin_42724467/article/details/86503858>

* 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
<https://blog.csdn.net/weixin_42724467/article/details/86503858>

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信