数据库设计题先找实体,不要先想表
很多同学一看到数据库设计就急着画表,结果字段堆在一起,主键外键也乱。更稳的顺序是先从业务描述里找实体,比如客户、订单、商品、课程、学生。
实体通常是业务中需要长期管理的对象。找到实体后,再看实体之间是一对一、一对多还是多对多。联系类型决定后面怎么转成关系表。
ER 图转关系模式的三个常见规则
一对多关系通常把“一”端的主键放到“多”端作为外键。比如客户和订单,一个客户多个订单,订单表里保存客户编号。
多对多关系通常单独建立联系表。比如学生选课,学生和课程之间不能简单把课程编号塞进学生表,而应建立选课表。
| 联系类型 | 常见转换方法 | 例子 |
|---|---|---|
| 一对一 | 可在任一端放外键,结合业务约束判断 | 人和身份证信息 |
| 一对多 | 在多端表加入一端主键作为外键 | 客户和订单 |
| 多对多 | 新建联系表,放两端主键 | 学生和课程 |
| 带属性联系 | 联系属性通常放在联系表中 | 选课成绩、选课时间 |
主键、外键、候选键别混
主键是表中用于唯一标识一条记录的字段或字段组合。候选键是能唯一标识记录的候选集合,主键是从候选键中选出来的一个。
外键用于表达表之间的引用关系。它不是为了让字段看起来高级,而是为了说明这条记录关联到另一张表中的哪条记录。
候选键能唯一标识元组的属性集
主键从候选键中选定的主要标识
外键引用另一关系主键或候选键的属性
范式题重点看依赖关系
第一范式看属性是否原子;第二范式看非主属性是否完全依赖候选键;第三范式看是否存在非主属性对候选键的传递依赖。
题目如果写出 A→B、B→C 这类函数依赖,就不要只凭字段名字猜。先找候选键,再看非主属性是直接依赖、部分依赖,还是绕了一层的传递依赖。
| 范式 | 主要关注 | 常见题眼 |
|---|---|---|
| 1NF | 属性原子 | 一个字段里不能再拆出多值 |
| 2NF | 消除部分依赖 | 非主属性完全依赖候选键 |
| 3NF | 消除传递依赖 | 非主属性不经由另一个非主属性依赖主键 |
SQL 题不要脱离表关系
软件设计师也会考基础 SQL。单表查询看 WHERE、ORDER BY、GROUP BY;多表查询要看 JOIN 和连接条件。连接条件漏掉,很容易变成笛卡尔积。
如果题目问订单编号和客户名称,通常需要把订单表和客户表按客户编号连接起来。这里考的不是背语法,而是理解表之间的关系。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 软件设计师 2024 上半年第 2 题:数据库范式函数依赖 / 第二范式
- 软件设计师考试中第三范式主要看什么?数据库设计 / 第三范式
- ER 图一对多联系转换成关系表时外键放在哪里?ER 图 / 关系模式转换
- SQL 中 INNER JOIN 主要用来做什么?SQL / INNER JOIN