软件设计师 · 下午题 · 数据库设计

软件设计师数据库设计题怎么做?

数据库设计题是软件设计师下午题里的老朋友。它表面上问 ER 图和关系模式,实际考的是你能不能把业务对象、联系、主键、外键和范式规则放到一张清楚的结构里。

软件设计师专题 软考题库编辑部 持续更新

数据库设计题先找实体,不要先想表

很多同学一看到数据库设计就急着画表,结果字段堆在一起,主键外键也乱。更稳的顺序是先从业务描述里找实体,比如客户、订单、商品、课程、学生。

实体通常是业务中需要长期管理的对象。找到实体后,再看实体之间是一对一、一对多还是多对多。联系类型决定后面怎么转成关系表。

ER 图转关系模式的三个常见规则

一对多关系通常把“一”端的主键放到“多”端作为外键。比如客户和订单,一个客户多个订单,订单表里保存客户编号。

多对多关系通常单独建立联系表。比如学生选课,学生和课程之间不能简单把课程编号塞进学生表,而应建立选课表。

联系类型常见转换方法例子
一对一可在任一端放外键,结合业务约束判断人和身份证信息
一对多在多端表加入一端主键作为外键客户和订单
多对多新建联系表,放两端主键学生和课程
带属性联系联系属性通常放在联系表中选课成绩、选课时间

主键、外键、候选键别混

主键是表中用于唯一标识一条记录的字段或字段组合。候选键是能唯一标识记录的候选集合,主键是从候选键中选出来的一个。

外键用于表达表之间的引用关系。它不是为了让字段看起来高级,而是为了说明这条记录关联到另一张表中的哪条记录。

候选键能唯一标识元组的属性集
主键从候选键中选定的主要标识
外键引用另一关系主键或候选键的属性

范式题重点看依赖关系

第一范式看属性是否原子;第二范式看非主属性是否完全依赖候选键;第三范式看是否存在非主属性对候选键的传递依赖。

题目如果写出 A→B、B→C 这类函数依赖,就不要只凭字段名字猜。先找候选键,再看非主属性是直接依赖、部分依赖,还是绕了一层的传递依赖。

范式主要关注常见题眼
1NF属性原子一个字段里不能再拆出多值
2NF消除部分依赖非主属性完全依赖候选键
3NF消除传递依赖非主属性不经由另一个非主属性依赖主键

SQL 题不要脱离表关系

软件设计师也会考基础 SQL。单表查询看 WHERE、ORDER BY、GROUP BY;多表查询要看 JOIN 和连接条件。连接条件漏掉,很容易变成笛卡尔积。

如果题目问订单编号和客户名称,通常需要把订单表和客户表按客户编号连接起来。这里考的不是背语法,而是理解表之间的关系。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。