一、什么是数据库设计?
在软件研发的过程中,数据库设计是在产品经理完成需求分析后,开发人员进行编码前进行的一个重要步骤,数据库设计就是根据业务系统的具体需求,为这个业务系统构造出最优的数据存储模型,也就是建立数据库中的表结构以及表与表之间的关联关系的过程,在进行数据库设计时,主要围绕这几个问题:需要构建哪些表? 表里有哪些字段? 表和表之间有什么关系?
二、业务的抽象与建模
在进行数据库表结构设计之前,我们首先要进行业务建模,也就是先理解业务,对业务进行提炼,最终形成一个能表述业务特征的模型,从模型中梳理出需要哪些表及表中字段。
业务建模的步骤
- 输入:在业务调研中形成的业务流程,通过业务流程了解到所有关键步骤和实体,这些就是业务建模的依据。
- 抽象和关联
- 业务流程中抽象出关键要素 ,例如用户角色、订单、内容、各种字段
- 找到元素之间的关联关系
- 进行验证:通常采用的方法是回到业务场景,把模型套用一遍,看能不能跑通
- 检查是否有缺失的主体、元素
- 元素内是否有缺少的字段
举例来说,我们可以选用E-R图进行业务建模,E-R图是统一建模语言中用来表达信息关系的一种图,全称实体关系图,所谓的"实体"就是指一个客观存在的事务,如下方E-R图所示,用户与商品就是两个实体,圆角矩形中为实体的属性,下单这个动作的实线上标明了用户与商品两个实体之间的关系,也就是一个用户单次下单行为可以包含多个商品,从模型中我们可以得知,该业务涉及三张表,分别是用户表、订单表、商品表。
注意:业务建模不等同于数据库表结构的设计,只是为了帮助设计者梳理清系统逻辑,抽象出关键特征,以便后续的表结构设计。
三、主键与外键
在设计表与表之间的关系之前,首先需要了解主键与外键的定义:
1.主键:数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。因为主键可以限制资料的唯一性,所以一般选取一个唯一不重复的字段作为一张数据库表的主键,例如一张人事信息表中,我们可以选取人员的身份证号作为表单的主键。
2.外键:外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。外键用于建立和加强两个表数据之间的连接,用来建立两个数据库表单之间的连接。例如有两张数据库表单,一张为学生的基本信息表,一张为班级表,如果我们想查询这些学生的班主任是哪位,那么我们就需要使用学生表中的"班级号"字段与班级表中的该字段对映,"班级号"字段在班级表中是主键,具有唯一性约束,那么我们就称"班级号"为学生表中的外键。
四、数据库表之间的关系
数据库表的关系分为以下几种:一对一、一对多、多对多
1.一对一
例如:学生表和学生详细信息表 一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能实现方式:在任意一方加入外键,关联另一方主键,并目设置外键为唯一。
2.一对多(多对一):
例如:班级表和学生表 一个班级对应多个学生,一个学生对应一个班级 实现方式:在多的一方建立外键,指向一的一方的主键
3.多对多
例如:订单和商品
一个商品对应多个订单,一个订单包含多个商品
实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
四、案例
在了解了数据库表的几种关系及实现方式后,我们以某音乐播放器的专辑页面来分析其背后的数据库表结构设计。
从上图信息中,我们可以把专辑页分为这几个实体:专辑信息、曲目、评论、用户。
一张专辑对应一个专辑详细信息与简介,包含一至多首曲目,支持多用户发表多条评论,对业务进行简要分析后,我们将其用E-R图进行表示,进行简单的业务建模:
根据业务建模中实体属性以及实体之间的对映关系结合上文中的数据库表结构实现方法,读者可以尝试自己列出该专辑页所需数据库表。