反模式:圖片字段塞進業務表
CREATE TABLE project (
id INT PK,
name VARCHAR(100),
img1 VARCHAR(255), img2 VARCHAR(255), img3 VARCHAR(255) ... -- 擴展痛苦
);
規範設計:圖片庫表 + 關聯組
CREATE TABLE image_group (
id BIGINT PK,
biz_type VARCHAR(20), -- 'project', 'article', 'product'
biz_id BIGINT, -- 業務主鍵
UNIQUE(biz_type, biz_id)
);
CREATE TABLE image (
id BIGINT PK,
group_id BIGINT REFERENCES image_group(id),
url VARCHAR(500),
sort INT DEFAULT 0,
desc VARCHAR(200)
);
業務流程
- 創建項目時同步創建
image_group 記錄(或首次上傳圖片時懶創建)。
- 上傳圖片 -> 寫入
image 表,group_id 關聯。
- 查詢項目圖片:
SELECT * FROM image WHERE group_id = (SELECT id FROM image_group WHERE biz_type='project' AND biz_id=?)。
優勢
- 圖片數量無上限,順序可調(
sort)。
- 多業務類型複用同一套存儲/CDN/審核邏輯。
- 刪除項目時級聯刪除圖片組,或軟刪除保留歷史。|