Spaces:
Sleeping
Sleeping
| -- 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; | |