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

news2024/11/22 23:48:08

文章目录

  • 前言
  • 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图表示如下:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac 需要杀毒软件?

大部分 mac用户普遍认为 Apple mac 不受病毒和恶意软件的影响。这导致许多 Mac 用户误以为无需为 Mac 安装防病毒软件,但事实并非如此。 在这篇文章中,将深入探讨 Mac 安全性的细节,探索针对 Apple 设备的恶意软件类型,并为您…

高质量SCI论文撰写及投稿丨论文选题、文献调研、实验设计、数据分析、论文结构及语言规范等----AI强大功能

科学研究的核心在于将复杂的思想和实验成果通过严谨的写作有效地传递给学术界和工业界。对于研究生、青年学者及科研人员,如何高效撰写和发表SCI论文,成为提升学术水平和科研成果的重要环节。系统掌握从选题到投稿的全过程,提高论文撰写效率与…

petalinux 自动登陆 自动启动程序

PetaLinux 自动登陆 (1) cd 到项目工程目录下; (2) 运行命令:petalinux-config -c rootfs (3) 依次选择 Image Features -> serial-autologin-root 保存退出 创建APP petalinux-create apps --template install --name init-app --enable编辑文件 …

【环境搭建】MAC M1安装ElasticSearch

STEP1 官网下载ES Download Elasticsearch | Elastic,下载mac m1对应版本的es STEP2 进入bin文件夹,执行./elasticSearch 浏览器输入 127.0.0.1:9200 STEP 3 下载对应Kibana版本,Download Kibana Free | Get Started Now | Elastic 出现报错…

微信点赞的测试用例,应该在哪些方面进行设计!

功能模块测试的测试用例设计方法包括: 等价类划分法:把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一个部分中选取少数具有代表性的数据作为测试用例。比如字符串长度检查,字符类型检查,标点符号检查,特殊字符检查…

使用 Docker 部署前端项目:Vue 和 React 结合 Nginx 实现静态文件托管

使用 Docker 部署前端项目:Vue 和 React 结合 Nginx 实现静态文件托管 Web 开发中,将前端项目(例如 Vue 或 React 应用)打包后通过 Docker 容器和 Nginx 部署是非常常见的方式。它不仅简化了部署流程,还能确保在不同环…

linux线程 | 线程的概念

前言:本篇讲述linux里面线程的相关概念。 线程在我们的教材中的定义通常是这样的——线程是进程的一个执行分支。 线程的执行粒度, 要比进程要细。 我们在读完这句话后其实并不能很好的理解什么是线程。 所以, 本节内容博主将会带友友们理解什么是线程&a…

Vulnhub靶场案例渗透[6]- DC6

文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 主机信息收集2.3 主机目录扫描2.4 网站用户名和密码爆破 3. 反弹shell4. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码&#xff0c;对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algori…

RTSP 音视频play同步分析

基础理论 RTSP RTP RTCP SDP基础知识-CSDN博客 关于RTP的时间戳知识点回顾 时间戳单位&#xff1a;时间戳计算的单位不是秒&#xff0c;而是采用采样频率的倒数&#xff0c;这样做的目的是为了使时间戳单位更为精准。比如说一个音频的采样频率为8000Hz&#xff0c;那么我们可…

【华为】基于华为交换机的VLAN配置与不同VLAN间通信实现

划分VLAN&#xff08;虚拟局域网&#xff09;主要作用&#xff1a; 一、提高网络安全性 广播域隔离访问控制增强 二、优化网络性能 减少网络拥塞提高网络可管理性 sysytem-view #进入系统视图配置参数 vlan batch 10 20 #批量创建vlan LSW3: int g0/0/1 port…

「实战应用」如何用图表控件LightningChart可视化天气数据?(一)

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

scau:面向对象java实验作业1-2 猜数字游戏

题目名称实验1-2 猜数字游戏题目关键字数据类型 基本输入输出 控制语句 方法题目录入时间2022/10/10 11:01:37题目内容 使用Java程序&#xff0c;项目名称&#xff1a;GuessNumberGame&#xff0c;类根据自己需要定义。 程序开始运行后&#xff0c;允许玩家进行多次猜数字的游…

C++从入门到起飞之——(multi)set与(multi)map的的使用 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 序列式容器和关联式容器 2. set系列的使⽤ 2.1 set和multiset参考⽂档 2.2 set类的介绍 2.3 se…

Effective C++笔记之二十四:stack overflow

溢出&#xff08;Stack Overflow&#xff09;是指程序运行过程中&#xff0c;栈空间被耗尽&#xff0c;导致无法继续分配栈内存的错误。C程序中&#xff0c;栈用于存储函数调用的局部变量、返回地址、函数参数等。当栈空间耗尽时&#xff0c;会引发栈溢出&#xff0c;通常导致程…

java的Maven项目的ehcache缓存学习记录

java的ehcache缓存学习记录 第1步:pom.xml增加ehcache的依赖项 <!--ehcache缓存--><dependency><groupId>net.sf.ehcache</groupId</

Renesas R7FA8D1BH (Cortex®-M85) 上超声波测距模块(HC-SR04)驱动开发

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 硬件框架结构 2.2 测距模块&#xff08;HC-SR04&#xff09;介绍 2.2.1 HC-SR04特性 2.2.2 HC-SR04操作时序 2.2.3 计算距离 3 软件实现 3.1 FSP配置项目 3.1.1 配置IO口的外…

springboot 整合spring ai实现 基于知识库的客服问答

rag 需求产生的背景介绍&#xff1a; 在使用大模型时&#xff0c;常遇到的问题之一是模型可能产生幻觉&#xff0c;即生成的内容缺乏准确性。此外&#xff0c;由于大模型不直接访问企业的专有数据&#xff0c;其响应可能会显得泛泛而谈&#xff0c;不够精准或具体&#xff0c;…

Vue包的安装使用

文章目录 vue介绍一、灵活易用1.渐进式框架2.简洁的语法 二、高效的响应式系统1.数据驱动2.响应式原理 三、强大的组件化开发1.组件化思想2.组件通信 四、丰富的生态系统1.插件和库2.社区支持 安装依赖删除新增文件夹components设置(1)home.vue(2)data.vue(3)zero.vue router配…

Visual Studio Code 中通过鼠标滚轮调整字体大小并使用 Ctrl+W 关闭文档窗口【最详细】

1. 使用鼠标滚轮调整字体大小 希望通过鼠标滚轮与 Ctrl 键组合来放大或缩小编辑器的字体大小&#xff0c;按照以下步骤进行设置&#xff1a; 打开 Visual Studio Code。 进入设置页面&#xff1a; 点击左下角的齿轮图标&#xff0c;然后选择“设置”。 或者直接使用快捷键 …

最新Prompt预设词指令教程大全ChatGPT、AI智能体(300+预设词应用)

使用指南 直接复制在AI工具助手中使用&#xff08;提问前&#xff09; 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; SparkAi系统现已支持自定义添加官方GPTs&#xff08;对专业领域更加专业&#xff0c;支持多模态文档&#xff0…