
1) 【一句话结论】设计包含“单位信息”“招聘信息”“用户信息”三个核心表,通过外键关联建立表间关系,并针对发布时间、岗位名称等高频查询字段建立索引,确保数据完整性与查询效率。
2) 【原理/概念讲解】数据库表设计需遵循范式,减少冗余。主键(如自增ID)唯一标识记录,外键(如单位ID)建立表间关联(如招聘信息属于某个单位)。索引(如B树索引)加速查询,例如按发布时间排序或搜索岗位名称时,索引能快速定位数据。类比:招聘信息表是“岗位库”,单位表是“单位库”,外键是“岗位库里的单位编号”,索引是“岗位库的目录页,快速找到最新发布的岗位”。
3) 【对比与适用场景】
| 类别 | 类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|---|
| 主键 | 自增ID | 表中唯一标识记录 | 不可空,唯一,自增 | 大多数表(如招聘信息、用户信息) | 避免频繁更新 |
| 外键 | 单位ID | 关联单位表主键 | 不可空,引用主键 | 建立表间关系(招聘属于单位) | 可级联删除/更新(可选) |
| 索引 | 发布时间(普通索引) | 加速按时间查询 | 非唯一 | 查询最新发布岗位 | 索引列不宜过多,避免更新开销 |
| 索引 | 岗位名称(全文索引,可选) | 加速文本搜索 | 可唯一/普通 | 搜索岗位关键词 | 全文索引适用于文本,提升搜索效率 |
4) 【示例】(SQL伪代码,最小可运行示例):
-- 单位信息表(存储招聘单位)
CREATE TABLE unit (
unit_id INT PRIMARY KEY AUTO_INCREMENT,
unit_name VARCHAR(100) NOT NULL,
address VARCHAR(200)
);
-- 招聘信息表(存储岗位详情,关联单位表)
CREATE TABLE job (
job_id INT PRIMARY KEY AUTO_INCREMENT,
job_name VARCHAR(100) NOT NULL,
requirements TEXT,
unit_id INT,
publish_time DATETIME NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (unit_id) REFERENCES unit(unit_id) -- 外键关联单位表
);
-- 用户信息表(存储求职者技能与偏好)
CREATE TABLE user_info (
user_id INT PRIMARY KEY AUTO_INCREMENT,
skills TEXT,
preferences VARCHAR(255),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 索引设计(优化查询)
CREATE INDEX idx_publish_time ON job(publish_time); -- 按发布时间排序
CREATE INDEX idx_job_name ON job(job_name); -- 按岗位名称搜索(全文索引更优)
5) 【面试口播版答案】(约80秒):
“面试官您好,针对招聘信息推荐系统,我设计三个核心表:单位信息表、招聘信息表、用户信息表。首先,单位信息表存储单位的基本信息(单位ID、名称等),招聘信息表通过外键(单位ID)关联单位表,包含岗位名称、要求、发布时间等;用户信息表存储求职者的技能和偏好。关键设计思路:主键用自增ID确保唯一,外键建立表间关系(如招聘属于单位),针对高频查询字段(发布时间、岗位名称)建立索引,加速查询。比如按发布时间排序最新岗位,或搜索岗位名称时,索引能快速定位数据。这样既保证数据完整性,又提升查询效率。”
6) 【追问清单】
7) 【常见坑/雷区】