方案描述: - 将附件作为二进制数据直接存储在文章表的BLOB字段中 - 或将附件路径作为字符串存储在文章表的VARCHAR字段中
优点: - 实现简单,查询方便 - 数据一致性高,删除文章时附件自动删除 - 不需要额外的表关联查询
缺点: - 文章表会变得臃肿,影响性能 - 难以实现附件的复用(同一附件被多篇文章引用) - 不利于附件的独立管理(如批量操作、统计等) - 数据库备份和恢复效率低(大附件影响整体性能)
方案描述: - 创建专门的附件表(attachments)存储附件信息 - 文章表通过外键关联附件表
优点: - 数据库结构更规范,符合范式要求 - 附件可以独立管理,复用性强 - 查询性能更好(特别是当附件很大时) - 便于实现附件的统计、分类等功能 - 备份恢复更灵活(可以单独备份附件)
缺点: - 实现相对复杂,需要处理表关联 - 需要额外处理级联删除或附件引用计数
建议采用独立的附件表方案,特别是对于以下情况: - 系统可能有大量附件 - 附件体积较大(超过几MB) - 需要附件复用功能 - 系统需要长期维护和扩展
-- 附件表
CREATE TABLE attachments (
id INT PRIMARY KEY AUTO_INCREMENT,
file_name VARCHAR(255) NOT NULL,
file_path VARCHAR(512) NOT NULL, -- 或存储二进制数据的BLOB字段
file_size INT,
mime_type VARCHAR(100),
upload_time DATETIME,
uploader_id INT
);
-- 文章-附件关联表(多对多关系)
CREATE TABLE article_attachments (
article_id INT,
attachment_id INT,
PRIMARY KEY (article_id, attachment_id),
FOREIGN KEY (article_id) REFERENCES articles(id),
FOREIGN KEY (attachment_id) REFERENCES attachments(id)
);
文件存储策略:
性能优化:
安全考虑:
扩展性:
独立附件表方案虽然初期实现稍复杂,但从长期维护和系统扩展的角度看是最优选择。