197 lines
9.2 KiB
MySQL
197 lines
9.2 KiB
MySQL
|
|
-- 云屋平台 - 数据库模式
|
||
|
|
-- 版本: 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);
|