1. 数据库设计之三范式的介绍

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

  • 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列。(1NF强调字段是最小单元,不可再分)
  • 第二范式(2NF): 满足 1NF,另外包含两部分内容,一是表必须有一个主键;二是非主键字段 必须完全依赖于主键,而不能只依赖于主键的一部分。(2NF强调在1NF基础上必须要有主键和非主键字段必须完全依赖于主键,也就是说 不能部分依赖)
  • 第三范式(3NF): 满足 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。(3MF强调在2NF基础上 非主键字段必须直接依赖于主键,也就是说不能传递依赖(间接依赖)。)

2. 第一范式的介绍

如图所示的表结构:

说明:

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

3. 第二范式的介绍

如图所示的表结构:

说明:

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

4. 第三范式的介绍

如图所示的表结构:

说明:

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

5. E-R模型的介绍

E-R模型即实体-关系模型,E-R模型由 实体、属性、实体之间的关系构成,就是描述数据库存储数据的结构模型。

E-R模型的使用场景:

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

E-R模型的效果图:

说明:

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

一对一的关系:

说明:

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

一对多的关系:

说明:

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

多对多的关系:

说明:

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

数据库设计三大范式和ER模型相关推荐

  1. (转载)简洁、明晰!数据库设计三大范式应用实例剖析

    (转载http://bbs.database.ccidnet.com/read.php?tid=325895) 简洁.明晰!数据库设计三大范式应用实例剖析 引言OL~eR{q   ;iC,$vZ 0} ...

  2. 数据库设计三大范式【转载】

    数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系.所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式.在关系型数据库中 ...

  3. mysql数据库设计三大范式_了解数据库设计三大范式

    数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系.所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式.在关系型数据库中 ...

  4. 数据库基础 数据库设计三大范式

    转载自: http://www.cnblogs.com/knowledgesea/p/3667395.html 数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的 ...

  5. 数据库设计三大范式之第一范式不可违反

    首先关于数据库三大范式是什么,我们不再多说,网上很多博客写的都很好,例如以下链接: https://blog.csdn.net/qq_26878363/article/details/81533273 ...

  6. 数据库设计三大范式,还记得吗?

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 来源:https://www.cnblogs.com/knowledgesea/p/36 ...

  7. 数据库设计三大范式应用实例剖析(转载)

    引言 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟, ...

  8. 【MySQL性能优化】数据库设计三大范式(二)

    转载自http://chenhaoxiang.cn/2018/02/04/2158/ 数据库设计无非遵循的就是减少冗余量,第二点就是遵循三范式 第一范式(1NF) 确保每一列的原子性 也就是如果每一列 ...

  9. 数据库设计三大范式应用实例剖析

    引言 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟, ...

最新文章

  1. MATLAB中cif用于清除什么,cifti-matlab-master 能够对MRI数据进行功能成像 - 下载 - 搜珍网...
  2. abcde依次进入一个队列_数据结构与算法(6):队列
  3. T4生成实体,单张表和多张表
  4. Linux---信号及其使用简单讲解
  5. java 2017腾讯面试题_腾讯2017刁难面试题,是不是大神就看你会做几题
  6. 【leetcode】在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
  7. 格雷码 Gray Code
  8. uva 1339 题解
  9. 监控视频存储解决方案
  10. NRF52840学习——GPIO输入,实现按键短按和长按
  11. 快速对接第三方接口--短信接口
  12. python + selenium 自动化测试框架
  13. svchost.exe占用网络
  14. 征途LINUX服务端脚本,征途【改版教程】-版本内脚本文件-转载于-喜欢玩网游单机站...
  15. [学习]17 每天只睡6小时,依然精力充沛
  16. 《Modelica教程》by Fritzson 导言部分
  17. Windows 2003 下手动关闭危险端口
  18. Oracle基本函数-大小写转换函数
  19. 百度网盘真实地址解析(告别下载百度网盘)
  20. CSS中如何让背景颜色半透明

热门文章

  1. 关于Transformer,那些的你不知道的事
  2. 炸裂!Google这波操作,预警了什么?
  3. 大话卷积神经网络CNN,小白也能看懂的深度学习算法教程,全程干货建议收藏!...
  4. 旷视提双边分支网络BBN:攻坚长尾分布的现实世界任务 | CVPR 2020 Oral
  5. 荣耀总裁赵明:AI 是核心战略,全球前五的目标不会变
  6. 李飞飞团队最新论文:如何对图像中的实体精准“配对”?
  7. PageHelper 使用 ThreadLocal 的线程复用问题
  8. 有个程序员老公有多爽???
  9. 如何使用拦截器获取Controller方法名和注解信息?
  10. GitHub的AI写代码翻车了,会在注释里给你写上what the f***,因为...