插件窝 干货文章 文章附件表应该如何设计?

文章附件表应该如何设计?

COMMENT 文件 附件 article 345    来源:    2025-03-30

文章附件表设计方案

作为IT工程师,我将为您设计一个高效的文章附件表结构。以下是详细的设计方案:

核心字段设计

CREATE TABLE article_attachments (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '附件ID',
    article_id BIGINT NOT NULL COMMENT '关联的文章ID',
    file_name VARCHAR(255) NOT NULL COMMENT '原始文件名',
    file_path VARCHAR(512) NOT NULL COMMENT '文件存储路径',
    file_size BIGINT NOT NULL COMMENT '文件大小(字节)',
    file_type VARCHAR(100) NOT NULL COMMENT '文件MIME类型',
    file_extension VARCHAR(20) COMMENT '文件扩展名',
    download_count INT DEFAULT 0 COMMENT '下载次数',
    upload_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
    uploader_id BIGINT COMMENT '上传者ID',
    description TEXT COMMENT '附件描述',
    sort_order INT DEFAULT 0 COMMENT '排序权重',
    is_deleted TINYINT(1) DEFAULT 0 COMMENT '是否删除(0-否,1-是)',
    delete_time DATETIME COMMENT '删除时间',
    storage_type TINYINT DEFAULT 1 COMMENT '存储类型(1-本地,2-OSS,3-CDN等)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章附件表';

索引设计

-- 文章ID索引(高频查询)
ALTER TABLE article_attachments ADD INDEX idx_article_id (article_id);

-- 上传者ID索引
ALTER TABLE article_attachments ADD INDEX idx_uploader_id (uploader_id);

-- 组合索引(用于管理后台查询)
ALTER TABLE article_attachments ADD INDEX idx_article_uploader (article_id, uploader_id);

扩展考虑

  1. 文件存储策略

    • 建议使用对象存储(如阿里云OSS、AWS S3)存储大文件
    • 小文件可考虑直接存储在服务器
  2. 安全性考虑

    • 添加文件MD5校验字段防止文件篡改
    • 考虑添加访问权限控制字段
  3. 性能优化

    • 对于大型系统,可考虑分表策略(按文章ID范围或时间分表)
    • 热门附件可考虑加入缓存
  4. 版本控制

    • 如需支持附件版本控制,可添加version字段和previous_id字段
  5. 缩略图支持

    • 对于图片类附件,可添加缩略图路径字段

使用建议

  1. 上传流程:

    • 先插入附件记录获取ID
    • 使用ID作为文件名一部分存储文件(避免文件名冲突)
    • 更新记录中的文件路径
  2. 删除策略:

    • 软删除优先(标记is_deleted=1)
    • 定时任务清理已标记删除的物理文件
  3. 查询优化:

    • 列表查询避免SELECT *
    • 大文件采用分页查询

此设计平衡了功能需求与性能考虑,可根据实际业务需求进一步调整。