一、MySQL 数据库设计

news/2024/5/1 11:02:09/文章来源:https://blog.csdn.net/qq_62283694/article/details/129928637

一、MySQL 数据库设计

1.1 为什么需要设计数据库

良好的数据库设计

  • 降低应用程序的开发难度
  • 具备高效的查询效率
  • 具备良好的扩展性

糟糕的数据库设计

  • 出现数据操作异常、修改复杂、数据冗余等问题
  • 影响程序的性能,甚至会导致程序崩溃

数据库设计是对数据库中实体以及这些实体之间的关系进行规划和结构化的过程,当数据库比较复杂时,需要设计数据库

1.1.1 软件项目开发周期中数据库设计

  • 需求分析阶段:分析客户的业务和数据处理需求
  • 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整
  • 详细设计阶段:应用三大范式审核数据库结构
  • 代码实现阶段:物理实现数据库,编码实现应用
  • 软件测试阶段:……
  • 上线部署:……

1.1.2 设计数据库的步骤

收集信息

  • 通过对业务人员的访谈等方法,充分了解用户需求,理解数据库需要存储的业务信息(数据)及需要提供的操作

标识实体 (Entity)

  • 标识数据库要管理的关键对象或实体,实体一般是名词

标识每个实体的属性(Attribute)

标识实体之间的关系(Relationship)

数据库设计中,不能重复出现含义相同的实体


1.2 为什么使用 E-R 图

1.2.1 E-R 图概念

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

符号含义
实体,一般是名词
属性,一般是名词
关系,一般是动词

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NIeZXPap-1680502424751)(./assets/image-20230331234821123.png)]

  • E-R图表示映射关系时,也可以通过添加箭头区分一对多和多对一
  • 箭头指向映射关系为一的实体
  • 在业务人员与开发人员的沟通中,E-R图能够极大的提高彼此之间的沟通效率

1.3 数据库设计模型转换

1.3.1 关系型数据库设计分类

  • 概念数据模型设计

  • 逻辑数据模型设计

  • 物理数据模型设计

1.3.2 各模型之间的元素对应关系

概念数据模型逻辑数据模型物理数据模型
实体(Entity)实体(Entity)表(Table)
属性(Attribute)属性(Attribute)列(Column)
标识符(Identifier)标识符(Primary Identifier/ Foreign Identifier)键(Primary key/ Foreign key)
关系(Relationship)关系(Relationship)参照完整性约束(Reference)

1.3.3 数据模型转换方案

基本转换原理

  • 将E-R图中每一个实体转换成一个表,实体的属性转换为表的列,实体的标识符转换为表的主键

  • 将实体关系转化为表之间的引用完整性约束

    • 根据关系的不同类型,通过外键引用主键的方式有所不同

1.4 实体关系约束转换

1.4.1 一对多关系的两个实体

  • 一般会各自转换为一张表,且后者对应的表引用前者对应的表

  • 一个表中的主键对应另一个表中可重复的字段

    • 主键的值是不能重复的,关联的字段是可以重复的

    • 存在一个值对应一个值(一对一)或者一个值对应多个值(一对多)

1.4.2 一对一关系的两个实体

  • 一般是一个主键对应一个不可重复的字段

1.4.3 多对多关系的两个实体

  • 除了将多对多关系中的两个实体各自转换为表外,一般还会创建第3个表,称为连接表
    • 将多对多关系划分为两个一对多关系,将这两个表主键都插入到第3个表中

1.5 PowerDesigner 软件

t01814cadb480e4610f
  • Sybase 公司开发的一款强大的数据库设计软件
  • 开发人员经常使用的数据库建模工具
  • 能够使用设计好的数据库模型直接生成SQL建表语句
  • 极大的提升数据库的开发效率

推荐使用的版本:PowerDesigner 16.5

PowerDesigner 涉及版权无法分享,加封面联系方式获取软件

1.5.1 绘制数据库模型图

  • 创建物理数据模型
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YH7havwn-1680502424753)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230331235814.png)]
  • 绘制模型图
  • 创建表实体
  • 添加属性
  • 添加实体之间的映射关系
  • 两个实体间连线,箭头指向主表
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVCWFFwo-1680502424753)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401000646.png)]

1.5.2 生成 SQL 代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0F1h7Ru2-1680502424754)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401000958.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tnIaKJIU-1680502424754)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401001019.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awtzJ4zx-1680502424754)(./assets/%E6%90%9C%E7%8B%97%E6%88%AA%E5%9B%BE20230401001132.png)]

生成的 SQL文件可直接拿到 Navicate 运行

PowerDesigner中开发数据库模型图时,需要指定该模型图是为数据库管理系统开发的,因为PowerDesigner支持用数据库模型图生成数据库创建脚本的功能


1.6 数据库设计范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则

1.6.1 三大数据库设计范式

  1. 第一范式

    • 第一范式的目标是确保每列保持原子性
    • 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
  2. 第二范式

    • 第二范式的目标是确保表中的每列都和主键相关
    • 要求每个表只描述一件事情
  3. 第三范式

    • 第三范式的目标是确保每列都和主键列直接相关,而不是间接相关
    • 如果一个关系满足第二范式,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)

1.7 规范化和性能的关系

为满足某种商业目标,数据库性能比规范化数据库更重要

  • 通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间

  • 通过在给定的表中插入计算列(如成绩总分),以方便查询

  • 在数据规范化同时,要综合考虑数据库的性能

存放商品信息的表

商品名称商品型号单价数量金额
电视机29英寸250040100000

金额 = 单价 * 数量,是冗余的列

为了提高查询统计速度,以空间换取时间

不要轻易违反数据库设计的规范化原则,如果处理不好,可能会适得其反,使应用程序运行速度更慢


1.8 用三大范式设计表结构

1.8.1 实现思路

  1. 向各表中插入数据,查看表中的每个属性列是否存在重复、插入异常、更新异常和删除异常

  2. 对照三大范式的定义,解决表中的异常问题

  3. 第一范式的目标是确保每列都是不可再分的最小数据单元,查看每列是否都满足第一范式

  4. 第二范式的每列与主键相关,不相关的放入别的表中,即要求一个表只描述一件事情

  5. 第三范式要求表中各列必须和主键直接相关,不能间接相关,查看各表,满足第三范式,对于不满足三大范式的表要进行拆分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_280032.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 Visual Studio 2022 加速虚幻引擎应用开发

自上次官宣对虚幻引擎的支持后,我们的开发团队一直在努力构建新一代的虚幻引擎集成功能。今天,我们很高兴地向你展示我们所开发的一系列用于提升游戏开发效率的各种新特性。在下面的文章中,你将了解如何查看流式日志,查看 Visual …

【redis】数据同步:主从库如何实现数据一致

如果redis实例宕机了,在恢复期间,无法服务新来的数据存取请求。 redis高可靠性: 数据尽量少丢失(AOF、RDB)服务尽量少中断(增加副本冗余量)-将一份数据同时保存在多个实例上 redis提供了主从模…

系统分析师高频错题集

软件架构设计---软件架构评估 信息系统评价要素包括:功能、成本、可靠性、可用性、存储容量、效率、响应时间等。不同的应用,首选评价指标是不同的,如银行系统,应该重点考虑系统的可用性和可靠性。 软甲架构设计---软件架构评估 …

android BatteryHistorian使用

android BatteryHistorian使用 Batterystats 工具和 Battery Historian 脚本的基本用法和工作流程Batterystats 是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用 adb 将收集的电池数据转储到开发计算机,并创建一份可使用 Batt…

了解Mysql

存储引擎 从上图我们可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。 InnoDB和MyISAM的区别 MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性…

2017百度世界大会 爱奇艺创始人CEO龚宇演讲速记

2017百度世界大会如期而来。(好像不对,Robin 说往年都是夏季办)那就改成千呼万唤始出来。 以下是爱奇艺创始人CEO龚宇演讲实录,小编全文呈上,请各位查收: 各位来宾,大家好! 很高兴今…

深力科本周知识小课堂【分立半导体】晶体管(上)基础知识,微电子人的狂欢

深力科本周知识小课堂【分立半导体】晶体管(上)基础知识,微电子人的狂欢 今天,东芝深力科电子将为大家说明一下双极晶体管和绝缘栅双极晶体管。 晶体管大致分为三种类型:双极型、场效应型和绝缘栅双极型。 双极晶体管…

Linux下的JavaEE开发(xftp传输安装、wget安装)

目录 一:jdk的安装(xftp传输安装) 二:Tomcat的安装(不需要配置环境变量) 三:Idea的安装(不需要配置环境变量) 四:Mysql的安装(wget网络安装&am…

千寻驰观亮相公路行业权威年会,开启2023全国路测第一站

千寻驰观亮相中国公路学会养护与管理养护与管理分会第十二届学术年会2023年3月28日至29日,在中国公路学会养护与管理养护与管理分会第十二届学术年会上,千寻位置面向行业全面展示了千寻驰观-道路智能巡检系统“车道级”目标位置估计、像素级的面积计算、…

linux系统编程(5)--进程间通信

1.进程间通讯概念 进程是一个独立的资源分配单元,不同进程之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。 但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,…

ASP.NET动态Web开发技术第3章

第3章C#编程基础一.预习笔记 1.C#语言概述 using指令表示引用命名空间 //:表示单行注释 /* */:表示多行注释 2.变量和常量 Camel和Pascal 3.数据类型 值类型:简单类型、结构类型、枚举类型,其中简单类型又包含了整数类型&a…

箱线图详细介绍及绘制箱线图和复现箱线图的步骤详解

目录 一、箱线图介绍二、python函数三、利用数据绘制箱线图四、拓展——未知数据复现箱线图一、箱线图介绍 箱线图(Box Plot),也称为盒须图、箱形图、盒式图,是一种用于显示数据分布情况的图表。箱线图通常由五条线组成,包括最小值、第一四分位数、中位数、第三四分位数和…

网络安全从业人员应该如何提升自身的web渗透能力?

前言 web 渗透这个东西学起来如果没有头绪和路线的话,是非常烧脑的。 理清 web 渗透学习思路,把自己的学习方案和需要学习的点全部整理,你会发现突然渗透思路就有点眉目了。 程序员之间流行一个词,叫 35 岁危机,&am…

Ae:文本图层 - 文本属性组

文本图层默认包含“文本”和“变换”两大属性组。“变换”属性组用于对文本图层的整体变换,是大多数图层通用的属性组。“文本”属性组则包含了与文本相关的特有属性,还可通过右侧的“动画” Animate按钮添加文本动画制作工具属性。请参阅:《…

前端已死?金三银四?你收到offer了吗?

目录 一、前言 二、“唱衰” 三、不局限于框架、前端 四、打动面试官 五、正向加成 六、小结 一、前言 最近在脉脉、知乎等平台都有人在渲染前端从业人员的危机,甚至使用“前端已死”的字眼,颇有“语不惊人死不休”的意味,对老鸟来说&a…

设计模式小记

1、设计模式介绍 1.1、设计模式目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好的 代码重用性…

C#,初学琼林(02)——数组和值计算(Sum,求和)的源程序,相关问题及解决之道

1、求和算法 假设我们有一个 n 元素数组,我们想计算它们的总和。a 是一个索引从 0 到 n-1 的数组 。它的元素将被标记为:a[0], a[1],a[2],a[3],...,a[n-1]。 要计算此数组元素的总和,我们将执行…

一句话设计模式10:建造者模式

建造者模式: 一步一步建造一个对象; 文章目录建造者模式: 一步一步建造一个对象;前言一、建造者模式的作用二、如何实现建造者模式第一种: 改写set方法第二种: 直接使用lombok 的 Builder总结前言 建造者模式一般使用场景是: 一个复杂的对象创建过程,分步骤执行,一步一步完成创…

【开源项目】消息推送平台austin介绍

项目介绍 核心功能:统一的接口发送各种类型消息,对消息生命周期全链路追踪。 意义:只要公司内部有发送消息的需求,都应该要有类似austin的项目。消息推送平台对各类消息进行统一发送处理,这有利于对功能的收拢&#…

【LeetCode每日一题:2367. 算术三元组的数目:暴力模拟+Hash表】

🍎作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎 🍎座右…