PetAgent/docs/database_schema.sql

197 lines
9.2 KiB
MySQL
Raw Normal View History

2026-04-12 11:32:37 +08:00
-- 云屋平台 - 数据库模式
-- 版本: 3.0
-- 描述: 沉浸式宠物伴侣系统的核数据库表
-- 1. 用户表 (User Table)
CREATE TABLE `t_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`openid` varchar(64) DEFAULT NULL COMMENT '微信OpenID',
`phone` varchar(16) DEFAULT NULL COMMENT '手机号',
`username` varchar(64) DEFAULT NULL COMMENT '用户名',
`password_hash` varchar(255) DEFAULT NULL COMMENT '密码哈希值(BCrypt)',
`nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
`avatar` varchar(512) DEFAULT NULL COMMENT '头像URL',
`uid` varchar(32) NOT NULL COMMENT '用户唯一ID',
`status` tinyint(4) DEFAULT '1' COMMENT '状态:1正常,2禁止登录,3禁止发言',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_uid` (`uid`),
UNIQUE KEY `uk_phone` (`phone`),
UNIQUE KEY `uk_openid` (`openid`),
KEY `idx_created_at` (`created_at`)
);
-- 2. 背景表 (Background Resource Table)
CREATE TABLE `t_background` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '背景名称',
`resource_url` varchar(512) NOT NULL COMMENT '资源地址',
`resource_type` tinyint(4) DEFAULT '1' COMMENT '1:图片 2:视频',
`visibility` tinyint(4) DEFAULT '1' COMMENT '可见性:1公开,2私有,3VIP',
`bgm_url` varchar(512) DEFAULT NULL COMMENT '背景音乐URL',
`is_locked` tinyint(1) DEFAULT '0' COMMENT '是否锁定(需要积分/VIP解锁)',
`lock_desc` varchar(255) DEFAULT NULL COMMENT '解锁描述',
`price_points` int(11) DEFAULT '0' COMMENT '解锁所需积分',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_visibility` (`visibility`)
);
-- 3. 宠物(智能体)表 (Pet/Agent Table)
CREATE TABLE `t_pet` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '宠物名称',
`avatar` varchar(512) NOT NULL COMMENT '头像URL',
`global_prompt` text NOT NULL COMMENT '全局系统提示词',
`tts_voice_id` varchar(32) DEFAULT NULL COMMENT '腾讯云TTS音色ID',
`tts_speed` decimal(3,2) DEFAULT '1.00' COMMENT 'TTS语速',
`tts_volume` decimal(3,2) DEFAULT '1.00' COMMENT 'TTS音量',
`status` tinyint(4) DEFAULT '1' COMMENT '状态:1启用,2禁用',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
-- 4. 背景-宠物关联配置表 (Background-Pet Binding Configuration)
CREATE TABLE `t_background_pet_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`background_id` bigint(20) NOT NULL,
`pet_id` bigint(20) NOT NULL,
`coordinate_x` decimal(5,2) NOT NULL COMMENT 'X轴百分比 (0-100)',
`coordinate_y` decimal(5,2) NOT NULL COMMENT 'Y轴百分比 (0-100)',
`scale` decimal(3,2) DEFAULT '1.00' COMMENT '缩放比例',
`scene_prompt` text COMMENT '场景专属提示词(追加到全局)',
`hello_message` varchar(255) COMMENT '场景欢迎语',
`sort_order` int(11) DEFAULT '0' COMMENT '排序',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_bg_pet` (`background_id`,`pet_id`),
KEY `idx_background_id` (`background_id`),
KEY `idx_pet_id` (`pet_id`)
);
-- 5. 用户背景关系表 (User-Background Access Control)
CREATE TABLE `t_user_background_relation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`background_id` bigint(20) NOT NULL,
`is_default` tinyint(1) DEFAULT '0' COMMENT '是否为默认背景',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_bg` (`user_id`,`background_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_background_id` (`background_id`)
);
-- 6. 用户钱包表 (User Quota Management)
CREATE TABLE `t_user_wallet` (
`user_id` bigint(20) NOT NULL,
`daily_quota` int(11) DEFAULT '20' COMMENT '每日剩余配额',
`extra_quota` int(11) DEFAULT '0' COMMENT '永久额外配额',
`total_consumed` int(11) DEFAULT '0' COMMENT '累计消耗次数',
`last_reset_time` date DEFAULT NULL COMMENT '上次重置日期',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`)
);
-- 7. 聊天记录表 (Chat Log with Token Tracking)
CREATE TABLE `t_chat_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`trace_id` varchar(64) NOT NULL COMMENT '全链路追踪ID',
`pet_id` bigint(20) NOT NULL,
`bg_id` bigint(20) NOT NULL,
`user_msg` text COMMENT '用户消息',
`ai_msg` text COMMENT 'AI回复消息',
`tokens_input` int(11) DEFAULT '0' COMMENT '输入token数',
`tokens_output` int(11) DEFAULT '0' COMMENT '输出token数',
`duration_ms` int(11) DEFAULT NULL COMMENT '接口响应耗时(毫秒)',
`conversation_id` varchar(64) NOT NULL COMMENT '会话ID',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_time` (`user_id`, `created_at`),
KEY `idx_trace_id` (`trace_id`),
KEY `idx_conversation_id` (`conversation_id`),
KEY `idx_pet_bg_time` (`pet_id`, `bg_id`, `created_at`)
);
-- 8. 系统配置表 (System Configuration)
CREATE TABLE `t_system_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`config_key` varchar(64) NOT NULL COMMENT '配置键',
`config_value` text NOT NULL COMMENT '配置值',
`description` varchar(255) DEFAULT NULL COMMENT '配置描述',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_config_key` (`config_key`)
);
-- 9. AI模型配置表 (AI Model Configuration)
CREATE TABLE `t_model_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL COMMENT '模型名称',
`provider` varchar(32) NOT NULL COMMENT '提供商 (doubao,openai,anthropic等)',
`model_type` varchar(32) NOT NULL COMMENT '模型类型 (chat,embedding等)',
`model_key` varchar(128) NOT NULL COMMENT '模型标识符',
`api_base_url` varchar(255) COMMENT 'API基础URL',
`api_key` varchar(255) COMMENT 'API密钥',
`max_tokens` int(11) DEFAULT 4096 COMMENT '最大输出token数',
`context_length` int(11) DEFAULT 8192 COMMENT '上下文长度',
`input_price_per_1k` decimal(10,6) DEFAULT 0.000000 COMMENT '输入token价格(每千token)',
`output_price_per_1k` decimal(10,6) DEFAULT 0.000000 COMMENT '输出token价格(每千token)',
`temperature` decimal(3,2) DEFAULT 0.7 COMMENT '默认温度参数',
`top_p` decimal(3,2) DEFAULT 1.00 COMMENT 'Top-p采样参数',
`enabled` tinyint(1) DEFAULT 1 COMMENT '是否启用',
`is_default` tinyint(1) DEFAULT 0 COMMENT '是否为默认模型',
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_model_key` (`model_key`),
KEY `idx_provider` (`provider`),
KEY `idx_enabled` (`enabled`),
KEY `idx_is_default` (`is_default`)
);
-- 10. 用户会话表 (User Sessions)
CREATE TABLE `t_user_session` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`session_token` varchar(128) NOT NULL COMMENT 'JWT Token',
`refresh_token` varchar(128) NOT NULL COMMENT '刷新Token',
`expires_at` datetime NOT NULL COMMENT '过期时间',
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_session_token` (`session_token`),
KEY `idx_user_id` (`user_id`),
KEY `idx_expires_at` (`expires_at`)
);
-- 插入初始系统配置
INSERT INTO `t_system_config` (`config_key`, `config_value`, `description`) VALUES
('default_background_id', '1', '新用户默认背景ID'),
('daily_quota_initial', '20', '新用户初始每日配额'),
('extra_quota_gift', '0', '新用户赠送额外配额'),
('asr_secret_id', '', '腾讯云ASR SecretId'),
('asr_secret_key', '', '腾讯云ASR SecretKey'),
('tts_secret_id', '', '腾讯云TTS SecretId'),
('tts_secret_key', '', '腾讯云TTS SecretKey'),
('llm_api_key', '', '豆包大模型API Key'),
('api_domain', 'https://api.example.com', 'API域名'),
('ws_domain', 'wss://ws.example.com', 'WebSocket域名'),
('cdn_domain', 'https://cdn.example.com', 'CDN资源域名');
-- 插入默认模型配置
INSERT INTO `t_model_config` (`name`, `provider`, `model_type`, `model_key`, `api_base_url`, `api_key`, `max_tokens`, `context_length`, `input_price_per_1k`, `output_price_per_1k`, `temperature`, `top_p`, `enabled`, `is_default`, `sort_order`) VALUES
('豆包-Pro-4k', 'doubao', 'chat', 'doubao-pro-4k', 'https://ark.cn-beijing.volces.com', '', 4000, 8000, 0.0003, 0.0006, 0.7, 1.0, 1, 1, 1),
('豆包-Pro-32k', 'doubao', 'chat', 'doubao-pro-32k', 'https://ark.cn-beijing.volces.com', '', 8000, 32000, 0.0010, 0.0020, 0.7, 1.0, 1, 0, 2);
-- 创建索引优化查询
CREATE INDEX idx_chat_user_bg_time ON t_chat_log(user_id, bg_id, created_at DESC);
CREATE INDEX idx_chat_user_pet_time ON t_chat_log(user_id, pet_id, created_at DESC);