70 lines
2.0 KiB
SQL
70 lines
2.0 KiB
SQL
-- 股票投资分析系统 - PostgreSQL 数据库初始化脚本
|
|
-- 运行方式: psql -U postgres -f init_db.sql
|
|
|
|
-- 创建数据库(如果不存在)
|
|
SELECT 'CREATE DATABASE stock_app'
|
|
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'stock_app')\gexec
|
|
|
|
-- 连接到数据库
|
|
\c stock_app
|
|
|
|
-- 用户表
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
available_cash DECIMAL(15,2) DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 关注列表
|
|
CREATE TABLE IF NOT EXISTS watchlist (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
|
stock_code VARCHAR(10) NOT NULL,
|
|
stock_name VARCHAR(50),
|
|
added_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(user_id, stock_code)
|
|
);
|
|
|
|
-- 交易记录
|
|
CREATE TABLE IF NOT EXISTS trades (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
|
stock_code VARCHAR(10) NOT NULL,
|
|
stock_name VARCHAR(50),
|
|
trade_type VARCHAR(10) NOT NULL,
|
|
price DECIMAL(10,4),
|
|
quantity INTEGER,
|
|
trade_date DATE,
|
|
reason TEXT,
|
|
result VARCHAR(20),
|
|
profit_amount DECIMAL(10,4),
|
|
stop_loss_price DECIMAL(10,4),
|
|
notes TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 分析缓存
|
|
CREATE TABLE IF NOT EXISTS alerts_cache (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER UNIQUE REFERENCES users(id) ON DELETE CASCADE,
|
|
data JSONB,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 股票名称缓存(公共)
|
|
CREATE TABLE IF NOT EXISTS stock_names (
|
|
code VARCHAR(10) PRIMARY KEY,
|
|
name VARCHAR(50)
|
|
);
|
|
|
|
-- 创建索引
|
|
CREATE INDEX IF NOT EXISTS idx_watchlist_user ON watchlist(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_trades_user ON trades(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_trades_stock ON trades(stock_code);
|
|
CREATE INDEX IF NOT EXISTS idx_alerts_user ON alerts_cache(user_id);
|
|
|
|
-- 输出结果
|
|
SELECT 'Database initialized successfully!' as status;
|