本文档描述短链解析系统的数据库模型与索引设计。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
BIGINT | PK, AUTO_INCREMENT | 主键 |
code |
VARCHAR(8) | NOT NULL, UNIQUE | 短链码,当前 6 位字母数字;预留 8 位为未来扩展 |
original_url |
VARCHAR(2048) | NOT NULL | 原始长 URL |
expires_at |
DATETIME | NULL | 过期时间,NULL 表示永久有效 |
created_at |
DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 |
updated_at |
DATETIME | NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
deleted_at |
DATETIME | NULL, INDEX | 逻辑删除时间,NULL 表示未删除 |
建表 SQL
CREATE TABLE `short_links` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`code` VARCHAR(8) NOT NULL COMMENT '短链码',
`original_url` VARCHAR(2048) NOT NULL COMMENT '原始URL',
`expires_at` DATETIME NULL COMMENT '过期时间,NULL表示永久有效',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` DATETIME NULL COMMENT '逻辑删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
INDEX `idx_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短链映射表';| 索引名 | 字段 | 类型 | 说明 |
|---|---|---|---|
PRIMARY |
id |
主键 | 自增主键,用于内部管理 |
uk_code |
code |
唯一索引 | 短链码唯一约束,解析时按 code 点查,覆盖此索引 |
idx_deleted_at |
deleted_at |
普通索引 | 供后台清理任务扫描已删除记录;按 code 点查时由 uk_code 覆盖 |
解析短链时,按以下顺序判断:
deleted_at IS NOT NULL→ 返回 404(链接不存在)expires_at IS NOT NULL AND expires_at < NOW()→ 返回 410(链接已过期)- 以上均不满足 → 返回 302 跳转到原始 URL
- 按
original_url去重,不区分expires_at - 同一
original_url重复调用时,若存在未删除记录,直接返回已有短链 - 若该 URL 对应的短链已被逻辑删除,允许重新生成新的短链码
- 引入
access_logs表记录访问统计 - 引入
users表支持用户体系 - 考虑对
original_url加索引以优化去重查询(视数据量评估)