()
| 154 | } |
| 155 | |
| 156 | initializeDatabase() { |
| 157 | // 原有的 issues 表 |
| 158 | const createIssuesTableSQL = ` |
| 159 | CREATE TABLE IF NOT EXISTS issues ( |
| 160 | id INTEGER PRIMARY KEY, |
| 161 | number INTEGER UNIQUE, |
| 162 | title TEXT NOT NULL, |
| 163 | body TEXT, |
| 164 | html_url TEXT, |
| 165 | labels TEXT, |
| 166 | created_at TEXT, |
| 167 | updated_at TEXT, |
| 168 | search_content TEXT |
| 169 | ) |
| 170 | `; |
| 171 | |
| 172 | // 标签分类表 |
| 173 | const createLabelCategoriesTableSQL = ` |
| 174 | CREATE TABLE IF NOT EXISTS label_categories ( |
| 175 | id INTEGER PRIMARY KEY, |
| 176 | label TEXT UNIQUE, |
| 177 | category TEXT, |
| 178 | description TEXT, |
| 179 | usage_count INTEGER DEFAULT 0, |
| 180 | last_used TEXT |
| 181 | ) |
| 182 | `; |
| 183 | |
| 184 | // 标签关系表(记录标签之间的关联) |
| 185 | const createLabelRelationsTableSQL = ` |
| 186 | CREATE TABLE IF NOT EXISTS label_relations ( |
| 187 | id INTEGER PRIMARY KEY, |
| 188 | label1 TEXT, |
| 189 | label2 TEXT, |
| 190 | cooccurrence_count INTEGER DEFAULT 0, |
| 191 | correlation_score REAL, |
| 192 | last_updated TEXT, |
| 193 | UNIQUE(label1, label2) |
| 194 | ) |
| 195 | `; |
| 196 | |
| 197 | // 文章标签映射表(用于快速查询) |
| 198 | const createArticleLabelsTableSQL = ` |
| 199 | CREATE TABLE IF NOT EXISTS article_labels ( |
| 200 | id INTEGER PRIMARY KEY, |
| 201 | issue_number INTEGER, |
| 202 | label TEXT, |
| 203 | category TEXT, |
| 204 | weight REAL DEFAULT 1.0, |
| 205 | FOREIGN KEY(issue_number) REFERENCES issues(number) |
| 206 | ) |
| 207 | `; |
| 208 | |
| 209 | // 标签层级关系表 |
| 210 | const createLabelHierarchyTableSQL = ` |
| 211 | CREATE TABLE IF NOT EXISTS label_hierarchy ( |
| 212 | id INTEGER PRIMARY KEY, |
| 213 | parent_label TEXT, |
no test coverage detected