initial commit
This commit is contained in:
40
sql/images.sql
Normal file
40
sql/images.sql
Normal file
@ -0,0 +1,40 @@
|
||||
-- 图片主表基础版
|
||||
CREATE TABLE images (
|
||||
-- 核心标识字段
|
||||
image_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
|
||||
-- 存储元数据
|
||||
storage_key TEXT NOT NULL CHECK (storage_key ~ '^[a-z0-9/-]+$'),
|
||||
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 UUID, -- 分类服务提供的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();
|
||||
Reference in New Issue
Block a user