2026-06-21 15:38:28 +08:00
|
|
|
|
-- 004_user_scenarios.up.sql
|
|
|
|
|
|
-- 用户自建情景表
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE user_scenarios (
|
|
|
|
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
|
|
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
|
|
|
|
name VARCHAR(50) NOT NULL,
|
2026-06-23 23:41:49 +08:00
|
|
|
|
icon VARCHAR(20) DEFAULT '✨',
|
2026-06-23 11:10:37 +08:00
|
|
|
|
description VARCHAR(100),
|
2026-06-21 15:38:28 +08:00
|
|
|
|
prompt TEXT NOT NULL,
|
2026-06-23 23:41:49 +08:00
|
|
|
|
greeting VARCHAR(500),
|
2026-06-21 15:38:28 +08:00
|
|
|
|
language VARCHAR(10) DEFAULT 'zh-CN',
|
|
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
|
|
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT unique_user_scenario UNIQUE(user_id, name),
|
|
|
|
|
|
CONSTRAINT check_name_length CHECK (char_length(name) >= 2 AND char_length(name) <= 50),
|
2026-06-23 23:41:49 +08:00
|
|
|
|
CONSTRAINT check_description_length CHECK (description IS NULL OR char_length(description) <= 100),
|
|
|
|
|
|
CONSTRAINT check_prompt_length CHECK (char_length(prompt) >= 10),
|
|
|
|
|
|
CONSTRAINT check_greeting_length CHECK (greeting IS NULL OR char_length(greeting) <= 500)
|
2026-06-21 15:38:28 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
-- 为用户 ID 创建索引,加速查询
|
|
|
|
|
|
CREATE INDEX idx_user_scenarios_user_id ON user_scenarios(user_id);
|
|
|
|
|
|
|
|
|
|
|
|
-- 为创建时间创建索引,用于排序
|
|
|
|
|
|
CREATE INDEX idx_user_scenarios_created_at ON user_scenarios(created_at DESC);
|
|
|
|
|
|
|
2026-06-23 23:41:49 +08:00
|
|
|
|
-- 表和列注释
|
|
|
|
|
|
COMMENT ON TABLE user_scenarios IS '用户自建情景表,存储用户创建的 AI 对话情景配置';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.id IS '情景唯一标识符 (UUID)';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.user_id IS '所属用户 ID,外键关联 users 表,用户删除时级联删除';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.name IS '情景名称 (2-50 字符),如"创意写作导师"';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.icon IS 'Emoji 图标 (最多 20 字符),支持复合 Emoji,如"🎨"';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.description IS '简短描述 (最多 100 字符),可选,显示在情景卡片上';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.prompt IS '角色 System Prompt (最少 10 字符,无上限),定义 AI 行为和对话风格';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.greeting IS '首句引导 (最多 500 字符),可选,AI 的开场白';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.language IS '默认语言代码 (如 zh-CN、en-US、ja-JP)';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.created_at IS '情景创建时间';
|
|
|
|
|
|
COMMENT ON COLUMN user_scenarios.updated_at IS '情景最后更新时间';
|