Cai
2026-08-13 d11d9fc3eba1a4c6fa73e882811024cc7e11e558
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
CREATE TABLE IF NOT EXISTS security (
    ticker VARCHAR(16) NOT NULL COMMENT '带市场后缀的证券代码',
    company VARCHAR(128) NOT NULL COMMENT '公司简称',
    market VARCHAR(16) NOT NULL COMMENT '交易市场',
    currency CHAR(3) NOT NULL COMMENT 'CNY或HKD',
    active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否纳入每日更新',
    created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    PRIMARY KEY (ticker),
    KEY idx_security_active (active, market),
    CONSTRAINT chk_security_active CHECK (active IN (0, 1)),
    CONSTRAINT chk_security_currency CHECK (currency IN ('CNY', 'HKD'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
CREATE TABLE IF NOT EXISTS valuation_version (
    valuation_id VARCHAR(64) NOT NULL COMMENT '可稳定复现的估值版本ID',
    ticker VARCHAR(16) NOT NULL,
    valuation_date DATE NOT NULL COMMENT '正式估值基准日',
    method VARCHAR(32) NOT NULL COMMENT '主估值模型',
    pessimistic_low DECIMAL(20,6) NULL,
    pessimistic_high DECIMAL(20,6) NULL,
    base_low DECIMAL(20,6) NOT NULL,
    base_high DECIMAL(20,6) NOT NULL,
    optimistic_low DECIMAL(20,6) NULL,
    optimistic_high DECIMAL(20,6) NULL,
    normalized_profit DECIMAL(24,6) NULL,
    normalized_pe DECIMAL(20,6) NULL,
    pb DECIMAL(20,6) NULL,
    ps DECIMAL(20,6) NULL,
    consensus_year SMALLINT UNSIGNED NULL,
    consensus_profit DECIMAL(24,6) NULL,
    consensus_count INT UNSIGNED NULL,
    report_path VARCHAR(1024) NOT NULL,
    snapshot_path VARCHAR(1024) NULL,
    source_hash CHAR(64) NOT NULL,
    active_from DATE NOT NULL,
    active_to DATE NULL,
    created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    PRIMARY KEY (valuation_id),
    UNIQUE KEY uq_valuation_source (ticker, valuation_date, source_hash),
    KEY idx_valuation_active (ticker, active_from, active_to),
    CONSTRAINT fk_valuation_security FOREIGN KEY (ticker) REFERENCES security(ticker),
    CONSTRAINT chk_valuation_active_dates CHECK (active_to IS NULL OR active_to >= active_from),
    CONSTRAINT chk_valuation_base CHECK (base_low <= base_high),
    CONSTRAINT chk_valuation_optimistic CHECK (optimistic_low IS NULL OR optimistic_high IS NULL OR optimistic_low <= optimistic_high),
    CONSTRAINT chk_valuation_pessimistic CHECK (pessimistic_low IS NULL OR pessimistic_high IS NULL OR pessimistic_low <= pessimistic_high)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
CREATE TABLE IF NOT EXISTS daily_price (
    ticker VARCHAR(16) NOT NULL,
    trade_date DATE NOT NULL,
    close DECIMAL(20,6) NOT NULL,
    currency CHAR(3) NOT NULL,
    source_id VARCHAR(64) NOT NULL,
    source_timestamp DATETIME(6) NULL,
    ingested_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    PRIMARY KEY (ticker, trade_date),
    KEY idx_daily_price_date (trade_date, ticker),
    CONSTRAINT fk_daily_price_security FOREIGN KEY (ticker) REFERENCES security(ticker),
    CONSTRAINT chk_daily_price_close CHECK (close > 0),
    CONSTRAINT chk_daily_price_currency CHECK (currency IN ('CNY', 'HKD'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
CREATE TABLE IF NOT EXISTS daily_judgement (
    ticker VARCHAR(16) NOT NULL,
    trade_date DATE NOT NULL,
    valuation_id VARCHAR(64) NOT NULL,
    close DECIMAL(20,6) NOT NULL,
    base_low DECIMAL(20,6) NOT NULL,
    base_high DECIMAL(20,6) NOT NULL,
    optimistic_high DECIMAL(20,6) NULL,
    label VARCHAR(16) NOT NULL,
    distance_to_base_low DECIMAL(20,8) NOT NULL,
    distance_to_base_high DECIMAL(20,8) NOT NULL,
    computed_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    PRIMARY KEY (ticker, trade_date),
    KEY idx_judgement_date_label (trade_date, label, ticker),
    KEY idx_judgement_valuation (valuation_id),
    CONSTRAINT fk_judgement_security FOREIGN KEY (ticker) REFERENCES security(ticker),
    CONSTRAINT fk_judgement_valuation FOREIGN KEY (valuation_id) REFERENCES valuation_version(valuation_id),
    CONSTRAINT chk_judgement_base CHECK (base_low <= base_high),
    CONSTRAINT chk_judgement_label CHECK (label IN ('偏低', '基本合理', '偏贵', '明显偏贵'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;