-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtest.sql
More file actions
221 lines (192 loc) · 20.6 KB
/
Copy pathtest.sql
File metadata and controls
221 lines (192 loc) · 20.6 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
-- ============================================================
-- Maechuri AI Server - Test Data (고서점 미스터리)
-- Source: app/test/result_20260117_201520.json
-- Usage: 기존 데이터 삭제 후 테스트 데이터 삽입
-- ============================================================
-- ============================================================
-- DELETE ALL (역순으로 삭제 - FK 제약 때문)
-- ============================================================
DELETE FROM clue;
DELETE FROM suspect_secret;
DELETE FROM suspect_timeline;
DELETE FROM suspect;
DELETE FROM required_evidence;
DELETE FROM access_rule;
DELETE FROM visibility_rule;
DELETE FROM location;
DELETE FROM scenario;
-- ============================================================
-- SCENARIO
-- ============================================================
INSERT INTO scenario (
scenario_id,
difficulty, theme, tone, language,
incident_type, incident_summary, incident_time_start, incident_time_end, incident_location, primary_object,
crime_time_start, crime_time_end, crime_location, crime_method,
no_supernatural, no_time_travel
) VALUES (
1,
'hard', '고서점 미스터리', '어둡고 미스터리한', '한국어',
'방화 살인 및 유물 도난',
'제목: 고서점의 마지막 불꽃
1990년대 후반, 늦가을의 스산한 밤, 도심 외곽의 낡은 골목에 자리한 ''시간의 서점''에서 끔찍한 화재가 발생했다. 자정 무렵, 서점 2층에 위치한 주인 한정우 사장의 개인 서재에서 시작된 불길은 순식간에 고서점의 오랜 역사를 집어삼켰다. 소방관들이 진화 후 잔해 속에서 발견한 것은, 책상에 기댄 채 싸늘하게 식어버린 한 사장의 시신이었다.
사건 현장은 미스터리로 가득했다. 서재의 문은 안에서 굳게 잠겨 있었고, 창문 역시 낡은 빗장으로 단단히 봉쇄되어 외부인의 침입 흔적은 전혀 없었다. 감식 결과, 화재는 단순한 실화가 아닌 인화성 물질을 이용한 명백한 방화로 밝혀졌다. 더욱 기이한 점은, 한 사장이 생전에 그토록 아끼던 국보급 고문서 ''천년의 기록''이 불길 속에서도 멀쩡히 보관되어야 할 방화 금고에서 감쪽같이 사라졌다는 사실이다. 완벽한 밀실에서 발생한 방화 살인, 그리고 사라진 유물. 과연 범인은 어떻게 불타는 서재를 빠져나갔으며, 그 귀한 고문서는 어디로 사라진 것일까?
사건 당일, 서점 안팎에는 몇몇 인물들이 있었다. 서점의 온라인 판매를 맡고 있으며 삼촌인 한 사장과 경영 방식을 두고 늘 대립했던 조카 한지훈, 오랜 세월 서점을 지켜왔지만 최근 한 사장의 기행과 재정난에 깊은 우려를 표했던 직원 박미영, 그리고 사라진 ''천년의 기록''을 두고 한 사장과 공개적으로 갈등을 빚었던 경쟁 고서 수집가 최민준이 서점 근처에서 목격되었다. 또한, 논문 연구를 위해 한 사장의 특별 허가를 받아 서점 1층 자료실에서 늦게까지 작업 중이던 젊은 학자 이수진도 용의 선상에 올랐다. 이들 모두는 각자의 알리바이를 주장하지만, 그 진실은 불타버린 서재 속에 갇혀 있는 듯하다.',
'00:00:00', '01:00:00',
'시간의 서점 2층 개인 서재',
'국보급 고문서 ''천년의 기록''',
'00:00:00', '01:00:00',
'시간의 서점 2층 개인 서재',
'범인은 피해자를 살해하고, 방화 금고에서 ''천년의 기록''을 훔쳤다. 이후 인화성 물질을 이용해 서재에 불을 지른 뒤, 문 안쪽의 빗장에 미리 연결해둔 얇은 철사나 끈을 이용해 문을 밖에서 잠그고 탈출했다. 사용한 철사나 끈은 불에 타거나 회수하여 증거를 인멸했다.',
TRUE, TRUE
);
-- ============================================================
-- LOCATION
-- ============================================================
INSERT INTO location (scenario_id, location_id, name) VALUES
(1, 1, '시간의 서점'),
(1, 2, '시간의 서점 2층 개인 서재'),
(1, 3, '시간의 서점 1층 자료실');
-- ============================================================
-- VISIBILITY_RULE
-- ============================================================
INSERT INTO visibility_rule (scenario_id, rule_id, from_location, can_see, cannot_see, evidence_type) VALUES
(1, 1, '시간의 서점 2층 개인 서재', '["시간의 서점 2층 개인 서재"]', '["시간의 서점 1층 자료실", "시간의 서점"]', NULL),
(1, 2, '시간의 서점 1층 자료실', '["시간의 서점 1층 자료실"]', '["시간의 서점 2층 개인 서재"]', '소리'),
(1, 3, '시간의 서점', '["시간의 서점"]', '["시간의 서점 1층 자료실", "시간의 서점 2층 개인 서재"]', '화재');
-- ============================================================
-- ACCESS_RULE
-- ============================================================
INSERT INTO access_rule (scenario_id, rule_id, location, requires) VALUES
(1, 1, '시간의 서점 2층 개인 서재', '열쇠');
-- ============================================================
-- REQUIRED_EVIDENCE
-- ============================================================
INSERT INTO required_evidence (scenario_id, evidence_id, type, min_count) VALUES
(1, 1, '피해자의 사인', 1),
(1, 2, '인화성 물질 잔해', 1),
(1, 3, '사라진 고문서 ''천년의 기록''', 1),
(1, 4, '밀실 트릭의 흔적', 1),
(1, 5, '금고 개방 흔적', 1),
(1, 6, '지문', 1),
(1, 7, '발자국', 1),
(1, 8, '소리', 1);
-- ============================================================
-- SUSPECT
-- ============================================================
INSERT INTO suspect (
scenario_id, suspect_id, name, role, age, gender, description,
is_culprit, motive, alibi_summary,
speech_style, emotional_tendency, lying_pattern, critical_evidence_ids
) VALUES
(1, 1, '한지훈', '피해자의 조카이자 서점 온라인 판매 담당', 32, '남성',
'삼촌인 한정우 사장과 서점 경영 방식을 두고 자주 대립했으며, 최근 서점의 재정난에 불만이 많았다. 깔끔한 인상에 다소 냉철해 보이는 외모를 지녔다.',
TRUE,
'삼촌 한정우 사장이 ''천년의 기록''을 팔아 서점의 빚을 갚으려 하지 않고 고집을 부리자, 자신이 직접 유물을 훔쳐 팔아 서점의 재정난을 해결하고 서점 경영권을 완전히 장악하려 했다. 또한, 평소 자신을 무시하던 삼촌에 대한 오랜 불만도 있었다.',
'사건 당시 자정부터 1층 자료실에서 온라인 판매 재고를 정리하고 있었다고 주장한다.',
'존댓말', '침착함', 'deny', '[1, 2, 3, 4]'),
(1, 2, '박미영', '시간의 서점 직원', 50, '여성',
'오랜 세월 서점을 지켜온 베테랑 직원. 단정하고 차분한 인상이지만, 최근 서점의 재정난과 한 사장의 기행에 깊은 우려를 표해왔다.',
FALSE, NULL,
'사건 당시 서점 1층에서 마감 업무를 하고 있었으며, 자정 직전 퇴근했다고 주장합니다.',
'존댓말', '방어적', 'partial_truth', '[]'),
(1, 3, '최민준', '경쟁 고서 수집가', 50, '남성',
'날카로운 눈매와 단정한 차림의 중년 남성. 고서에 대한 집착이 강해 보이며, 평소에도 냉철한 태도를 유지한다.',
FALSE, NULL,
'사건 당일 밤, 서점 근처를 지나다 잠시 멈췄을 뿐, 곧바로 집으로 돌아갔다고 주장한다.',
'차갑게', '방어적', 'deny', '[]'),
(1, 4, '이수진', '젊은 학자', 28, '여성',
'차분하고 지적인 인상의 젊은 학자. 항상 책을 손에서 놓지 않으며, 연구에 몰두하는 모습이 자주 목격된다.',
FALSE, NULL,
'사건 당시 1층 자료실에서 논문 연구에 몰두하고 있었다고 주장한다.',
'존댓말', '소심함', 'partial_truth', '[]');
-- ============================================================
-- SUSPECT_TIMELINE
-- ============================================================
-- 한지훈 (suspect_id=1)
INSERT INTO suspect_timeline (scenario_id, suspect_id, timeline_id, time_range, location, activity, can_prove, witness) VALUES
(1, 1, 1, '00:00-00:15', '시간의 서점 1층 자료실', '온라인 판매 재고 정리', FALSE, NULL),
(1, 1, 2, '00:15-00:45', '시간의 서점 2층 개인 서재', '삼촌 한정우 살해 및 ''천년의 기록'' 절도, 방화', FALSE, NULL),
(1, 1, 3, '00:45-01:00', '시간의 서점 1층 자료실', '온라인 판매 재고 정리 (재개)', FALSE, NULL);
-- 박미영 (suspect_id=2)
INSERT INTO suspect_timeline (scenario_id, suspect_id, timeline_id, time_range, location, activity, can_prove, witness) VALUES
(1, 2, 1, '23:00-23:30', '시간의 서점 1층 자료실', '자료실 도서 정리 및 마감 준비', FALSE, NULL),
(1, 2, 2, '23:30-00:00', '시간의 서점 1층', '서점 문 잠금 및 퇴근 준비', FALSE, NULL),
(1, 2, 3, '00:00-00:30', '시간의 서점 밖', '자택으로 이동', FALSE, NULL),
(1, 2, 4, '00:30-01:00', '자택', '취침 준비', FALSE, NULL);
-- 최민준 (suspect_id=3)
INSERT INTO suspect_timeline (scenario_id, suspect_id, timeline_id, time_range, location, activity, can_prove, witness) VALUES
(1, 3, 1, '23:30-00:00', '시간의 서점 근처', '차를 몰고 서점 근처를 지나다 잠시 멈춰 서서 서점을 바라봄', FALSE, NULL),
(1, 3, 2, '00:00-00:30', '자택으로 이동 중', '자신의 차량을 운전하여 집으로 이동', FALSE, NULL),
(1, 3, 3, '00:30-01:00', '자택', '집에 도착하여 잠자리에 듦', FALSE, NULL);
-- 이수진 (suspect_id=4)
INSERT INTO suspect_timeline (scenario_id, suspect_id, timeline_id, time_range, location, activity, can_prove, witness) VALUES
(1, 4, 1, '00:00-00:30', '시간의 서점 1층 자료실', '논문 자료 정리 및 연구', FALSE, NULL),
(1, 4, 2, '00:30-01:00', '시간의 서점 1층 자료실', '잠시 휴식하며 자료실 내부를 둘러봄', FALSE, NULL);
-- ============================================================
-- SUSPECT_SECRET
-- ============================================================
-- 한지훈 (suspect_id=1)
INSERT INTO suspect_secret (scenario_id, suspect_id, secret_id, threshold, content, trigger_evidence_ids) VALUES
(1, 1, 1, 0, '저는 사건 당일 자정부터 1층 자료실에서 온라인 판매 재고를 정리하고 있었습니다. 삼촌과는 경영 방식에 대한 이견이 있었지만, 살인이나 방화 같은 끔찍한 짓은 저지를 리 없습니다.', '[]'),
(1, 1, 2, 30, '사실, 자정 무렵 삼촌 서재에서 인기척이 느껴져 잠시 2층 계단 쪽으로 가봤습니다. 하지만 아무도 없어서 다시 자료실로 돌아왔습니다.', '[]'),
(1, 1, 3, 50, '삼촌이 ''천년의 기록''을 팔아 빚을 갚자는 제 제안을 계속 거절해서 크게 다퉜습니다. 서점이 망할 위기인데도 고집을 부리는 삼촌이 정말 답답했습니다.', '[3]'),
(1, 1, 4, 70, '제가... 제가 삼촌 서재에 들어갔던 건 맞습니다. ''천년의 기록''을 몰래 가져가서 팔 생각이었어요. 삼촌은 이미 쓰러져 있었고, 저는 너무 놀라서... 금고를 열고 유물을 챙긴 뒤, 불을 질러 모든 걸 덮으려 했습니다.', '[1, 2, 3, 4]'),
(1, 1, 5, 90, '네... 제가 삼촌을 죽였습니다. ''천년의 기록''을 훔치려 서재에 들어갔을 때, 삼촌이 깨어나 저항했습니다. 순간적으로 화가 나서 목을 졸랐습니다. 그리고... 밀실을 만들기 위해 문에 철사를 걸고 밖에서 잠근 뒤 불을 질렀습니다. 모든 것이 제 계획대로 될 줄 알았습니다...', '[]');
-- 박미영 (suspect_id=2)
INSERT INTO suspect_secret (scenario_id, suspect_id, secret_id, threshold, content, trigger_evidence_ids) VALUES
(1, 2, 1, 0, '저는 자정 직전에 서점 문을 잠그고 퇴근했습니다. 그 이후로는 집에 있었습니다. 사건과는 아무런 관련이 없습니다.', '[]'),
(1, 2, 2, 30, '퇴근하기 직전, 2층에서 뭔가 쿵 하는 소리를 들은 것 같기도 합니다. 하지만 서점은 워낙 낡아서 그런 소리가 자주 났기에 대수롭지 않게 생각했습니다.', '[]'),
(1, 2, 3, 50, '사실 한 사장님과 최근 서점 운영 방식 때문에 몇 번 다퉜습니다. 특히 온라인 판매만 고집하는 조카 한지훈 씨 때문에 서점 분위기가 많이 안 좋았고, 한 사장님도 재정난으로 힘들어하셨습니다.', '[]'),
(1, 2, 4, 70, '퇴근 직전, 서점 문을 잠그고 나오는데, 서점 근처 골목에서 경쟁 고서 수집가 최민준 씨가 서성이는 것을 봤습니다. 저를 보고는 황급히 몸을 숨기더군요. 뭔가 수상했습니다.', '[]'),
(1, 2, 5, 90, '제가 서점을 나서기 직전, 2층 개인 서재 문이 살짝 열려 있었고, 안에서 한지훈 씨가 한 사장님과 언성을 높이는 소리를 들었습니다. 저는 괜한 일에 엮이기 싫어 그냥 지나쳤지만, 그게 마지막이었을 줄은 몰랐습니다. 저는 그 직후 서점을 떠났습니다.', '[1, 4]');
-- 최민준 (suspect_id=3)
INSERT INTO suspect_secret (scenario_id, suspect_id, secret_id, threshold, content, trigger_evidence_ids) VALUES
(1, 3, 1, 0, '사건 당일 밤, 저는 서점 근처를 지나다 잠시 멈췄을 뿐, 곧바로 집으로 돌아갔습니다. 한 사장과는 최근 만난 적도 없습니다.', '[]'),
(1, 3, 2, 30, '사실, 서점 근처에 잠시 멈춰 서서 서점을 바라봤습니다. ''천년의 기록'' 때문에 한 사장과 사이가 좋지 않았지만, 그날은 그저 지나가는 길이었습니다.', '[]'),
(1, 3, 3, 50, '한 사장과 ''천년의 기록'' 문제로 크게 다툰 것은 맞습니다. 제가 그 고문서를 간절히 원했기 때문입니다. 하지만 제가 그를 해칠 이유는 없습니다.', '[3]'),
(1, 3, 4, 70, '제가 서점 근처에 멈춰 섰을 때, 서점 1층 자료실 창문에서 희미한 불빛을 보았습니다. 누군가 안에 있었던 것 같습니다. 그리고 잠시 후, 서점 뒤편에서 누군가 급하게 빠져나가는 것을 어렴풋이 본 것 같습니다. 어두워서 누구인지는 확실치 않습니다.', '[6]'),
(1, 3, 5, 90, '제가 본 사람은 서점 뒤편 골목으로 사라졌습니다. 그 사람은 키가 크고 마른 체형이었습니다. 그리고 그가 들고 있던 가방에서 무언가 반짝이는 것이 보였습니다. 아마 ''천년의 기록''이었을 겁니다. 저는 그저 두려워서 아무 말도 할 수 없었습니다.', '[]');
-- 이수진 (suspect_id=4)
INSERT INTO suspect_secret (scenario_id, suspect_id, secret_id, threshold, content, trigger_evidence_ids) VALUES
(1, 4, 1, 0, '저는 사건 당시 1층 자료실에서 논문 연구에 몰두하고 있었습니다. 아무것도 듣거나 보지 못했습니다.', '[]'),
(1, 4, 2, 30, '사실, 자정 무렵에 2층에서 희미하게 무언가 부딪히는 듯한 소리를 들은 것 같기도 합니다. 하지만 책에 집중하느라 대수롭지 않게 여겼습니다.', '[]'),
(1, 4, 3, 50, '한 사장님께서는 최근 ''천년의 기록'' 때문에 많이 불안해하셨습니다. 제가 자료실에 있을 때도 누군가와 통화하며 격앙된 목소리로 다투는 것을 들은 적이 있습니다. 그게 누구였는지는 모르겠습니다.', '[3]'),
(1, 4, 4, 70, '사건 직전, 제가 잠시 자료실 밖으로 나와 화장실에 다녀오는 길에 2층 계단 쪽에서 누군가 급하게 내려오는 것을 얼핏 보았습니다. 어두워서 얼굴은 보지 못했지만, 키가 크고 건장한 체격의 남성이었습니다. 너무 놀라서 다시 자료실로 숨었습니다.', '[2]'),
(1, 4, 5, 90, '제가 숨어서 지켜보니, 그 남성은 서점 뒷문으로 황급히 빠져나갔습니다. 그리고 잠시 후, 2층에서 연기가 피어오르는 것을 보았습니다. 저는 너무 무서워서 아무것도 할 수 없었습니다. 제가 본 사람은 한지훈 씨와 체격이 비슷했습니다.', '[]');
-- ============================================================
-- CLUE
-- ============================================================
INSERT INTO clue (scenario_id, clue_id, name, found_at, description, related_suspect_ids, logic_explanation, decoded_answer, is_red_herring) VALUES
(1, 1, '피해자의 목에 남은 흔적', '시간의 서점 2층 개인 서재',
'피해자의 목에서 강한 압박으로 인한 붉은 자국과 멍이 발견되었습니다. 이는 질식사임을 시사합니다.',
'[1]', '피해자가 살해당했음을 명확히 보여주며, 범인의 직접적인 폭력 행위를 증명합니다.',
'피해자는 교살당했습니다.', FALSE),
(1, 2, '문고리 주변의 미세한 그을음과 흔적', '시간의 서점 2층 개인 서재',
'불에 탄 문고리 주변에서 매우 얇은 금속성 물질이 타다 남은 듯한 미세한 그을음과 함께, 문 안쪽 빗장에 무언가를 걸었던 듯한 작은 긁힘 자국이 발견되었습니다.',
'[1]', '범인이 문을 밖에서 잠그기 위해 사용한 밀실 트릭의 흔적입니다. 철사나 끈이 불에 타면서 남긴 자국으로 보입니다.',
'범인은 얇은 철사나 끈을 이용해 문을 밖에서 잠그는 밀실 트릭을 사용했습니다.', FALSE),
(1, 3, '비어있는 방화 금고와 개방 흔적', '시간의 서점 2층 개인 서재',
'서재 한쪽 벽에 설치된 방화 금고가 열려 있었고, 내부는 텅 비어 있었습니다. 금고 문에는 강제로 열린 흔적은 없으나, 지문이 닦인 듯한 희미한 자국이 남아있습니다.',
'[1]', '범인이 금고를 열고 ''천년의 기록''을 훔쳤음을 시사합니다. 강제 개방 흔적이 없는 것은 범인이 금고 비밀번호를 알고 있었거나, 피해자에게서 알아냈을 가능성을 보여줍니다.',
'범인은 금고 비밀번호를 알고 있었거나 피해자에게서 알아내어 ''천년의 기록''을 훔쳤습니다.', FALSE),
(1, 4, '바닥에서 발견된 인화성 물질 잔해와 지문', '시간의 서점 2층 개인 서재',
'서재 바닥의 불에 덜 탄 부분에서 휘발유와 유사한 인화성 물질의 잔해가 검출되었습니다. 또한, 그 근처에서 용의자 1의 것으로 추정되는 지문이 희미하게 발견되었습니다.',
'[1]', '범인이 방화를 위해 인화성 물질을 사용했음을 증명하며, 용의자 1이 현장에 있었음을 강력히 시사합니다.',
'범인은 휘발유를 사용하여 방화했으며, 현장에서 한지훈의 지문이 발견되었습니다.', FALSE),
(1, 5, '자료실에서 발견된 발자국', '시간의 서점 1층 자료실',
'불에 타지 않은 1층 자료실 바닥에서 용의자 2(가상의 인물)의 것으로 추정되는 발자국이 발견되었습니다. 발자국은 범행 시간대와 겹치는 시간대에 남겨진 것으로 보입니다.',
'[2]', '용의자 2가 범행 시간대에 서점 내부에 있었음을 시사하여, 그를 용의선상에 올리도록 유도합니다. 하지만 범행 장소인 2층 개인 서재와는 직접적인 관련이 없습니다.',
NULL, TRUE),
(1, 6, '서점 본관에서 들린 소리 증언', '시간의 서점',
'서점 근처를 지나던 목격자가 범행 시간대에 서점 본관 쪽에서 짧고 날카로운 비명 소리를 들었다고 증언했습니다.',
'[]', '비명 소리가 서점 본관에서 들렸다는 증언은 범행 장소가 2층 개인 서재가 아닐 수도 있다는 오해를 불러일으킬 수 있습니다. 실제 범행은 2층 서재에서 일어났고, 본관에서는 다른 우연한 소음이었을 가능성이 높습니다.',
NULL, TRUE),
(1, 7, '서점 카운터에서 발견된 오래된 열쇠', '시간의 서점',
'서점 1층 카운터 아래에서 오래된 디자인의 낡은 열쇠가 발견되었습니다. 이 열쇠는 개인 서재의 열쇠와는 모양이 다르지만, 어떤 문을 여는 데 사용될 수 있을지 불분명합니다.',
'[]', '이 열쇠는 개인 서재의 열쇠가 아니며, 범행과 직접적인 관련이 없습니다. 플레이어가 불필요하게 이 열쇠의 용도를 추적하도록 유도하는 미끼입니다.',
NULL, TRUE),
(1, 8, '자료실 구석의 오래된 그을음 자국', '시간의 서점 1층 자료실',
'1층 자료실의 한쪽 구석 벽에서 오래되어 보이는 작은 그을음 자국이 발견되었습니다. 최근의 화재와는 무관해 보이며, 과거에 담뱃불 등으로 인해 생긴 흔적일 가능성이 높습니다.',
'[]', '이 그을음 자국은 범행 현장인 2층 개인 서재의 화재와는 무관한 오래된 흔적입니다. 플레이어가 화재의 원인을 잘못된 장소에서 찾도록 유도합니다.',
NULL, TRUE);