MySQL中表的设计

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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考试中,一定会考,这种说明,学校学的不一定用到),对于实体关系图,大家可参考网络,本文不做过多的介绍~~

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
46 0
|
10月前
|
存储 SQL 关系型数据库
表结构的操作【MySQL】
表结构的操作【MySQL】
68 0
|
11月前
|
SQL 关系型数据库 MySQL
【MySQL】 MySQL表的增删改查(基础)
【MySQL】 MySQL表的增删改查(基础)
|
8月前
|
关系型数据库 MySQL 数据库
【MySQL学习】MySQL表的增删改查操作2
【MySQL学习】MySQL表的增删改查操作
90 0
|
3月前
|
NoSQL 关系型数据库 MySQL
【MySQL探索之旅】MySQL数据表的增删查改——约束
【MySQL探索之旅】MySQL数据表的增删查改——约束
|
3月前
|
关系型数据库 MySQL 数据库
【MySQL 数据库】3、多表查询
【MySQL 数据库】3、多表查询
68 0
|
8月前
|
关系型数据库 MySQL 数据库
【MySQL学习】MySQL表的增删改查操作1
【MySQL学习】MySQL表的增删改查操作
119 1
|
8月前
|
Oracle 关系型数据库 MySQL
【MySQL学习】MySQL表的增删改查操作3
【MySQL学习】MySQL表的增删改查操作
66 0
|
10月前
|
存储 关系型数据库 MySQL
MySQL多表关系详解
MySQL是一种常用的关系型数据库管理系统,它允许我们创建多个表格,并通过各种方式将这些表格联系在一起。在实际的数据库设计和应用中,多表关系是非常常见的,它能够更好地组织和管理数据,实现数据的复杂查询和分析。本文将详细介绍MySQL多表关系的基本概念、类型、设计原则以及常见应用场景。
275 2
|
9月前
|
SQL 关系型数据库 MySQL
MySQL中表的增删改查(下)
MySQL中表的增删改查
54 0