为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
在实际开发中最为常见的设计范式有三个:1.第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。2.第二范式(确保表中的每列都和主键相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。订单信息表

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。

从第一范式到第二范式所做的操作是_数据库设计三大范式相关推荐

  1. 从第一范式到第二范式所做的操作是_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”

    1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成:每个字段的值都只能是单一值.1971年埃德加·科德提出了第一范式.即表中所有字段都是不可再分的. 1.1 实 ...

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

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

  3. 一个页面区分管理者和普通用户如何设计_产品经理要做的操作权限/数据权限设计...

    产品经理在工作中还需要知道一个:用户权限设计能力.权限设计理念贯穿于后台产品.以及用户前端产品. 权限能力包括两类:数据权限.系统操作权限 有的人会好奇,为什么前端产品会有有权限管理的要求?接下来我将 ...

  4. java 数据库操作教程_数据库基本操作:增删改查及联表操作

    所用软件:SQL Server Management Studio 首先第一步,建立一个表.在这里命名为T1.并在里面填入几条数据.如图: T1 一.查询 查询所有:select  * from T1 ...

  5. python做学生管理系统数据库模型_数据库建模:学生信息系统搭建实验

    首先必须理清学生信息系统有哪些实体,这些实体之间的关系又是如何的,他们之间是怎么进行关联的 实体有哪些: 学生表(student) 专业表(major) 课程表(course) 成绩表(grade) ...

  6. MySQL学习笔记05【多表操作、三大范式、数据库的备份和还原】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. 第一范式,第二范式,第三范式,BCNF范式理解

    基础知识 实体:现实世界中客观存在并可以被区别的事物.比如"一个学生"."一本书"."一门课"等等.值得强调的是这里所说的"事物& ...

  8. 数据库第一范式,第二范式,第三范式详解

    数据库第一范式,第二范式,第三范式详解 基础知识 实体:现实世界中客观存在并可以被区别的事物.比如"一个学生"."一本书"."一门课"等等. ...

  9. 数据库的设计规范:第一范式、第二范式、第三范式、巴斯范式

    文章目录 1. 范式的概念 1.1 范式分类 1.2 键和相关属性的概念 2. 第一范式(1st NF) 2.1 概念 2.2 举例 2.1 总结 3. 第二范式(2nd NF) 3.1 概念 3.2 ...

最新文章

  1. python是最好的语言 永远二十岁_Python是世界上最好的语言吗?
  2. Promise - js异步控制神器
  3. file:///f:winwwwxml2.php,php simplexml_load_file 中文乱码的解决方法
  4. IS-IS 的 DIS (伪节点) 及 DIS 和 OSPF中DR 的区别
  5. 《Head First Python》第二章--共享你的代码
  6. setsockopt、getsockopt详细介绍(转)
  7. 图像中某点绕点旋转后的坐标,图像旋转坐标位置
  8. 架构师必须知道的架构设计原则
  9. linux——两个客户端之间实现聊天(TCP、单线程)
  10. 太原市中考计算机考试系统,太原中考报名系统
  11. Echarts笔记-折线图定制(Y轴百分数,鼠标移动显示百分数,显示X轴,Y轴值)
  12. Java——标准异常
  13. 【机器人操作系统】ROS工作空间及功能包的创建
  14. 070 random模块的使用
  15. ruby on rails_通过Ruby on Rails中的关系调试Has_Many
  16. 盯市盈亏、浮动盈亏、总盈亏的计算方法
  17. 在购买太阳眼镜时怎样辨别好坏
  18. 低值易耗材料管理系统
  19. 用Kanban-Ace框架改进Scrum
  20. raspberry pi到手,折腾成web服务器,加小小鄙视下网通

热门文章

  1. navicat安装指南
  2. 如何修改Git仓库的URL(地址)
  3. 19-linux下ElasticSearch.6.2.1与head、Kibana、X-Pack、SQL、IK、PINYIN插件的配置安装
  4. 监控、链路追踪、日志的区别
  5. 某厂面试归来,发现自己落伍了!
  6. Acwing 734. 能量石
  7. 2019.08.27BOM的六个子对象(2)
  8. Vertx.vertx()初始框图和模块
  9. git 无法提交空目录
  10. 怎样查阅电脑最大能够扩充多大的内存