-- 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, icon VARCHAR(20) DEFAULT '✨', description VARCHAR(100), prompt TEXT NOT NULL, greeting VARCHAR(500), 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), 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) ); -- 为用户 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); -- 表和列注释 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 '情景最后更新时间';