Files
vf_react/create_prediction_tables.sql
2025-11-23 21:09:31 +08:00

219 lines
9.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 预测市场数据库表创建脚本
-- 数据库: stock (222.128.1.157:33060)
-- 执行时间: 2025-11-23
-- 1. 用户积分账户表
CREATE TABLE IF NOT EXISTS user_credit_account (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE,
balance FLOAT DEFAULT 10000.0 NOT NULL COMMENT '积分余额',
frozen_balance FLOAT DEFAULT 0.0 NOT NULL COMMENT '冻结积分',
total_earned FLOAT DEFAULT 0.0 NOT NULL COMMENT '累计获得',
total_spent FLOAT DEFAULT 0.0 NOT NULL COMMENT '累计消费',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
last_daily_bonus_at DATETIME COMMENT '最后一次领取每日奖励时间',
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户积分账户';
-- 2. 预测话题表
CREATE TABLE IF NOT EXISTS prediction_topic (
id INT AUTO_INCREMENT PRIMARY KEY,
creator_id INT NOT NULL,
title VARCHAR(200) NOT NULL COMMENT '话题标题',
description TEXT COMMENT '话题描述',
category VARCHAR(50) DEFAULT 'stock' COMMENT '分类: stock/index/concept/policy/event/other',
-- 市场数据
yes_total_shares INT DEFAULT 0 NOT NULL COMMENT 'YES方总份额',
no_total_shares INT DEFAULT 0 NOT NULL COMMENT 'NO方总份额',
yes_price FLOAT DEFAULT 500.0 NOT NULL COMMENT 'YES方价格0-1000',
no_price FLOAT DEFAULT 500.0 NOT NULL COMMENT 'NO方价格0-1000',
-- 奖池
total_pool FLOAT DEFAULT 0.0 NOT NULL COMMENT '总奖池2%交易税累积)',
-- 领主信息
yes_lord_id INT COMMENT 'YES方领主',
no_lord_id INT COMMENT 'NO方领主',
-- 状态
status VARCHAR(20) DEFAULT 'active' NOT NULL COMMENT '状态: active/settled/cancelled',
result VARCHAR(10) COMMENT '结算结果: yes/no/draw',
-- 时间
deadline DATETIME NOT NULL COMMENT '截止时间',
settled_at DATETIME COMMENT '结算时间',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- 统计
views_count INT DEFAULT 0,
comments_count INT DEFAULT 0,
participants_count INT DEFAULT 0,
FOREIGN KEY (creator_id) REFERENCES user(id),
FOREIGN KEY (yes_lord_id) REFERENCES user(id),
FOREIGN KEY (no_lord_id) REFERENCES user(id),
INDEX idx_creator_id (creator_id),
INDEX idx_status (status),
INDEX idx_category (category),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预测话题';
-- 3. 用户持仓表
CREATE TABLE IF NOT EXISTS prediction_position (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
topic_id INT NOT NULL,
direction VARCHAR(3) NOT NULL COMMENT '方向: yes/no',
shares INT DEFAULT 0 NOT NULL COMMENT '持有份额',
avg_cost FLOAT DEFAULT 0.0 NOT NULL COMMENT '平均成本',
total_invested FLOAT DEFAULT 0.0 NOT NULL COMMENT '总投入',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE,
FOREIGN KEY (topic_id) REFERENCES prediction_topic(id) ON DELETE CASCADE,
UNIQUE KEY unique_position (user_id, topic_id, direction),
INDEX idx_user_topic (user_id, topic_id),
INDEX idx_topic (topic_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户持仓';
-- 4. 交易记录表
CREATE TABLE IF NOT EXISTS prediction_transaction (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
topic_id INT NOT NULL,
direction VARCHAR(3) NOT NULL COMMENT '方向: yes/no',
trade_type VARCHAR(10) NOT NULL COMMENT '交易类型: buy/sell',
shares INT NOT NULL COMMENT '交易份额',
price FLOAT NOT NULL COMMENT '交易价格',
amount FLOAT NOT NULL COMMENT '交易金额',
tax FLOAT DEFAULT 0.0 NOT NULL COMMENT '交易税',
total_cost FLOAT NOT NULL COMMENT '总成本(含税)',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (topic_id) REFERENCES prediction_topic(id),
INDEX idx_user_id (user_id),
INDEX idx_topic_id (topic_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易记录';
-- 5. 话题评论表
CREATE TABLE IF NOT EXISTS topic_comment (
id INT AUTO_INCREMENT PRIMARY KEY,
topic_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT NOT NULL COMMENT '评论内容',
direction VARCHAR(3) COMMENT '预测方向: yes/no',
is_published BOOLEAN DEFAULT FALSE NOT NULL COMMENT '是否已发布',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- 观点IPO 相关
total_investment INT DEFAULT 0 NOT NULL COMMENT '总投资额',
investor_count INT DEFAULT 0 NOT NULL COMMENT '投资人数',
is_verified BOOLEAN DEFAULT FALSE NOT NULL COMMENT '是否已验证',
verification_result VARCHAR(20) COMMENT '验证结果: correct/incorrect',
position_rank INT COMMENT '评论位置排名',
FOREIGN KEY (topic_id) REFERENCES prediction_topic(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_topic_id (topic_id),
INDEX idx_user_id (user_id),
INDEX idx_position_rank (position_rank)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话题评论';
-- 6. 评论投资记录表观点IPO
CREATE TABLE IF NOT EXISTS comment_investment (
id INT AUTO_INCREMENT PRIMARY KEY,
comment_id INT NOT NULL,
user_id INT NOT NULL,
shares INT NOT NULL COMMENT '投资份额',
amount INT NOT NULL COMMENT '投资金额',
avg_price FLOAT NOT NULL COMMENT '平均价格',
status VARCHAR(20) DEFAULT 'active' NOT NULL COMMENT '状态: active/settled',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (comment_id) REFERENCES topic_comment(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_comment_id (comment_id),
INDEX idx_user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论投资记录';
-- 7. 评论位置竞拍记录(首发权拍卖)
CREATE TABLE IF NOT EXISTS comment_position_bid (
id INT AUTO_INCREMENT PRIMARY KEY,
topic_id INT NOT NULL,
user_id INT NOT NULL,
position INT NOT NULL COMMENT '位置1/2/3',
bid_amount INT NOT NULL COMMENT '竞拍金额',
status VARCHAR(20) DEFAULT 'pending' NOT NULL COMMENT '状态: pending/won/outbid',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
expires_at DATETIME NOT NULL COMMENT '过期时间',
FOREIGN KEY (topic_id) REFERENCES prediction_topic(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_topic_id (topic_id),
INDEX idx_user_id (user_id),
INDEX idx_position (topic_id, position)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论位置竞拍记录';
-- 8. 时间胶囊话题表
CREATE TABLE IF NOT EXISTS time_capsule_topic (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(200) NOT NULL COMMENT '话题标题',
description TEXT COMMENT '话题描述',
encrypted_content TEXT COMMENT '加密的预测内容',
encryption_key VARCHAR(500) COMMENT '加密密钥(后端存储)',
start_year INT NOT NULL COMMENT '开始年份',
end_year INT NOT NULL COMMENT '结束年份',
status VARCHAR(20) DEFAULT 'active' NOT NULL COMMENT '状态: active/settled/cancelled',
is_decrypted BOOLEAN DEFAULT FALSE NOT NULL COMMENT '是否已解密',
actual_happened_year INT COMMENT '实际发生年份',
total_pool INT DEFAULT 0 NOT NULL COMMENT '总奖池',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_user_id (user_id),
INDEX idx_status (status),
INDEX idx_year_range (start_year, end_year)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='时间胶囊话题';
-- 9. 时间胶囊时间段表
CREATE TABLE IF NOT EXISTS time_capsule_time_slot (
id INT AUTO_INCREMENT PRIMARY KEY,
topic_id INT NOT NULL,
year_start INT NOT NULL COMMENT '年份区间开始',
year_end INT NOT NULL COMMENT '年份区间结束',
current_holder_id INT COMMENT '当前持有者',
current_price INT DEFAULT 100 NOT NULL COMMENT '当前价格',
total_bids INT DEFAULT 0 NOT NULL COMMENT '总竞拍次数',
status VARCHAR(20) DEFAULT 'active' NOT NULL COMMENT '状态: active/settled',
FOREIGN KEY (topic_id) REFERENCES time_capsule_topic(id) ON DELETE CASCADE,
FOREIGN KEY (current_holder_id) REFERENCES user(id),
INDEX idx_topic_id (topic_id),
INDEX idx_holder (current_holder_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='时间胶囊时间段';
-- 10. 时间段竞拍记录表
CREATE TABLE IF NOT EXISTS time_slot_bid (
id INT AUTO_INCREMENT PRIMARY KEY,
slot_id INT NOT NULL,
user_id INT NOT NULL,
bid_amount INT NOT NULL COMMENT '竞拍金额',
status VARCHAR(20) DEFAULT 'outbid' NOT NULL COMMENT '状态: current/outbid/won',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (slot_id) REFERENCES time_capsule_time_slot(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_slot_id (slot_id),
INDEX idx_user_id (user_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='时间段竞拍记录';