-- 图片主表基础版 CREATE TABLE images ( -- 核心标识字段 image_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::varchar, -- 存储元数据 storage_key TEXT NOT NULL, -- 文件显示名称 file_name TEXT NOT NULL, -- 文件存储名称,可以包含路径 mime_type VARCHAR(32) NOT NULL CHECK (mime_type LIKE 'image/%'), file_size BIGINT NOT NULL CHECK (file_size > 0), width INT CHECK (width > 0), height INT CHECK (height > 0), -- 业务元数据 category_id VARCHAR(36), -- 分类服务提供的UUID tags TEXT[] DEFAULT '{}'::TEXT[], -- 系统管控字段 created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL, is_deleted BOOLEAN DEFAULT FALSE NOT NULL ); -- 索引配置 CREATE INDEX idx_images_category ON images (category_id); CREATE INDEX idx_images_created ON images (created_at); CREATE INDEX idx_images_tags ON images USING GIN(tags); -- 自动更新时间触发器 CREATE OR REPLACE FUNCTION update_image_modified() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER trg_update_image BEFORE UPDATE ON images FOR EACH ROW EXECUTE FUNCTION update_image_modified();