-- ============================================= -- 净值历史表迁移脚本 -- 创建时间: 2026-03-13 -- 说明: 用于记录组合每日净值和收益数据 -- ============================================= -- 创建净值历史表 CREATE TABLE IF NOT EXISTS portfolio_nav_history ( id VARCHAR(50) PRIMARY KEY COMMENT '主键ID', portfolio_id VARCHAR(50) NOT NULL COMMENT '组合ID', nav_date DATE NOT NULL COMMENT '净值日期', total_value DECIMAL(18,4) DEFAULT 0 COMMENT '总资产价值(本位币)', total_cost DECIMAL(18,4) DEFAULT 0 COMMENT '累计投入成本(本位币)', nav DECIMAL(18,8) DEFAULT 1.0 COMMENT '单位净值', daily_return DECIMAL(10,4) DEFAULT 0 COMMENT '日收益率(%)', cumulative_return DECIMAL(10,4) DEFAULT 0 COMMENT '累计收益率(%)', currency VARCHAR(10) DEFAULT 'CNY' COMMENT '本位币', position_count INT DEFAULT 0 COMMENT '持仓数量', source VARCHAR(20) DEFAULT 'calculated' COMMENT '数据来源', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组合净值历史表'; -- 创建组合日期联合索引 CREATE INDEX idx_portfolio_date ON portfolio_nav_history(portfolio_id, nav_date); -- 创建唯一约束(同一组合同一天只能有一条记录) ALTER TABLE portfolio_nav_history ADD CONSTRAINT uk_portfolio_date UNIQUE(portfolio_id, nav_date); -- 为portfolio表的total_value字段添加注释 ALTER TABLE portfolios MODIFY COLUMN total_value DECIMAL(18,4) DEFAULT 0 COMMENT '当前总市值(冗余字段,实时计算)'; -- 为portfolio表添加净值相关字段 ALTER TABLE portfolios ADD COLUMN IF NOT EXISTS initial_cost DECIMAL(18,4) DEFAULT 0 COMMENT '初始投入成本'; ALTER TABLE portfolios ADD COLUMN IF NOT EXISTS last_nav_date DATE COMMENT '最后净值计算日期';