Skip to content

Latest commit

 

History

History
72 lines (52 loc) · 2.59 KB

File metadata and controls

72 lines (52 loc) · 2.59 KB

数据库设计

本文档描述短链解析系统的数据库模型与索引设计。


数据表

short_links(短链映射表)

字段 类型 约束 说明
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 覆盖

状态判断优先级

解析短链时,按以下顺序判断:

  1. deleted_at IS NOT NULL → 返回 404(链接不存在)
  2. expires_at IS NOT NULL AND expires_at < NOW() → 返回 410(链接已过期)
  3. 以上均不满足 → 返回 302 跳转到原始 URL

去重策略

  • original_url 去重,不区分 expires_at
  • 同一 original_url 重复调用时,若存在未删除记录,直接返回已有短链
  • 若该 URL 对应的短链已被逻辑删除,允许重新生成新的短链码

V2 扩展预留

  • 引入 access_logs 表记录访问统计
  • 引入 users 表支持用户体系
  • 考虑对 original_url 加索引以优化去重查询(视数据量评估)