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      java19
         2      java20
         3      java21



student(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考试中,一定会考,这种说明,学校学的不一定用到),对于实体关系图,大家可参考网络,本文不做过多的介绍~~

相关推荐
白露与泡影30 分钟前
Spring Boot中的 6 种API请求参数读取方式
java·spring boot·后端
CodeClimb31 分钟前
【华为OD-E卷 - 服务失效判断 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb32 分钟前
【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
豪宇刘39 分钟前
MyBatis 与 MyBatis-Plus 的区别
java·tomcat
一个儒雅随和的男子1 小时前
Spring为什么要用三级缓存解决循环依赖?
java·spring·缓存
梦想是成为Java高手1 小时前
ThreadLocal的介绍与使用规范,初学者必看
java
StevenGerrad1 小时前
【读书笔记/源码】How Tomcat Works 笔记 - c1~c10
java·笔记·tomcat
我自是年少韶华倾负1 小时前
Mysql数据实时同步到Es上
数据库·mysql·elasticsearch
阿木Coding1 小时前
MySQL大厂面试题之——事务篇
mysql
数据小小爬虫1 小时前
淘宝商品详情API返回值说明:Python爬虫代码示例
java·爬虫·python