40 lines
1.3 KiB
PL/PgSQL
40 lines
1.3 KiB
PL/PgSQL
-- 图片主表基础版
|
|
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(); |