File size: 5,677 Bytes
a28cff7
 
44e3c95
a28cff7
 
 
 
 
 
 
 
 
 
ce17628
a28cff7
ce17628
 
a28cff7
 
 
 
 
 
ce17628
 
a28cff7
 
ce17628
a28cff7
ce17628
 
a28cff7
 
 
 
ce17628
 
a28cff7
 
ce17628
a28cff7
ce17628
 
a28cff7
 
 
ce17628
 
a28cff7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6cbfd60
 
 
 
a28cff7
 
 
 
 
 
6cbfd60
a28cff7
6cbfd60
 
a28cff7
6cbfd60
a28cff7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
-- ────────────────────────────────────────────────────────────
-- roadshow-server-v3 DuckDB Schema
-- μ‹œλ‚˜λ¦¬μ˜€: cs-myk-v3 / bundle-v3 / worker-v3
-- ────────────────────────────────────────────────────────────

-- μ‹œλ‚˜λ¦¬μ˜€ 메타
CREATE TABLE IF NOT EXISTS scenarios (
    id           VARCHAR PRIMARY KEY,
    name         VARCHAR NOT NULL,
    version      VARCHAR NOT NULL,
    description  TEXT
);

-- Intent μΉ΄νƒˆλ‘œκ·Έ (μ‹œλ‚˜λ¦¬μ˜€λ³„)
CREATE TABLE IF NOT EXISTS catalog_intents (
    scenario_id      VARCHAR NOT NULL,
    intent_id        VARCHAR NOT NULL,
    intent_name      VARCHAR NOT NULL,
    L1_id            VARCHAR NOT NULL,
    L1_name          VARCHAR NOT NULL,
    L2_id            VARCHAR NOT NULL,
    L2_name          VARCHAR NOT NULL,
    inference_type   VARCHAR NOT NULL,    -- 'Rule' | 'Model'
    features_json    VARCHAR,             -- JSON array
    PRIMARY KEY (scenario_id, intent_id)
);

-- Action μΉ΄νƒˆλ‘œκ·Έ (μ‹œλ‚˜λ¦¬μ˜€λ³„)
CREATE TABLE IF NOT EXISTS catalog_actions (
    scenario_id      VARCHAR NOT NULL,
    action_id        VARCHAR NOT NULL,
    action_name      VARCHAR NOT NULL,
    intents_json     VARCHAR NOT NULL,
    condition        VARCHAR,
    channel          VARCHAR NOT NULL,
    message          VARCHAR,
    PRIMARY KEY (scenario_id, action_id)
);

-- Behavior μΉ΄νƒˆλ‘œκ·Έ (μ‹œλ‚˜λ¦¬μ˜€λ³„)
CREATE TABLE IF NOT EXISTS catalog_behaviors (
    scenario_id      VARCHAR NOT NULL,
    behavior_id      VARCHAR NOT NULL,
    step             INTEGER NOT NULL,
    behavior_name    VARCHAR NOT NULL,
    event_type       VARCHAR NOT NULL,
    entity           VARCHAR NOT NULL,
    PRIMARY KEY (scenario_id, behavior_id)
);

-- ────────────────────────────────────────────────────────────
-- μ‹œμ—° λŸ°νƒ€μž„ ν…Œμ΄λΈ”
-- ────────────────────────────────────────────────────────────

-- μ‹œμ—° μ„Έμ…˜
CREATE SEQUENCE IF NOT EXISTS seq_sessions;
CREATE TABLE IF NOT EXISTS sessions (
    id               VARCHAR PRIMARY KEY,
    scenario_id      VARCHAR NOT NULL,
    created_at       TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    last_active_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    stage            VARCHAR DEFAULT 'initial'
);

-- μ„€λ¬Έ λ‹΅λ³€
CREATE SEQUENCE IF NOT EXISTS seq_survey_answers;
CREATE TABLE IF NOT EXISTS survey_answers (
    id               BIGINT DEFAULT nextval('seq_survey_answers') PRIMARY KEY,
    session_id       VARCHAR NOT NULL,
    question_id      VARCHAR NOT NULL,
    answer_code      VARCHAR NOT NULL,
    submitted_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 행동 둜그
CREATE SEQUENCE IF NOT EXISTS seq_event_log;
CREATE TABLE IF NOT EXISTS event_log (
    id               BIGINT DEFAULT nextval('seq_event_log') PRIMARY KEY,
    session_id       VARCHAR NOT NULL,
    scenario_id      VARCHAR NOT NULL,
    step             INTEGER,
    behavior_id      VARCHAR,
    event_type       VARCHAR NOT NULL,
    entity           VARCHAR NOT NULL,
    occurred_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Intent Score (단일 μΆ”λ‘  μ‹œμ )
-- baseline_score : 행동 없이 Batch Feature만으둜 μž¬μΆ”λ‘ ν•œ 점수
-- final_score    : Batch + Behavioral Pattern Feature 합쳐 μž¬μΆ”λ‘ ν•œ 점수
-- delta_score    : final - baseline (행동이 λ§Œλ“  λ³€ν™”λŸ‰)
-- rank_change    : baseline_rank - rank (μ–‘μˆ˜λ©΄ ν–‰λ™μœΌλ‘œ μˆœμœ„ μƒμŠΉ)
CREATE SEQUENCE IF NOT EXISTS seq_intent_scores;
CREATE TABLE IF NOT EXISTS intent_scores (
    id               BIGINT DEFAULT nextval('seq_intent_scores') PRIMARY KEY,
    session_id       VARCHAR NOT NULL,
    stage            VARCHAR NOT NULL,    -- 'initial' | 'step_1' | 'step_2' | 'step_3'
    intent_id        VARCHAR NOT NULL,
    baseline_score   DOUBLE NOT NULL,
    final_score      DOUBLE NOT NULL,
    delta_score      DOUBLE DEFAULT 0.0,
    baseline_rank    INTEGER,
    rank             INTEGER,
    rank_change      INTEGER DEFAULT 0,
    inference_type   VARCHAR NOT NULL,
    computed_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Customer Context (적재 λ‹¨μœ„: μΆ”λ‘  1νšŒλ‹Ή 1ν–‰, 116 Intent ν¬ν•¨λœ JSON)
CREATE SEQUENCE IF NOT EXISTS seq_customer_contexts;
CREATE TABLE IF NOT EXISTS customer_contexts (
    id               BIGINT DEFAULT nextval('seq_customer_contexts') PRIMARY KEY,
    session_id       VARCHAR NOT NULL,
    scenario_id      VARCHAR NOT NULL,
    stage            VARCHAR NOT NULL,
    context_json     VARCHAR NOT NULL,    -- Customer Context JSON (Section 4.1 μŠ€ν‚€λ§ˆ)
    created_at       TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- ────────────────────────────────────────────────────────────
-- 인덱슀
-- ────────────────────────────────────────────────────────────
CREATE INDEX IF NOT EXISTS idx_event_log_session  ON event_log (session_id);
CREATE INDEX IF NOT EXISTS idx_intent_scores_session ON intent_scores (session_id, stage);
CREATE INDEX IF NOT EXISTS idx_customer_contexts_session ON customer_contexts (session_id, stage);