Files
quanxiel/quantitative_data/schema.sql
T

576 lines
28 KiB
SQL

-- ============================================================
-- 量化投资数据库 Schema
-- PostgreSQL (Docker: 192.168.27.15:12345)
-- 数据来源:Tushare
-- ============================================================
-- 先创建数据库(需要超级用户权限,在 psql 中手动执行):
-- CREATE DATABASE quant_db ENCODING 'UTF8';
-- ============================================================
-- 1. 股票基本信息表 (stock_basic)
-- tushare接口: stock_basic
-- ============================================================
CREATE TABLE IF NOT EXISTS stock_basic (
ts_code VARCHAR(20) PRIMARY KEY, -- 股票代码 (如 000001.SZ)
symbol VARCHAR(10) NOT NULL, -- 股票代码 (如 000001)
name VARCHAR(50) NOT NULL, -- 股票名称
area VARCHAR(30), -- 地区
industry VARCHAR(50), -- 行业
market VARCHAR(10), -- 市场类型 (主板/中小板/创业板/科创板)
list_date DATE, -- 上市日期
list_status CHAR(1) DEFAULT 'L', -- 上市状态 L上市 D退市 P暂停上市
is_hs VARCHAR(5), -- 是否沪深港通标的
act_name VARCHAR(100), -- 实控人名称
act_ent_type VARCHAR(50), -- 实控人企业性质
updated_at TIMESTAMP DEFAULT NOW() -- 记录更新时间
);
COMMENT ON TABLE stock_basic IS '股票基本信息表 (Tushare: stock_basic)';
-- 索引
CREATE INDEX IF NOT EXISTS idx_stock_basic_industry ON stock_basic(industry);
CREATE INDEX IF NOT EXISTS idx_stock_basic_area ON stock_basic(area);
CREATE INDEX IF NOT EXISTS idx_stock_basic_list_status ON stock_basic(list_status);
-- ============================================================
-- 2. 日线行情表 (daily) - 按年份分区
-- tushare接口: daily / pro_bar
-- ============================================================
CREATE TABLE IF NOT EXISTS daily (
id BIGSERIAL, -- 自增主键
ts_code VARCHAR(20) NOT NULL, -- 股票代码
trade_date DATE NOT NULL, -- 交易日期
open NUMERIC(12,3), -- 开盘价
high NUMERIC(12,3), -- 最高价
low NUMERIC(12,3), -- 最低价
close NUMERIC(12,3), -- 收盘价
pre_close NUMERIC(12,3), -- 昨收价
change NUMERIC(12,3), -- 涨跌额
pct_chg NUMERIC(10,4), -- 涨跌幅 (%)
vol NUMERIC(20,2), -- 成交量 (手)
amount NUMERIC(20,4), -- 成交额 (千元)
turnover_rate NUMERIC(10,4), -- 换手率 (%)
volume_ratio NUMERIC(10,4), -- 量比
ma5 NUMERIC(12,3), -- 5日均价
ma10 NUMERIC(12,3), -- 10日均价
ma20 NUMERIC(12,3), -- 20日均价
ma_v_5 NUMERIC(20,2), -- 5日均量
ma_v_10 NUMERIC(20,2), -- 10日均量
ma_v_20 NUMERIC(20,2), -- 20日均量
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, trade_date)
);
COMMENT ON TABLE daily IS '日线行情表 (Tushare: daily)';
-- 核心索引
CREATE INDEX IF NOT EXISTS idx_daily_trade_date ON daily(trade_date);
CREATE INDEX IF NOT EXISTS idx_daily_ts_code ON daily(ts_code);
CREATE INDEX IF NOT EXISTS idx_daily_ts_code_date ON daily(ts_code, trade_date);
-- ============================================================
-- 3. 日线行情表 - 按年份分区子表(优化查询性能)
-- PostgreSQL 原生分区表 (PG 10+)
-- 如果版本不支持,可以跳过,直接使用 daily 表
-- ============================================================
-- 仅 PG 10+ 支持以下语法,如果报错请删除分区表相关语句
-- CREATE TABLE daily_partitioned (
-- id BIGSERIAL,
-- ts_code VARCHAR(20) NOT NULL,
-- trade_date DATE NOT NULL,
-- open NUMERIC(12,3),
-- high NUMERIC(12,3),
-- low NUMERIC(12,3),
-- close NUMERIC(12,3),
-- pre_close NUMERIC(12,3),
-- change NUMERIC(12,3),
-- pct_chg NUMERIC(10,4),
-- vol NUMERIC(20,2),
-- amount NUMERIC(20,4),
-- turnover_rate NUMERIC(10,4),
-- volume_ratio NUMERIC(10,4),
-- ma5 NUMERIC(12,3),
-- ma10 NUMERIC(12,3),
-- ma20 NUMERIC(12,3),
-- ma_v_5 NUMERIC(20,2),
-- ma_v_10 NUMERIC(20,2),
-- ma_v_20 NUMERIC(20,2),
-- updated_at TIMESTAMP DEFAULT NOW(),
-- PRIMARY KEY (ts_code, trade_date, trade_date) -- 分区键必须包含在主键中
-- ) PARTITION BY RANGE (trade_date);
-- ============================================================
-- 4. 复权因子表 (adj_factor)
-- tushare接口: adj_factor
-- 用于计算前复权/后复权价格
-- ============================================================
CREATE TABLE IF NOT EXISTS adj_factor (
ts_code VARCHAR(20) NOT NULL,
trade_date DATE NOT NULL,
adj_factor NUMERIC(16,8), -- 复权因子
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, trade_date)
);
COMMENT ON TABLE adj_factor IS '复权因子表 (Tushare: adj_factor)';
-- ============================================================
-- 5. 个股资金流向表 (moneyflow)
-- tushare接口: moneyflow
-- ============================================================
CREATE TABLE IF NOT EXISTS moneyflow (
ts_code VARCHAR(20) NOT NULL,
trade_date DATE NOT NULL,
buy_sm_vol NUMERIC(20,2), -- 小单买入量(手)
buy_sm_amount NUMERIC(20,4), -- 小单买入金额(万元)
sell_sm_vol NUMERIC(20,2), -- 小单卖出量(手)
sell_sm_amount NUMERIC(20,4), -- 小单卖出金额(万元)
buy_md_vol NUMERIC(20,2), -- 中单买入量(手)
buy_md_amount NUMERIC(20,4), -- 中单买入金额(万元)
sell_md_vol NUMERIC(20,2), -- 中单卖出量(手)
sell_md_amount NUMERIC(20,4), -- 中单卖出金额(万元)
buy_lg_vol NUMERIC(20,2), -- 大单买入量(手)
buy_lg_amount NUMERIC(20,4), -- 大单买入金额(万元)
sell_lg_vol NUMERIC(20,2), -- 大单卖出量(手)
sell_lg_amount NUMERIC(20,4), -- 大单卖出金额(万元)
buy_elg_vol NUMERIC(20,2), -- 特大单买入量(手)
buy_elg_amount NUMERIC(20,4), -- 特大单买入金额(万元)
sell_elg_vol NUMERIC(20,2), -- 特大单卖出量(手)
sell_elg_amount NUMERIC(20,4), -- 特大单卖出金额(万元)
net_mf_vol NUMERIC(20,2), -- 净流入量(手)
net_mf_amount NUMERIC(20,4), -- 净流入额(万元)
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, trade_date)
);
COMMENT ON TABLE moneyflow IS '个股资金流向表 (Tushare: moneyflow)';
-- ============================================================
-- 6. 每日指标表 (daily_basic) - 包含基本面/估值数据
-- tushare接口: daily_basic
-- ============================================================
CREATE TABLE IF NOT EXISTS daily_basic (
ts_code VARCHAR(20) NOT NULL,
trade_date DATE NOT NULL,
close NUMERIC(12,3), -- 收盘价
turnover_rate NUMERIC(10,4), -- 换手率(%)
turnover_rate_f NUMERIC(10,4), -- 自由流通股换手率(%)
volume_ratio NUMERIC(10,4), -- 量比
pe NUMERIC(16,4), -- 市盈率(PE)
pe_ttm NUMERIC(16,4), -- 市盈率(TTM)
pb NUMERIC(16,4), -- 市净率(PB)
ps NUMERIC(16,4), -- 市销率(PS)
ps_ttm NUMERIC(16,4), -- 市销率(TTM)
dv_ratio NUMERIC(10,4), -- 股息率(%)
dv_ttm NUMERIC(10,4), -- 股息率(TTM)(%)
total_share NUMERIC(20,4), -- 总股本(万股)
float_share NUMERIC(20,4), -- 流通股本(万股)
free_share NUMERIC(20,4), -- 自由流通股本(万股)
total_mv NUMERIC(20,4), -- 总市值(万元)
circ_mv NUMERIC(20,4), -- 流通市值(万元)
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, trade_date)
);
COMMENT ON TABLE daily_basic IS '每日指标表/基本面估值表 (Tushare: daily_basic)';
-- ============================================================
-- 7. 利润表 (income)
-- tushare接口: income
-- ============================================================
CREATE TABLE IF NOT EXISTS income (
ts_code VARCHAR(20) NOT NULL,
ann_date DATE, -- 公告日期
f_ann_date DATE, -- 实际公告日期
end_date DATE NOT NULL, -- 报告期
report_type VARCHAR(10), -- 报告类型
comp_type CHAR(1), -- 公司类型
end_type VARCHAR(10), -- 报告期类型
basic_eps NUMERIC(16,4), -- 基本每股收益
diluted_eps NUMERIC(16,4), -- 稀释每股收益
total_revenue NUMERIC(20,4), -- 营业总收入(元)
revenue NUMERIC(20,4), -- 营业收入(元)
int_income NUMERIC(20,4), -- 利息收入
prem_earned NUMERIC(20,4), -- 已赚保费
comm_income NUMERIC(20,4), -- 手续费及佣金收入
n_commis_income NUMERIC(20,4), -- 手续费及佣金净收入
n_oth_income NUMERIC(20,4), -- 其他经营净收益
n_oth_b_income NUMERIC(20,4), -- 加:其他业务净收益
prem_income NUMERIC(20,4), -- 保险业务收入
out_prem NUMERIC(20,4), -- 减:分出保费
une_prem_reser NUMERIC(20,4), -- 提取未到期责任准备金
reins_income NUMERIC(20,4), -- 其中:分保费收入
n_sec_tb_income NUMERIC(20,4), -- 代理买卖证券业务净收入
n_sec_uw_income NUMERIC(20,4), -- 证券承销业务净收入
n_asset_mg_income NUMERIC(20,4), -- 受托客户资产管理业务净收入
oth_b_income NUMERIC(20,4), -- 其他业务收入
fv_value_chg NUMERIC(20,4), -- 加:公允价值变动净收益
invest_income NUMERIC(20,4), -- 加:投资净收益
ass_invest_income NUMERIC(20,4), -- 其中:对联营企业和合营企业的投资收益
forex_gain NUMERIC(20,4), -- 加:汇兑净收益
total_cogs NUMERIC(20,4), -- 营业总成本
oper_cost NUMERIC(20,4), -- 减:营业成本
int_exp NUMERIC(20,4), -- 减:利息支出
comm_exp NUMERIC(20,4), -- 减:手续费及佣金支出
biz_tax_surchg NUMERIC(20,4), -- 减:营业税金及附加
sell_exp NUMERIC(20,4), -- 减:销售费用
admin_exp NUMERIC(20,4), -- 减:管理费用
fin_exp NUMERIC(20,4), -- 减:财务费用
assets_impair_loss NUMERIC(20,4), -- 减:资产减值损失
prem_refund NUMERIC(20,4), -- 退保金
compens_payout NUMERIC(20,4), -- 赔付总支出
reser_insur_liab NUMERIC(20,4), -- 提取保险责任准备金
div_payt NUMERIC(20,4), -- 保户红利支出
reins_exp NUMERIC(20,4), -- 分保费用
oper_exp NUMERIC(20,4), -- 营业支出
compens_payout_refu NUMERIC(20,4), -- 减:摊回赔付支出
insur_reser_refu NUMERIC(20,4), -- 减:摊回保险责任准备金
reins_cost_refund NUMERIC(20,4), -- 减:摊回分保费用
other_bus_cost NUMERIC(20,4), -- 其他业务成本
operate_profit NUMERIC(20,4), -- 营业利润
non_oper_income NUMERIC(20,4), -- 加:营业外收入
non_oper_exp NUMERIC(20,4), -- 减:营业外支出
nca_disploss NUMERIC(20,4), -- 其中:减:非流动资产处置净损失
total_profit NUMERIC(20,4), -- 利润总额
income_tax NUMERIC(20,4), -- 所得税费用
n_income NUMERIC(20,4), -- 净利润(含少数股东损益)
n_income_attr_p NUMERIC(20,4), -- 净利润(不含少数股东损益)
minority_gain NUMERIC(20,4), -- 少数股东损益
oth_compre_income NUMERIC(20,4), -- 其他综合收益
total_compre_income NUMERIC(20,4), -- 综合收益总额
comp_pre_inc_attr_p NUMERIC(20,4), -- 归属于母公司(或股东)的综合收益总额
comp_inc_attr_m_s NUMERIC(20,4), -- 归属于少数股东的综合收益总额
ebit NUMERIC(20,4), -- 息税前利润
ebitda NUMERIC(20,4), -- 息税折旧摊销前利润
insurance_exp NUMERIC(20,4), -- 保险业务支出
undist_profit NUMERIC(20,4), -- 年初未分配利润
distable_profit NUMERIC(20,4), -- 可分配利润
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, end_date, report_type)
);
COMMENT ON TABLE income IS '利润表 (Tushare: income)';
-- ============================================================
-- 8. 资产负债表 (balancesheet)
-- tushare接口: balancesheet
-- ============================================================
CREATE TABLE IF NOT EXISTS balancesheet (
ts_code VARCHAR(20) NOT NULL,
ann_date DATE,
f_ann_date DATE,
end_date DATE NOT NULL, -- 报告期
report_type VARCHAR(10),
comp_type CHAR(1),
end_type VARCHAR(10),
-- 资产
total_hldr_eqy_exc_min_int NUMERIC(20,4), -- 股东权益合计(不含少数股东权益)
total_hldr_eqy_inc_min_int NUMERIC(20,4), -- 股东权益合计(含少数股东权益)
total_assets NUMERIC(20,4), -- 资产总计
total_cur_assets NUMERIC(20,4), -- 流动资产合计
total_nca NUMERIC(20,4), -- 非流动资产合计
money_cap NUMERIC(20,4), -- 货币资金
trad_asset NUMERIC(20,4), -- 交易性金融资产
notes_receiv NUMERIC(20,4), -- 应收票据
account_receiv NUMERIC(20,4), -- 应收账款
oth_receiv NUMERIC(20,4), -- 其他应收款
prepayment NUMERIC(20,4), -- 预付款项
div_receiv NUMERIC(20,4), -- 应收股利
int_receiv NUMERIC(20,4), -- 应收利息
inventories NUMERIC(20,4), -- 存货
amor_exp NUMERIC(20,4), -- 待摊费用
nca_within_1y NUMERIC(20,4), -- 一年内到期的非流动资产
sett_rsrv NUMERIC(20,4), -- 结算备付金
loanto_oth_bank_fi NUMERIC(20,4), -- 拆出资金
premium_receiv NUMERIC(20,4), -- 应收保费
reinsur_receiv NUMERIC(20,4), -- 应收分保账款
reinsur_res_receiv NUMERIC(20,4), -- 应收分保合同准备金
pur_resale_fa NUMERIC(20,4), -- 买入返售金融资产
oth_cur_assets NUMERIC(20,4), -- 其他流动资产
-- 非流动资产
fa_avail_for_sale NUMERIC(20,4), -- 可供出售金融资产
htm_invest NUMERIC(20,4), -- 持有至到期投资
lt_eqt_invest NUMERIC(20,4), -- 长期股权投资
invest_real_estate NUMERIC(20,4), -- 投资性房地产
time_deposits NUMERIC(20,4), -- 定期存款
oth_assets NUMERIC(20,4), -- 其他资产
lt_rec NUMERIC(20,4), -- 长期应收款
fix_assets NUMERIC(20,4), -- 固定资产
cip NUMERIC(20,4), -- 在建工程
const_materials NUMERIC(20,4), -- 工程物资
fixed_assets_disp NUMERIC(20,4), -- 固定资产清理
produc_bio_assets NUMERIC(20,4), -- 生产性生物资产
oil_and_gas_assets NUMERIC(20,4), -- 油气资产
intan_assets NUMERIC(20,4), -- 无形资产
r_and_d NUMERIC(20,4), -- 研发支出
goodwill NUMERIC(20,4), -- 商誉
lt_amor_exp NUMERIC(20,4), -- 长期待摊费用
defer_tax_assets NUMERIC(20,4), -- 递延所得税资产
decr_in_disbur NUMERIC(20,4), -- 待处理流动资产损益
oth_nca NUMERIC(20,4), -- 其他非流动资产
-- 负债
total_liab NUMERIC(20,4), -- 负债合计
total_cur_liab NUMERIC(20,4), -- 流动负债合计
total_ncl NUMERIC(20,4), -- 非流动负债合计
short_borr NUMERIC(20,4), -- 短期借款
lt_borr NUMERIC(20,4), -- 长期借款
st_notes_payable NUMERIC(20,4), -- 应付票据
acct_payable NUMERIC(20,4), -- 应付账款
adv_receipts NUMERIC(20,4), -- 预收款项
bonds_payable NUMERIC(20,4), -- 应付债券
oth_payable NUMERIC(20,4), -- 其他应付款
div_payable NUMERIC(20,4), -- 应付股利
int_payable NUMERIC(20,4), -- 应付利息
lt_payable NUMERIC(20,4), -- 长期应付款
special_payable NUMERIC(20,4), -- 专项应付款
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, end_date, report_type)
);
COMMENT ON TABLE balancesheet IS '资产负债表 (Tushare: balancesheet)';
-- ============================================================
-- 9. 现金流量表 (cashflow)
-- tushare接口: cashflow
-- ============================================================
CREATE TABLE IF NOT EXISTS cashflow (
ts_code VARCHAR(20) NOT NULL,
ann_date DATE,
f_ann_date DATE,
end_date DATE NOT NULL, -- 报告期
report_type VARCHAR(10),
comp_type CHAR(1),
end_type VARCHAR(10),
-- 经营活动
net_profit NUMERIC(20,4), -- 净利润
fin_exp NUMERIC(20,4), -- 财务费用
c_fr_sale_sg NUMERIC(20,4), -- 销售商品、提供劳务收到的现金
recp_tax_rends NUMERIC(20,4), -- 收到的税费返还
n_depos_incr_fi NUMERIC(20,4), -- 客户存款和同业存放款项净增加额
n_incr_loans_cb NUMERIC(20,4), -- 向中央银行借款净增加额
n_incr_borr_oth_fi NUMERIC(20,4), -- 向其他金融机构拆入资金净增加额
prem_fr_orig_contr NUMERIC(20,4), -- 收到原保险合同保费取得的现金
n_incr_insured_dep NUMERIC(20,4), -- 保户储金净增加额
n_reinsur_prem NUMERIC(20,4), -- 收到再保业务现金净额
n_incr_disp_tfa NUMERIC(20,4), -- 处置交易性金融资产净增加额
ifc_cash_incr NUMERIC(20,4), -- 收取利息、手续费及佣金的现金
n_incr_disp_faas NUMERIC(20,4), -- 处置可供出售金融资产净增加额
n_incr_loans_oth_bank NUMERIC(20,4), -- 拆入资金净增加额
dcr_cash_paym NUMERIC(20,4), -- 回购业务资金净增加额
oth_cash_recp_ral_oper_act NUMERIC(20,4), -- 收到其他与经营活动有关的现金
st_cash_out_act NUMERIC(20,4), -- 经营活动现金流出小计
n_cashflow_act NUMERIC(20,4), -- 经营活动产生的现金流量净额
-- 投资活动
c_inf_fr_invest_act NUMERIC(20,4), -- 投资活动现金流入小计
c_out_invest_act NUMERIC(20,4), -- 投资活动现金流出小计
n_cashflow_inv_act NUMERIC(20,4), -- 投资活动产生的现金流量净额
-- 筹资活动
c_inf_fr_fin_act NUMERIC(20,4), -- 筹资活动现金流入小计
st_cash_out_fin_act NUMERIC(20,4), -- 筹资活动现金流出小计
n_cash_flows_fin_act NUMERIC(20,4), -- 筹资活动产生的现金流量净额
eff_fx_flu_cash NUMERIC(20,4), -- 汇率变动对现金的影响
n_incr_cash_cash_equ NUMERIC(20,4), -- 现金及现金等价物净增加额
c_cash_equ_beg_period NUMERIC(20,4), -- 期初现金及现金等价物余额
c_cash_equ_end_period NUMERIC(20,4), -- 期末现金及现金等价物余额
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, end_date, report_type)
);
COMMENT ON TABLE cashflow IS '现金流量表 (Tushare: cashflow)';
-- ============================================================
-- 10. 财务指标表 (fina_indicator) - 核心基本面指标
-- tushare接口: fina_indicator
-- ============================================================
CREATE TABLE IF NOT EXISTS fina_indicator (
ts_code VARCHAR(20) NOT NULL,
ann_date DATE,
end_date DATE NOT NULL, -- 报告期
-- 每股指标
eps NUMERIC(16,4), -- 每股收益
dt_eps NUMERIC(16,4), -- 稀释每股收益
total_revenue_ps NUMERIC(16,4), -- 每股营业总收入
revenue_ps NUMERIC(16,4), -- 每股营业收入
capital_rese_ps NUMERIC(16,4), -- 每股资本公积
surplus_rese_ps NUMERIC(16,4), -- 每股盈余公积
undist_profit_ps NUMERIC(16,4), -- 每股未分配利润
extra_item NUMERIC(16,4), -- 非经常性损益
profit_dedt NUMERIC(16,4), -- 扣除非经常性损益后的净利润(扣非净利润)
-- 成长能力
gross_margin NUMERIC(16,4), -- 毛利
current_ratio NUMERIC(16,4), -- 流动比率
quick_ratio NUMERIC(16,4), -- 速动比率
cash_ratio NUMERIC(16,4), -- 保守速动比率
invturn_days NUMERIC(16,4), -- 存货周转天数
arturn_days NUMERIC(16,4), -- 应收账款周转天数
inv_turn NUMERIC(16,4), -- 存货周转率
ar_turn NUMERIC(16,4), -- 应收账款周转率
assets_turn NUMERIC(16,4), -- 总资产周转率
-- 盈利能力
roe NUMERIC(16,4), -- 净资产收益率
roe_dt NUMERIC(16,4), -- 净资产收益率(扣除非经常损益)
roa NUMERIC(16,4), -- 总资产净利率
roa2 NUMERIC(16,4), -- 总资产报酬率
roic NUMERIC(16,4), -- 投入资本回报率
-- 杠杆/偿债
longdeb_to_debt NUMERIC(16,4), -- 长期借款与资产总计之比
debt_to_assets NUMERIC(16,4), -- 资产负债率
ncfm NUMERIC(16,4), -- 销售商品提供劳务收到的现金/营业收入
-- 收益质量
profit_to_op NUMERIC(16,4), -- 经营活动净收益/利润总额
cfo_to_or NUMERIC(16,4), -- 经营活动现金流净额/营业收入
ocf_to_or NUMERIC(16,4), -- 经营现金净流量/营业总收入
-- 杜邦分析
dupont_roe NUMERIC(16,4), -- 净资产收益率(杜邦)
dupont_assets_turn NUMERIC(16,4), -- 资产周转率(杜邦)
dupont_equity_multi NUMERIC(16,4), -- 权益乘数(杜邦)
dupont_net_profit_margin NUMERIC(16,4), -- 销售净利率(杜邦)
-- 分红
div_rec NUMERIC(16,4), -- 每股股利(税前)
-- 其他
ocfps NUMERIC(16,4), -- 每股经营活动产生的现金流量净额
cfps NUMERIC(16,4), -- 每股现金流量净额
ebit_ps NUMERIC(16,4), -- 每股息税前利润
fcff_ps NUMERIC(16,4), -- 每股企业自由现金流量
fcfe_ps NUMERIC(16,4), -- 每股股东自由现金流量
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, end_date)
);
COMMENT ON TABLE fina_indicator IS '财务指标表 (Tushare: fina_indicator)';
-- ============================================================
-- 11. 交易日历表 (trade_cal)
-- tushare接口: trade_cal
-- ============================================================
CREATE TABLE IF NOT EXISTS trade_cal (
exchange VARCHAR(10) NOT NULL, -- 交易所 SSE上交所 SZSE深交所
cal_date DATE NOT NULL, -- 日历日期
is_open INTEGER NOT NULL, -- 是否交易 0休市 1交易
pretrade_date DATE, -- 上一个交易日
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (exchange, cal_date)
);
COMMENT ON TABLE trade_cal IS '交易日历表 (Tushare: trade_cal)';
-- ============================================================
-- 12. 指数日线行情表 (index_daily)
-- tushare接口: index_daily
-- 用于记录主要指数(沪深300、中证500等)的日线行情
-- ============================================================
CREATE TABLE IF NOT EXISTS index_daily (
ts_code VARCHAR(20) NOT NULL, -- 指数代码 (如 000300.SH)
trade_date DATE NOT NULL,
close NUMERIC(12,4),
open NUMERIC(12,4),
high NUMERIC(12,4),
low NUMERIC(12,4),
pre_close NUMERIC(12,4),
change NUMERIC(12,4),
pct_chg NUMERIC(10,4),
vol NUMERIC(20,2),
amount NUMERIC(20,4),
updated_at TIMESTAMP DEFAULT NOW(),
PRIMARY KEY (ts_code, trade_date)
);
COMMENT ON TABLE index_daily IS '指数日线行情表 (Tushare: index_daily)';
-- ============================================================
-- 常用查询视图
-- ============================================================
-- 视图1: 日线行情 + 估值指标联合查询
CREATE OR REPLACE VIEW v_daily_with_valuation AS
SELECT
d.ts_code,
d.trade_date,
b.name,
b.industry,
b.area,
d.open,
d.high,
d.low,
d.close,
d.pre_close,
d.pct_chg,
d.vol,
d.amount,
d.turnover_rate,
db.pe,
db.pe_ttm,
db.pb,
db.ps,
db.ps_ttm,
db.total_mv,
db.circ_mv,
db.dv_ratio,
db.dv_ttm
FROM daily d
LEFT JOIN stock_basic b ON d.ts_code = b.ts_code
LEFT JOIN daily_basic db ON d.ts_code = db.ts_code AND d.trade_date = db.trade_date;
COMMENT ON VIEW v_daily_with_valuation IS '日线行情+估值联合查询视图';
-- 视图2: 最新财务指标 + 股票基本信息
CREATE OR REPLACE VIEW v_latest_financials AS
SELECT DISTINCT ON (f.ts_code)
f.ts_code,
b.name,
b.industry,
b.area,
b.list_date,
f.end_date AS report_date,
f.eps,
f.roe,
f.roa,
f.roic,
f.current_ratio,
f.quick_ratio,
f.debt_to_assets,
f.gross_margin,
f.assets_turn,
f.cfps,
f.ocfps,
f.div_rec
FROM fina_indicator f
JOIN stock_basic b ON f.ts_code = b.ts_code
ORDER BY f.ts_code, f.end_date DESC;
COMMENT ON VIEW v_latest_financials IS '最新财务指标+股票信息';
-- ============================================================
-- 完成
-- ============================================================