当前位置: 首页 > news >正文

Mysql(五) --- 数据库设计

文章目录

  • 前言
  • 1.范式
    • 1.1.第一范式
      • 1.1.1 定义
      • 1.1.2.例子
    • 1.2.第二范式
      • 1.2.1 定义
      • 1.2.2 例子
      • 1.2.3.不满足第二范式可能会出现的问题
    • 1.3.第三范式
      • 1.3.1 定义
      • 2.3.2 示例
  • 2. 设计过程
  • 3. 实体-关系图
    • 3.1 E-R图的基本组成
    • 3.2 关系的类型
      • 3.2.1 一对一关系(1:1)
      • 3.2.2 ⼀对多关系(1:N)
      • 3.2.3 多对多关系(M:N)


前言

上一篇博客中,我们学习增删查改等基本操作,在工作中,每种表之间都是存在关联的,而不是相互独立的,因此这一篇中,我们来学习数据库设计和联合查询


1.范式

数据库的范式是⼀组规则。在设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数
据库,这些不同的规范要求被称为不同的范式。
关系数据库有六种范式:第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、巴斯-科德
范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式),越高的范式数据库冗余越
小。然而,普遍认为范式越高虽然对数据关系有更好的约束性,但也可能导致数据库IO更繁忙,因此
在实际应用中,数据库设计通常只需满足第三范式即可。

1.1.第一范式

1.1.1 定义

• 数据库表的每⼀列都是不可分割的原子数据项,而不能是集合,数组,对象等非原子数据。
• 在关系型数据库的设计中,满足第一范式是对关系模式的基本要求。不满足第一范式的数据库就不
能被称为关系数据库,

1.1.2.例子

定义一个学生表,包括学生信息和学校信息。
但是我们发现上面的学校,学校也是一个对象,他也可以继续再分,因此这样分是不满足第一范式的。
在这里插入图片描述因此在定义表的时候,对照到数据中的数据类型,每一个字段都可以用一个数据类型表示,那么当前的数据类型就满足第一范式

1.2.第二范式

1.2.1 定义

在满足第一范式的基础上,不存在非关键字段对任意候选键部分函数依赖。存在于表中定义了复合主键的情况下。

候选键:可以唯⼀标识一行数据的列或列的组合,可以从候选键中选⼀个或多个当做表的主键

在这里插入图片描述

1.2.2 例子

学生可以选修课程,课程有对应的学分,学生考试后每门课程会产生相应的成绩。
首先先举一个反例,那就是所有的内容都写在一个表中。
在这里插入图片描述

  • 这张表中使用学号+课程名定义复合主键来唯一标识一个学生某门课程的成绩,这也是这张表的主要作用
  • 学生是通过学号来确定的,学生的姓名、年龄和性别和课程没有关系,即 学生的信息只依赖学号,不依赖课程名;学分是通过课程来确定的,课程的学分与学生没有关系,即学分只依赖课程名,不依赖学生
  • 对于使用复合主键的表,如果⼀⾏数据中的有些列只与复合主键中的⼀个或其中几个列有关系,那么就说他存在部分函数依赖,也就不满足第⼆范式。
    在这里插入图片描述

1.2.3.不满足第二范式可能会出现的问题

  1. 数据冗余
    学生的姓名、年龄、性别和课程的学分在每行记录中重复出现,造成了大量的数据冗余。
  2. 更新异常
    如果要调整MySQL的学分,那么就需要更新表中所有关于MySQL的记录,⼀旦执行中断导致某些记录更新成功,某些数据更新失败,就会造成表中同⼀门课程出现不同学分的情况,出现数据不⼀致问题。
  3. 插⼊异常
    ⽬前这样的设计,成绩与每⼀门课和学生都有对应关系,也就是说只有学⽣参加选修课程考试取得了成绩才能生成⼀条记录。当有一门新课还没有学生参加考试取得成绩之前,那么这门新课在数据库中是不存在的,因为成绩为空时记录没有意义。
  4. 删除异常
    把毕业学生的考试数据全都删除,此时课程和学分的信息也会被删除掉,有可能导致⼀段时间内,数据库里没有某门课程和学分的信息
    在这里插入图片描述

1.3.第三范式

1.3.1 定义

在满足第二范式的基础上,不存在非关键字段,对任⼀候选键的传递依赖。

2.3.2 示例

要求学生表中记录学生所属的学院,在满足第二范式的基础上对学生表做出修改。
我们先举一个反例
在这里插入图片描述

  • 因为是要描述学生信息,并且在表中定义了Id为主键,Id可以明确的标识每条学生信息
  • 在这个表结构中,可以看出学生的学号、姓名、年龄、性别与主键Id强相关;学院电话、学院地址与学院强相关;在⼀个表中出现了两个强相关的关系,而且这两个强相关关系又存在传递现象,即通过学生Id可以找到学生记录,学⽣记录中包含学院名,每个学院又有自己的电话和地址。
  • 这种传递现象称为传递依赖,所以当前的表不满足第三范式

在这里插入图片描述
按照下面图写的,就符合第三范式
在这里插入图片描述


2. 设计过程

  1. 从现实业务中抽象得到概念类
    概念类是从现实世界中抽象出来的,在需求分析阶段就需要确定下来
    类对应了数据库设计中的实体,实体对应了数据库中的表
    类中的属性对应实体中的属性,实体的属性对应了表中的列
  2. 确定实体与实体之间的关系,并画出E-R画,方便项目参与⼈员理解与沟通
  3. 根据E-R图完成SQL语句的编号并创建数据库

3. 实体-关系图

实体-关系图(Entity-Relationship Diagram)简称E-R图,也称作实体联系模型、实体关系模型,是⼀种用于描述数据模型的概念图,主要用于数据库设计阶段。

3.1 E-R图的基本组成

E-R图包含了以下三种基本成分:
• 实体:即数据对象,用矩形框表,比如用户、学生、班级等。
• 属性:实体的特性,用椭圆形或圆角矩形表示,如学生的姓名、年龄等。
• 关系:实体之间的联系,用菱形框表示,并标明关系的类型,并用直线将相关实体与关系连接起来。

3.2 关系的类型

3.2.1 一对一关系(1:1)

  • 一个用户实体包含的属性有:用户昵称,真实姓名,手机号,邮箱地址,性别,学校
  • 一个账户实体包含的属性有:登录用户名,密码
  • 用户实体与账户实体是一对一的关系,用E-R图表如下:
    *在这里插入图片描述

3.2.2 ⼀对多关系(1:N)

• ⼀个学生实体包含的属性有:真实姓名,学号,年龄,性别,入学时间
• ⼀个班级实体包含的属性有:班级名,学生人数
• ⼀个班级中有多个学生,所以班级实体与学生实体是一对多的关系,反过来说学生实体与班级实体是多对一,用E-R图表示如下:
在这里插入图片描述

3.2.3 多对多关系(M:N)

  • ⼀个学生实体包含的属性有:真实姓名,学号,年龄,性别、入学时间
  • ⼀个课程实体包含的属性有:课程名
  • ⼀个学生可以选修改多门课程,一门课程也可以被多名学生选修改,所以学生与课程之间是多对多关系,用E-R图表示如下:

在这里插入图片描述

  • 对于多对多关系,可以使用中间表进行记录,比如⼀个学生参加了某⼀门课程的考试得到了相应的成绩,用E-R图表示如下:
    在这里插入图片描述

相关文章:

Mysql(五) --- 数据库设计

文章目录 前言1.范式1.1.第一范式1.1.1 定义1.1.2.例子 1.2.第二范式1.2.1 定义1.2.2 例子1.2.3.不满足第二范式可能会出现的问题 1.3.第三范式1.3.1 定义2.3.2 示例 2. 设计过程3. 实体-关系图3.1 E-R图的基本组成3.2 关系的类型3.2.1 一对一关系(1:1)3.2.2 ⼀对多关系(1:N)3.…...

po框架的了解和应用

https://www.cnblogs.com/xiaolehong/p/18458470 笔记 任务:1、通过po框架输入测试报告 2、编写自动化测试框架 3、总结测试讲解稿 自动化测试框架概念: 自动化测试框架是一个集成体系,这个体系中包含测试功能的函数、测试数据源、测试对以及重要的模块。 作用:用于解决或…...

Linux云计算 |【第四阶段】RDBMS2-DAY5

主要内容: PXC概述、部署PXC(自动故障恢复测试)、存储引擎、读锁/写锁、表锁/行锁、常用的存储引擎介绍 一、PXC概述 PXC(Percona XtraDB Cluster,简称PXC集群),是基于Galera的MySQL高可用集群…...

从0开始深度学习(9)——softmax回归的逐步实现

文章使用Fashion-MNIST数据集,做一次分类识别任务 Fashion-MNIST中包含的10个类别,分别为: t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙&…...

Cannot inspect org.apache.hadoop.hive.serde2.io.HiveDecimalWritable 问题分析处理

报错; org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationException: Cannot inspect org.apache.hadoop.hive.serde2.io.HiveDecimalWritable 该问题常见于parquet格式hive表查询时,一般原因为hive表对应数据文件元数据对应格式与…...

电子取证新视角:USB键盘流量提取密码方法研究与实现

0x01 引言 在当今数字化时代,USB设备的广泛使用使得信息安全和电子取证领域面临着新的挑战与机遇。特别是USB键盘,作为一种常见的输入设备,其流量中可能包含用户输入的敏感信息,如密码和其他私人数据。因此,研究USB键…...

Tongweb7049m4+THS6010-6012配置故障轉移+重試机制(by lqw)

使用场景 1.ths代理tongweb多套后端,假如有其中一套tongweb因为服务器重启或者宕机后没有及时启动,导致ths一直轮询在这个出故障的节点上。 2.即使在tongweb重启了,有的应用启动也需要一定的时间,这个时候只是启动了应用端口&…...

在线客服系统网站源码-网页聊天客服实现代码

源码简介 在线客服系统 – 网上客服系统,在线客服系统网站源码。 消息预知功能就是别人在聊天框打字你都能看到 1.新增客服坐席消息互动,客服之间可以互相接收消息,可以智能分配 2.新增消息预知功能,可提前预知访客已输入未发…...

JioNLP:一款实用的中文NLP预处理工具包

一、什么是 JioNLP? JioNLP是一个面向NLP开发者的工具包,提供了常见的中文文本预处理、解析等功能,使用简单、高效准确、无需配置,可极大加快NLP项目的开发进度。 主要特点包括: 代码开源,使用MIT协议功能丰富,涵盖多个NLP预处理需求使用简单,无需复杂配置即可调用准确高效…...

GR-ConvNet论文 学习笔记

GR-ConvNet 文章目录 GR-ConvNet前言一、引言二、相关研究三、问题阐述四、方法A.推理模块B.控制模块C.模型结构D.训练方法E.损失函数 五、评估A.数据集B.抓取评判标准 六、实验A.设置B.家庭测试物体C.对抗性测试物体D.混合物体 七、结果A.康奈尔数据集B.Jacquard数据集C.抓取新…...

windows环境批量删除指定目录下的全部指定文件

写在开头: 1. 涉及文件删除,先在小范围内测试(更改D:\扫描文件路径) 2. 命令会递归该目录下的所有文件 命令: forfiles /p D:\ /s /m _maven.repositories /c "cmd /c del path"解释: /p D:\ …...

水深探测仪的作用和使用方法

在水域救援的行动里,救援人员时刻面临着复杂多变、充满未知的水域状况。当接到救援任务奔赴现场,那片需要涉足的水域就像一个神秘莫测的异世界,挑战着所有人的认知与勇气。 水深探测仪作为一种专用于测量水域深度的设备,通过声波和…...

Leetcode 搜索插入位置

这段代码的核心思想是 二分查找,用于在一个已经排序的数组中查找目标值的位置。如果目标值存在于数组中,返回它的索引;如果目标值不存在,返回它按顺序应该插入的位置。 算法思想步骤: 定义左右边界: 我们使…...

jsp怎么实现点赞功能

在JSP中实现点赞功能通常涉及前端页面的设计、后端逻辑处理以及数据存储。为了实现点赞功能,你可以使用以下步骤: 前端(JSP页面)设计 前端部分包括显示点赞按钮,并通过Ajax发送点赞请求,以避免页面刷新。 …...

取消microsoft edge作为默认浏览器 ,修改方法,默认修改不了的原因

将Microsoft Edge或其它浏览器设置为默认浏览器,可以尝试以下方法来解决此问题: 一, 通过浏览器设置修改:打开Microsoft Edge浏览器,单击右上角的“更多”按钮,然后选择“设置”。在设置页面左侧找到“默认…...

C++面试速通宝典——17

283. Nginx负载均衡算法 ‌‌‌‌  Nginx支持多种负载均衡算法。 轮询(Round Robin):默认算法,按顺序逐个分配请求到后端服务器。加权轮询(Weighted Round Robin):与轮询类似,但…...

10、论文阅读:基于双阶对比损失解纠缠表示的无监督水下图像增强

Unsupervised Underwater Image Enhancement Based on Disentangled Representations via Double-Order Contrastive Loss 前言引言方法介绍解耦框架多尺度生成器双阶对比损失双阶对比损失总结损失函数实验前言 在水下环境中拍摄的图像通常会受到颜色失真、低对比度和视觉质量…...

Git配置token免密登录

配置token免密登录 如果不用ssh免密登录,还有其他基于Token那得免密登录方法吗? 2021年开始,github就不能使用密码登录git了,需要使用token作为密码登录,需要自己在setting中创建。 那么每次都需要我手动输入token密…...

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!

第二十四届 GOPS 全球运维大会暨研运数智化技术峰会上海站将于2024年10月18日-19日在上海中庚聚龙酒店召开。大会将为期2天,侧重大模型、DevOps、SRE、AIOps、BizDevOps、云原生及安全等热门技术领域。特设了如大模型 运维/研发测试、银行/证券数字化转型、平台工程…...

Flutter技术学习

以下内容更适用于 不拘泥于教程学习,而是从简单项目入手的初学者。 在开始第一个项目之前,我们先要了解 两个概念。 Widget 和 属性 Widget 是用户界面的基本构建块,可以是任何 UI 元素。属性 是 widget 类中定义的变量,用于配…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...