File size: 3,733 Bytes
75d3623
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
-- Books API Data 数据库结构 (SQLite版本)
-- 适配自 BOOKS_API_DATA_文档.md 的数据结构

-- 1. 书籍表(books)
CREATE TABLE IF NOT EXISTS books (
    market_book_id INTEGER PRIMARY KEY,
    market_classify_id INTEGER,
    market_book_name TEXT NOT NULL,
    stage INTEGER,
    market_book_cover TEXT,
    mod_book_id INTEGER,
    mod_book_name TEXT,
    mod_book_cover TEXT,
    old_mod_book_id INTEGER,
    is_mod INTEGER DEFAULT 0,
    create_date TEXT,
    create_user INTEGER,
    isbn TEXT,
    type INTEGER,
    subject_id INTEGER,
    ver_id INTEGER,
    grade_id INTEGER,
    reel_id INTEGER,
    app_id TEXT,
    sort INTEGER,
    market_classify_name TEXT,
    old_mod_classify_id INTEGER,
    mod_classify_id INTEGER,
    start_page INTEGER,
    max_page INTEGER,
    source_dir TEXT,  -- 数据源目录
    imported_at TEXT DEFAULT CURRENT_TIMESTAMP
);

-- 创建索引
CREATE INDEX IF NOT EXISTS idx_books_classify ON books(market_classify_id);
CREATE INDEX IF NOT EXISTS idx_books_grade_subject ON books(grade_id, subject_id);
CREATE INDEX IF NOT EXISTS idx_books_stage ON books(stage);

-- 2. 页面表(pages)
CREATE TABLE IF NOT EXISTS pages (
    page_id INTEGER PRIMARY KEY,
    book_id INTEGER NOT NULL,
    page_number INTEGER NOT NULL,
    origin_img_url TEXT,
    encrypt_img_url TEXT,
    FOREIGN KEY (book_id) REFERENCES books(market_book_id) ON DELETE CASCADE
);

-- 创建索引
CREATE INDEX IF NOT EXISTS idx_pages_book_page ON pages(book_id, page_number);
CREATE INDEX IF NOT EXISTS idx_pages_book ON pages(book_id);

-- 3. 页面片段表(pieces)
CREATE TABLE IF NOT EXISTS pieces (
    piece_id INTEGER PRIMARY KEY,
    page_id INTEGER NOT NULL,
    original TEXT,
    translation TEXT,
    origin_sound_url TEXT,
    encrypt_sound_url TEXT,
    duration INTEGER,
    coordinate_x REAL,
    coordinate_y REAL,
    coordinate_width REAL,
    coordinate_height REAL,
    is_evaluated INTEGER DEFAULT 0,
    show_translation INTEGER DEFAULT 1,
    rich_original TEXT,
    rich_translation TEXT,
    piece_order INTEGER,  -- 片段在页面中的顺序
    FOREIGN KEY (page_id) REFERENCES pages(page_id) ON DELETE CASCADE
);

-- 创建索引
CREATE INDEX IF NOT EXISTS idx_pieces_page ON pieces(page_id);
CREATE INDEX IF NOT EXISTS idx_pieces_page_order ON pieces(page_id, piece_order);

-- 4. 目录表(catalogs)
CREATE TABLE IF NOT EXISTS catalogs (
    catalog_id INTEGER PRIMARY KEY,
    book_id INTEGER NOT NULL,
    catalog_name TEXT,
    catalog_name_cn TEXT,
    start_page INTEGER,
    end_page INTEGER,
    thumbnail TEXT,
    parent_id INTEGER DEFAULT 0,
    sort INTEGER,
    FOREIGN KEY (book_id) REFERENCES books(market_book_id) ON DELETE CASCADE
);

-- 创建索引
CREATE INDEX IF NOT EXISTS idx_catalogs_book ON catalogs(book_id);
CREATE INDEX IF NOT EXISTS idx_catalogs_parent ON catalogs(parent_id);
CREATE INDEX IF NOT EXISTS idx_catalogs_book_sort ON catalogs(book_id, sort);

-- 5. 全文搜索支持(使用FTS5)
CREATE VIRTUAL TABLE IF NOT EXISTS pieces_fts USING fts5(
    piece_id UNINDEXED,
    original,
    translation,
    content=pieces,
    content_rowid=piece_id
);

-- 触发器:自动更新FTS索引
CREATE TRIGGER IF NOT EXISTS pieces_ai AFTER INSERT ON pieces BEGIN
    INSERT INTO pieces_fts(rowid, piece_id, original, translation)
    VALUES (new.piece_id, new.piece_id, new.original, new.translation);
END;

CREATE TRIGGER IF NOT EXISTS pieces_ad AFTER DELETE ON pieces BEGIN
    DELETE FROM pieces_fts WHERE rowid = old.piece_id;
END;

CREATE TRIGGER IF NOT EXISTS pieces_au AFTER UPDATE ON pieces BEGIN
    UPDATE pieces_fts 
    SET original = new.original, translation = new.translation
    WHERE rowid = new.piece_id;
END;