-- 相册元数据扩展字段 ALTER TABLE albums ADD COLUMN person_name_original TEXT; ALTER TABLE albums ADD COLUMN person_name_cleaned TEXT; ALTER TABLE albums ADD COLUMN tags TEXT; -- JSON: [tag, ...] ALTER TABLE albums ADD COLUMN all_words TEXT; -- JSON: [[word, pos], ...] ALTER TABLE albums ADD COLUMN raw_title TEXT; ALTER TABLE albums ADD COLUMN processed_at TEXT; -- 标签索引表(倒排索引) CREATE TABLE IF NOT EXISTS album_tags ( album_id TEXT NOT NULL, tag TEXT NOT NULL, PRIMARY KEY (album_id, tag), FOREIGN KEY (album_id) REFERENCES albums(id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS idx_album_tags_tag ON album_tags(tag); -- 人物表 CREATE TABLE IF NOT EXISTS persons ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, display_name TEXT, total_albums INTEGER DEFAULT 0, total_images INTEGER DEFAULT 0, original_names TEXT, -- JSON: [raw_name, ...] created_at TEXT DEFAULT (datetime('now', 'localtime')), updated_at TEXT DEFAULT (datetime('now', 'localtime')) ); CREATE INDEX IF NOT EXISTS idx_persons_name ON persons(name); -- 别名表 CREATE TABLE IF NOT EXISTS person_aliases ( id INTEGER PRIMARY KEY AUTOINCREMENT, person_id INTEGER NOT NULL, alias_type TEXT NOT NULL, -- prefix / english / nickname / chinese alias_name TEXT NOT NULL, created_at TEXT DEFAULT (datetime('now', 'localtime')), FOREIGN KEY (person_id) REFERENCES persons(id) ON DELETE CASCADE ); CREATE INDEX IF NOT EXISTS idx_aliases_name ON person_aliases(alias_name); CREATE INDEX IF NOT EXISTS idx_aliases_person ON person_aliases(person_id); -- 人物-相册关联表 CREATE TABLE IF NOT EXISTS person_albums ( person_id INTEGER NOT NULL, album_id TEXT NOT NULL, PRIMARY KEY (person_id, album_id), FOREIGN KEY (person_id) REFERENCES persons(id), FOREIGN KEY (album_id) REFERENCES albums(id) ); CREATE INDEX IF NOT EXISTS idx_albums_cleaned ON albums(person_name_cleaned);