目录
数据库的设计
表的设计
所谓的“数据库设计” 和 “表的设计”其实就是根据实际问题场景,把表给创建出来。
【我觉得这个设计问题,就和 java 的 类 和 对象,差不多。将一个现实问题抽象一个类,这个类具有我们解决问题的属性和方法,再通过实例化去使用它。来解决我们实际问题】
但凡是和“设计”鱼贯的的话题,都比较抽象,一般来说都是都需有一定的经验。
很显然对于我们这些还未踏入职场的新人来说,肯定是缺乏的。
一般是给我们一个问题场景,让我们思考如何设计数据库,如何设计表。
一个典型的通用的办法:先找出这个场景中涉及到的“实体”,然后再来分析“实体之间的关系”。
【实体 就类似 java 中 对象,一些操作,是需要对象与对象之间的相互作用】
实体就可以视为是需求中的一些关键性的名词。
下面讲一个典型的场景
学管
实体之间的关系
实体之间的关系主要可以分为以下几种:
一对一的关系 【一个钥匙,开一扇门】
一对多的关系 【一个钥匙,开多扇门】
多对多的关系 【n 个钥匙,开m扇门】
没有关系 【就是两个互不相干的表】
分析实体之前的关系,一个关键性技巧就是造句。
不要想太复杂,就是小学语文的造句,给你几个词,用它造一个句子。
1. 一对一关系
一对一的关系很好理解:就是一一对应的关系。
就以上面讲的 学生管理系统为例。
学生的基本信息简称学生表(学号,学生姓名,学生班级。。。。)
教务系统,想必大家都很熟悉,每个人都有一个学生账号,那么我们就需要一个 账号管理的 user 表(账户姓名,账号,密码…)提取关键名词: 学生 和 账户
造句:一个账户对应到一个学生,一个学生只有一个账户。
这个就是一对一的关系。
2.一对多关系
假设我们有一个学生表 (学号,姓名…);一个 班级表(班级编号,班级名称…)
这就是一个 一对多的关系
还是造句: 一个 学生 属于一个 班级,一个班级可以包括多个学生。
一对多 就可以看作 一个班级 有多名学生。在数据库中表示一对多的关系,也有两种方法
方法一:
就跟前面的举例子是一样的:在学生表中添加一个列 classId 用来表示学生所在的班级编号。
方法二:
就跟前面的举例子是一样的:在班级表新增一列来表示 这个班级的学生id。
注意:
对于 MySQL来说, 表示一对多关系的时候,只能采用 方法一。
方法二之所以不能使用,是因为MySQL中没有数组这个类型
,所以无法用代码表现出方法二。
如果你用的是 Redis 这样的数据库,就有数组类型
,就可以考虑使用方法二来表示。
3.多对多关系
这种多对多的关系
,在数据库表示的方式只有一种:
使用一个关联表
来表示两个表之间的关系。