CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(255),
content TEXT
);
CREATE TABLE attachments (
id INT PRIMARY KEY,
article_id INT,
file_name VARCHAR(255),
file_path VARCHAR(255),
file_size INT,
FOREIGN KEY (article_id) REFERENCES articles(id)
);
CREATE TABLE articles (
id INT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
attachment_ids VARCHAR(255) -- 存储逗号分隔的附件ID
);
CREATE TABLE attachments (
id INT PRIMARY KEY,
file_name VARCHAR(255),
file_path VARCHAR(255),
file_size INT
);
优点: - 符合关系型数据库设计规范 - 数据完整性有保障(级联删除/更新) - 查询效率高(可使用JOIN操作) - 易于维护和扩展
缺点: - 需要额外的外键约束 - 删除文章时需要处理关联附件
优点: - 实现简单 - 不需要外键约束 - 适合简单的应用场景
缺点: - 违反第一范式(1NF) - 无法保证数据完整性 - 查询效率低(需要额外解析字符串) - 难以维护(如删除附件时需要更新多个文章记录)
强烈推荐使用外键关联方案,原因如下:
考虑使用多对多关系(如果附件可被多篇文章共享):
CREATE TABLE article_attachment (
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)
);
考虑使用JSON类型存储元数据(现代数据库如MySQL 5.7+/PostgreSQL):
ALTER TABLE attachments ADD COLUMN metadata JSON;
考虑文件存储策略:
对于大多数应用场景,外键关联方案是最佳选择。只有在极端简单的应用且对数据完整性要求不高的情况下,才考虑存储附件ID的方案。