概述

数据库逻辑设计是从事数据库应用设计、开发、运行维护等各方面工作的一个重要的基础性工作。根据不同业务和应用需求,确定并遵循数据库逻辑设计原则,例如按照第三范式开展逻辑设计,不仅能满足减少数据冗余、保证数据一致性和完整性、易扩展性和伸缩性等需求,也是保障系统高性能的一个重要基础。

一、为什么要逻辑设计?

1、全表扫描案例

从一个案例来看,例如查询“喜欢语文的所有学生”

--由于%号这里肯定是走了全表扫描select id,name,hobby from student where hobby like '%语文%';

2、原因select id,name,hobby from student;ID NAME HOBBY---------------------1 小明 语文,数学2 小红 英语,语文,数学3 小林 英语,语文

可以看到如果是这么设计表的话,把学生的爱好都塞在一个字段HOBBY中,那么查询条件只能写成like '%语文%'。这里的根本原因是该表设计不符合规范化设计理论,从而导致了全表扫描。这里我们就可以看出逻辑设计的重要性了。

二、什么是逻辑设计

1、概念总结

1)将需求转化成数据库的逻辑模型

2)通过ER图的型式对逻辑模型进行展示

3)同所选用的具体的DBMS系统无关

2、名词解释

关系:一个关系对应通常所说的一张表

元组:表中的一行即为一个元组

属性:表中的一列即为一个属性,每一个属性都有一个名称,称为属性名

候选码:表中的某个属性组,它可以唯一确定一个元组

主码:一个关系有多个候选码,选定其中一个为主码

域:属性的取值范围

分量:元组中的一个属性值

3、ER图例说明

矩形:表示实体集,矩形内写实体集的名字

菱形:表示联系集

椭圆:表示实体的属性

线段:将属性连接到实体集,或将实体集连接到联系集

4、数据操作异常及数据冗余

插入异常:如果某实体随着另一个实体的存在而存在,即缺少某个实体时无法表示这个实体,那么这个表就存在插入异常。

更新异常:如果更改表所对应的某个实体实例的单独属性时,需要将多行更新,那么就说这个表存在更新异常。

删除异常:如果删除表的某一行来反映某实体实例,失效时导致另一个不同实体实例信息丢失,那么这个表中就存在删除异常。

注意:若一个表中存在插入异常,那它肯定存在删除异常和更新异常。

数据冗余:是指相同的数据在多个地方存在,或者说表中的某个列可以由其他列计算得到,这样就说表中存在数据冗余。

三、什么是规范化设计

1、第一范式(所有属性必须是单值)

定义:数据库表中的所有字段都是单一属性,不可再分的。这个单一属性是由基本的数据类型所构成的,如整数,浮点数,字符串等,换句话说,第一范式要求数据库中的表都是二维表。(二维表就是由行和列组成的表)

2、第二范式(所有属性必须依赖于该实体的唯一标识属性)

定义:数据库的表中不存在非关键字段对任一候选关键字段的部分函数依赖。部分函数依赖是指存在着组合关键字中的某一关键字决定非关键字的情况。

换句话说:所有单关键字的表都符合第二范式。

修改后的:

通俗解释:

完全依赖:表中只有一个关键字(即主键),其他属性的增删改查的时候定位到这一行都是依赖此关键字的。

第二范式:只能有一个主键,不能有复合主键,可以就满足了第二范式。

由于供应商和商品之间是多对多的关系,所以只有使用商品名称和供应商名称才可以唯一标识出一件商品,也就是商品名称和供应商名称是一组组合关键字。

上表中存在以下的部分函数依赖关系

(商品名称)—>(价格,描述,重量,商品有效期)(供应商名称)—>(供应商电话)

3、第三范式(没有一个非唯一标识属性依赖于另一个非唯一标识属性)

定义:第三范式是在第二范式的基础上定义的,如果数据表中不存在非关键字段,对任意候选关键字段的传递函数依赖则符合第三范式。

存在问题:

(分类,分类描述)对于每一个商品都会进行记录,所以存在数据冗余,同时也会存在数据deep插入、更新及删除异常。

4、BC范式

定义:在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BC范式。也就是说如果是复合关键字,则复合关键字之间也不能存在函数依赖关系

存在下列关系因此不符合BCNF要求:(供应商)—>(供应商联系人)(供应商联系人)—>(供应商)

并且存在数据操作异常及数据冗余

总结

第一,二,三范式解决的是非主属性的关系。BC 范式解决的是主属性的关系;

第一范式:就是原子性,字段不可再分割,(列属性不能在细分为子列)

第二范式:就是完全依赖,没有部分依赖;(非主属性不能依赖于主键的一部分,要完全依赖于主键(主键是复合键))

第三范式:没有传递函数依赖。(非主属性之间的依赖)

BC范式: 解决部分主键依赖于非主键部分(复合关键字之间也不能存在函数依赖关系)。

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

mysql逻辑设计_一文看懂数据库设计之逻辑设计,值得收藏相关推荐

  1. 很多字段的数据要插入另一张表_一文看懂数据库设计之逻辑设计,值得收藏

    概述 数据库逻辑设计是从事数据库应用设计.开发.运行维护等各方面工作的一个重要的基础性工作.根据不同业务和应用需求,确定并遵循数据库逻辑设计原则,例如按照第三范式开展逻辑设计,不仅能满足减少数据冗余. ...

  2. mysql序列号生成_一文看懂mycat的6种全局序列号实现方式

    概述 在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一.为此,MyCat 提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式.下面对这几种实现方式做一下介绍 ...

  3. mysql 缓冲池监控_一文看懂mysql数据库监控指标--缓冲池使用情况

    如果你的数据库运行缓慢,或者出于某种原因无法响应查询,技术栈中每个依赖数据库的组件都会遭受性能问题.为了保证数据库的平稳运行,你可以主动监控以下这个与性能及资源利用率相关的指标:缓冲池使用情况. 缓冲 ...

  4. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  5. 判别两棵树是否相等 设计算法_一文看懂生成对抗网络 - GANs?(附:10种典型算法+13种应用)...

    生成对抗网络 – GANs 是最近2年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视频.我们手机里的照片处理软件中就会使用到它. 本文将详细介绍生成对抗网络 – GANs 的设计初衷.基 ...

  6. 怎么看电脑系统是win几_一文看懂arm架构和x86架构有什么区别

    一文看懂arm架构和x86架构有什么区别 本文主要介绍的是arm架构和x86架构的区别,首先介绍了ARM架构图,其次介绍了x86架构图,最后从性能.扩展能力.操作系统的兼容性.软件开发的方便性及可使用 ...

  7. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  8. 用户画像标签维度_一文看懂用户画像标签体系(包括维度、应用场景)

    一文看懂用户画像标签体系(包括维度.应用场景) 互联网相关企业在建立用户画像时一般除了基于用户维度(userid)建立一套用户标签体系外,还会基于用户使用设备维度(cookieid)建立相应的标签体系 ...

  9. 无处 不在的无线智能——6g 的关键驱动与研究挑战_一文看懂什么是 6G

    原标题:一文看懂什么是 6G 2020年行将结束,随着5G网络的建设推进,以及3GPP R16版本的冻结,越来越多的人将关注焦点转移到6G身上. 7月14日,韩国三星电子发布了白皮书<下一代超连 ...

最新文章

  1. SAP SD基础知识之信用控制范围
  2. python集合类型_python集合类型介绍
  3. 医疗大数据:商业保险、移动医疗的崛起,正在形成闭环(二)
  4. mysql current_timestamp 不自动更新_MySQL ON UPDATE CURRENT_TIMESTAMP不更新
  5. python模块补充
  6. QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹
  7. Postman测试接口传入List类型的参数以及数组类型参数
  8. OpenGL ES 3.2
  9. 海南计算机考研和培训哪个比较好,海南考研集训营前十排名
  10. ubuntu 挂载优盘
  11. gridview為什麼分頁後,GridView1_RowDataBound就運行不了
  12. 循道 | 富达投资的技术控为何摇身变成资管掌门人
  13. 后端学习 Java 面向指挥官的操作系统
  14. [微软苏州校招 Hihocoder] Disk Storage
  15. linux的adsl拨号上网,详细讲解Linux系统下ADSL拨号上网的方法
  16. 无线移动通信技术快速发展历程和趋向(转)
  17. jQuery 上拉加载更多
  18. 【春招实习】贝壳金服电话一面
  19. Win10深度学习环境配置(CUDA+cuDNN+TensorFlow-gpu+Keras)
  20. 软件开发中,站立会议的必要性

热门文章

  1. 商派ECmall的支付接口初探(一)
  2. 最优质的移动办公工具,TOM VIP邮箱-随心邮
  3. Typora基础学习和我的偏好设置
  4. 如何将图片转化为表格?分享一个转换的方法
  5. 3dsmax模型导入unity后变透明原因
  6. 基于Java毕业设计班级同学录网站源码+系统+mysql+lw文档+部署软件
  7. Photoshop 2021正式版更新,附全系列下载
  8. 服务器系统病毒的来源,服务器中病毒的症状是什么?
  9. pe盘启动MySQL_将已经分区的移动硬盘弄成启动WIN PE盘(一般无需要格式化) 并进行GHO或ISO原版安装系统(亲自制作成功) | 学步园...
  10. kubeadm部署高可用k8s