数据库面试中经常被问到某项目中的数据库如何设计的?
实际上并不是让你回答设计的过程,而是注重考察表的结构。回答该项目具体有几张表,每个表是做什么的,每张表中有哪些列,分别都是什么类型,代表了什么含义,有什么约束等等。这节我们详细讲一下数据库的设计问题。
数据库设计
我们采用一个案例来进行说明。假设现在需要设计一个教务系统来管理里很多的学生和班级。
1. 实体
实体:需求场景中的核心概念 / 重要名词。
对于教务系统来说,实体包含学生和班级。
2. 关系
关系:指的是实体与实体之间的关系。分别是一对一关系,一对多关系以及多对多关系。
Q:如何区分实体实体之间的关系?
A:造句。比如:
一对一关系:一个用户从属于一个学生,一个学生也只能拥有一个用户号。
一对多关系:一个学生从属于一个班级,但一个班级可以包含多个学生。
多对多关系:一个学生可以选多门课程,一个课程也可以被多名学生来选。
2.1 一对一关系
一对一关系是最简单的,可以采取以下几种方法来实现:
- 直接把两个实体数据放在一张表中即可,即用户表和学生表拼成一个大表;
- 在用户表中带有一个“学生id”字段,通过学生id字段的值和学生表关联起来