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

MySQL中表的设计

在MySQL中表的设计,需要一定的经验才能理解,由于笔者目前在读中,理解不是很深刻,仅根据自己的想法+外界的一些参考资料做出下述文字描述,一些错误,请大佬及时指正~~

在本篇文章中,介绍一点简单粗暴的方法,来带领大家走进MySQL中表的设计!

所谓的设计:根据需求,把表应该是干啥的,啥样的写出来,有几个表,每个表又是干啥的,每个表里面有几个字段,都是干啥的,有啥类型,有啥约束~~~

设计表:一般需要分成两部:
一:梳理清楚需求中的“实体”
二:梳理清楚“实体”之间的关系----》按照关系带入到既定的公式中~

根据上述说法:比如要实现一个教务管理系统,我们有着一下 的简单想法:

  1. 要能管理所有的学生信息
  2. 要能管理所有的教师信息
  3. 要能管理所有的作业信息
  4. 要能管理所有的课程信息

在上述的这个列子中:学生,教师,作业,课程等,所代表的便是实体~

其实在很多时候,每个实体需要对应一张表来进行表示~

那么,问题来了:如何判断俩个实体之间的关系??其实在实体之间主要有三种(严格来说是四种)关系:

  1. 一对一
  2. 一对多
  3. 多对多
  4. 没关系(严格来说)

如:一对一:一个学生只能有一个账号,一个账号只能供一个学生使用~

那么,该如何设计表呢??

如何设计一对一的表??1)搞一个大表:包含学生信息+账号信息(不建议使用)
account_student(accountId ,username, password, studentname, ………………);2)搞两个表:相互关联
account(accountId, username, password, studentId);
student(studentId,name……………………);3)搞两个表《-----后续可以搞一些教师表啥的,也可以和account进行关联(该方法比较好)
account(accountId, username, password);
student(studentId, studentname, accountId);

一对多:一个班级可以包含多个学生,一个学生只能处于一个班级

在一对多的这种情况下,有两种典型的表示方式:

写法1(错误想法----》MySQL中没有数组类型~

~~~~~~~~~~~~~~~~MySQL中没有数组类型(下述为错误演示,仅供参考)~~~~~~~~~~~~~~~~
student(studentId, name);
class(classId,classname, studentIdList);在上述中:studentIdList相当于搞了数组/链表来存储学生id
但是,很遗憾的是,MySQL中不支持这种写法(MySQL没有数组类型)但是,有一些数据库redis,由数组类型,此时可以考虑这样设计~~

想法2:搞两张表(这种方案是咱们最典型的一对多的设计方式~~(大力支持)!

calss(classId, classname)1      java192      java203      java21student(studentId, name, classId)1      张三     1        (张三java19)2      李四     2         (李四java20)3      王五     3         (王五java21)

在上述的一对多的表中:我们可以简单理解为:

多对多:一个学生可以选择多门课程,一个课程也可以提供给多个学生

学生表
student(studentId, name);1      张三2      李四课程表
course(courseId, name);1      语文2      数学为了把学生和课程关联起来,我们需要搞一个关联表~~
student_couers(studentId, courseId);1         1        (张三选择了语文)1         2         (张三选择了数学)2         1         (李四选择了语文)

在多对多的关系中,我们通过一个student_course关联表,将两个无关的表建立了联系~~

上述的一对一,一对多,多对多三种关系,在未来阶段是非常实用的~

一般来说,只要实体和关系都明确了,此时表的设计就基本差不多了~

当然,如果设计到的实体比较多,可以画一个实体关系图来表示这个关系~(实际开发中,很少会画,但是在学校MySQL考试中,一定会考,这种说明,学校学的不一定用到),对于实体关系图,大家可参考网络,本文不做过多的介绍~~

相关文章:

MySQL中表的设计

在MySQL中表的设计,需要一定的经验才能理解,由于笔者目前在读中,理解不是很深刻,仅根据自己的想法外界的一些参考资料做出下述文字描述,一些错误,请大佬及时指正~~ 在本篇文章中,介绍一点简单粗…...

UE4/5在蓝图细节面板中添加函数按钮(蓝图与c++的方法)

目录 在细节面板中添加按钮使用函数 蓝图的方法 事件 函数 效果 uec的方法 效果 在细节面板中添加按钮使用函数 很多时候,我们可以看到一些插件的actor类中,点击一下之后就可以实现如矩阵一样的效果。 实际上是因为其使用了函数来修改了蓝图中的数…...

Python爬虫乱码问题之encoding和apparent_encoding的区别

encoding是从http中的header中的charset字段中提取的编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文,这是乱码的原因 apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encodi…...

Docker技术--Docker简介和架构

1.Docker简介 (1).引入 我们之前学习了EXSI,对于虚拟化技术有所了解,但是我们发现类似于EXSI这样比较传统的虚拟化技术是存在着一定的缺陷:所占用的资源比较多,简单的说,就是你需要给每一个用户提供一个操作平台,这一个…...

废品回收功能文档

废品回收 基础版 后台功能 功能字段描述二级分类表字段:图标、名称、描述、图片、注意事项、上一级、状态功能:前端展示和筛选;增删改查今日指导价表字段:关联分类、名称、价格、单位、状态功能:前端展示和预估价格&…...

【ARMv8 SIMD和浮点指令编程】NEON 乘法指令——asimdrdm

ARMv8 有许多版本(ARMv8.1 等),它们定义了强制和可选功能。Linux 内核通过 hwcaps 公开了其中一些功能的存在。这些值显示在 /proc/cpuinfo 中。 名称版本支持的特性fp-Single-precision and double-precision floating point.asimd-Advanced SIMD.evtstrmN/AGeneric timer …...

[SWPUCTF 2022]——Web方向 详细Writeup

SWPUCTF 2022 ez_ez_php 打开环境得到源码 <?php error_reporting(0); if (isset($_GET[file])) {if ( substr($_GET["file"], 0, 3) "php" ) {echo "Nice!!!";include($_GET["file"]);} else {echo "Hacker!!";} }e…...

Shell编程:流程控制与高级应用的深入解析

目录 Shell 流程控制 1、条件语句 2、循环语句 Shell 函数 Shell 输入/输出重定向 Shell 文件包含 文件包含的示例 Shell 流程控制 使用Shell编程时&#xff0c;流程控制是非常重要的&#xff0c;它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基…...

一文讲通嵌入式现状

近年来&#xff0c;随着计算机技术和集成电路技术的迅速发展&#xff0c;嵌入式技术在通讯、网络、工控、医疗、电子等领域日益普及&#xff0c;并发挥着越来越重要的作用。嵌入式系统已成为当前最为热门和前景广阔的IT应用领域之一。 随着信息化、智能化、网络化的不断推进&am…...

设计模式-代理模式Proxy

代理模式Proxy 代理模式 (Proxy)1) 静态代理1.a) 原理解析1.b) 使用场景1.c) 静态代理步骤总结 2) 动态代理2.a) 基于 JDK 的动态代理实现步骤2.b) 基于 CGLIB 的动态代理实现步骤2.c) Spring中aop的使用步骤 代理模式 (Proxy) 代理设计模式&#xff08;Proxy Design Pattern&…...

如何使用CSS实现一个自适应等高布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Flexbox 布局⭐ 使用 Grid 布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发…...

Google colab部署VITS——零门槛快速克隆任意角色声音

目录 序言 查看GPU配置 复制代码库并安装运行环境 选择预训练模型 上传视频链接&#xff08;单个不应长于20分钟&#xff09; 自动处理所有上传的数据 训练质量相关&#xff1a;实验发现目前使用CJ模型勾选ADD_AUXILIARY&#xff0c;对于中/日均能训练出最好的效果&#x…...

14 | Spark SQL 的 DataFrame API 读取CSV 操作

sales.csv 内容 date,category,product,full_name,sales 2023-01-01,Electronics,Laptop,John Smith,1200.0 2023-01-02,Electronics,Smartphone,Jane Doe,800.0 2023-01-03,Books,Novel,Michael Johnson,15.0 2023-01-04,Electronics,Tablet,Emily Wilson,450.0 2023-01-05,B…...

redis面试题二

redis如何处理已过期的元素 常见的过期策略 定时删除&#xff1a;给每个键值设置一个定时删除的事件&#xff0c;比如有一个key值今天5点过期&#xff0c;那么设置一个事件5点钟去执行&#xff0c;把它数据给删除掉&#xff08;优点&#xff1a;可以及时利用内存及时清除无效数…...

虚拟现实(VR)和增强现实(AR)

虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;和增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;是两种前沿的计算机技术&#xff0c;它们正在改变人们与数字世界的互动方式。虚拟现实创造了一个计算机生成的全新虚拟环境&#xff0c;而增…...

如何使用ChatGPT提词器,看看这篇文章

ChatGPT提词器是一种强大的自然语言处理工具&#xff0c;可以帮助你提高创造性写作的效率和质量。本教程将向您介绍如何使用ChatGPT提词器&#xff0c;以获得有趣、吸引人的文章、故事或其他文本内容。 步骤1&#xff1a;访问ChatGPT提词器 首先&#xff0c;确保您已经访问了…...

vue3-vuex持久化实现

vue3-vuex持久化实现 一、背景描述二、实现思路1.定义数据结构2.存值3.取值4.清空 三、具体代码1.定义插件2.使用插件 四、最终效果 一、背景描述 有时候我们可能需要在vuex中存储一些静态数据&#xff0c;比如一些下拉选项的字典数据。这种数据基本很少会变化&#xff0c;所以…...

详解 SpringMVC 的 @RequestMapping 注解

文章目录 1、RequestMapping注解的功能2、RequestMapping注解的位置3、RequestMapping注解的value属性4、RequestMapping注解的method属性5、RequestMapping注解的params属性&#xff08;了解&#xff09;6、RequestMapping注解的headers属性&#xff08;了解&#xff09;7、Sp…...

类的静态成员变量 static member

C自学精简教程 目录(必读) 类的静态成员 static member 变量全局只有一份副本&#xff0c;不会随着类对象的创建而产生副本。 static 静态成员 在类的成员变量前面增加static关键字&#xff0c;表示这个成员变量是类的静态成员变量。 #include <iostream> using name…...

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

文章目录 1 准备工作1.1 下载源码1.2 测试集下载2 配置环境3 dtu数据集 重建演示3.1 重建效果查看4 补充解释4.1 bash 脚本文件超参数解释4.2 lists/dtu解释5 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...