【数据库必备知识】上手表设计

目录

前言

1. 基本步骤

1.1 梳理清楚需求中的实体

1.2 梳理清楚实体间的关系

2. 实体间的三种关系

2.1 一对一

2.2 一对多

2.3 多对多

小结ending


前言

本文讲解的是基本的表设计, 设计一般只有在有一定实际项目经验后, 才能深入了解, 博主也是在不断学习, 给大家先讲一下最基础的方法. 主要给大家讲一下实体与实体之间的对应关系.

本文篇幅不多, 看完即可了解表的设计方法.

1. 基本步骤

在设计中, 如果只是一些简单的场景, 设计无从谈起, 因为其建表是比较明显的. 当遇到一些复杂需求时, 我们便需要考虑表该如何去设计了.

而简单来说, 就是根据需求, 把表应该是什么样子的, 给写出来, 有几个表, 每个表是干什么的, 每个表有几个字段, 都是用来描述什么的, 都是什么类型, 有什么约束等等都需要进行考虑.

而想要实现, 我们就先进行以下两步.

1.1 梳理清楚需求中的实体

在面向对象设计中, 这步叫做 "找对象", 而在数据库当中, 就叫做 "找实体", 就是需求中的咦嘻嘻额关键性质的名字.

比如我们现在需要实现一个教务管理系统:

  • 要能管理所有学生的信息
  • 要能管理所有教师的信息
  • 要能管理所有作业的信息
  • 要能管理所有课程的信息
  • ...

而学生, 教师, 作业 , 课程就是教务管理系统中的实体. 很多时候, 每个实体就要有一个对应的表来进行表示

1.2 梳理清楚实体间的关系

我们还是用教务管理系统来举例:
    实体之间的关系, 主要有三种:

  • 一对一: 一个学生只能有一个账号, 而一个账号也只能供一个学生来使用.
  • 一对多:  一个班级可以包含多个学生, 一个学生也只能处于一个班级.
  • 多对多: 一个学生可以选择多个课程, 一个课程也可以提供给多个学生.

下面我们着重讲一下实体之间的是那种关系.

2. 实体间的三种关系

实体与实体之间的三种关系为, 一对一, 一对多, 多对多, 如果三种关系都不满足, 那么就是实体间没有关系

2.1 一对一

【数据库必备知识】上手表设计_第1张图片

在本案例中, 一对一的关系是:

一个学生只能有一个账号, 而一个账号也只能供一个学生来使用.

那么我们如何设计表呢? 经过分析后可以有以下两种情况:

(1) 设计一张 accout - student 大表, 其中包含学生信息 + 账号信息

accout-student(accout_id, username, password, student_id, student_name ...)

(2) 设计两张表, 一张 student 表存放学生信息, 一张 account 表账号信息, 两张表相互关联

account(account_id, username, password, student_id)

student(student_id, student_name ...)

利用 student_id 来关联两个表, 不过还有一种关联方式:

account(account_id, username, password)

student(student_id, student_name, account_id ...)

下面这个是利用 account_id 进行关联的, 两种关联方式哪个更优呢?

如果当后续我们还要设计一张教师表, 采用第一种方法的话, 是不是得一直得在account表中添加内容, 而如果采用第二种方法, 我们直接在教师表中, 添加 account_id 字段, 即可直接与 account 表关联, 所以在设计时, 尽量采用第二种关联方式.

2.2 一对多

【数据库必备知识】上手表设计_第2张图片

在本案例中, 一对多的关系是:

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

这种情况, 也有两种典型的表示方式.

(1) 设计两张表, 一张 student 学生表, 一张 class 班级表, 在 class 表中弄一个数组或者列表来保存学生id

student(student_id, student_name)

class(class_id, class_name, student_idLIst)

但是要注意, 如果是在MySQL中的话, 是不能使用这种设计方式的, 因为在MySQL当中, 是没有数组类型的, 但是在有些数据库中, 是有数组类型的, 比如Redis, 此时就可以考虑使用这种设计方式. 

(2) 设计两张表, 一张 student 学生表, 一张 class 班级表, 在 student 表中设置一个字段 class_id 来存储班级信息

student(student_id, student_name, class_id)

class(class_id, class_name)

将两表的 class_id 进行关联, 这样我们就将 student 表中的每一个学生都绑定了一个班级.

2.3 多对多

【数据库必备知识】上手表设计_第3张图片

在本案例中, 多对多的关系是:

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

这种情况, 我们一般需要一张 student_course 关联表(中间表), 用来关联学生和课程之间的关系

student(student_id, student_name)

course(course_id, course_name)

student_course(student_id, course_id)

将关联表中的id信息, 分别与 student 和 course 相关联, 就可以实现多对多的关系了.


小结ending

✨一般来说, 只要实体和关系都明确了, 表的设计也就差不多了, 如果实体比较多, 关系比较复杂, 还可以再画一个实体关系图(ER图)来表示这个关系.

 ✨ 想了解更多数据库知识, 可以打开博主的数据库专栏目录↓小白的数据库学习之路http://t.csdn.cn/Fh557

✨感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.

再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!

你可能感兴趣的:(小白的数据库学习之路,数据库,实体关系图,ER图,设计,表设计)