52 lines
1.9 KiB
SQL
52 lines
1.9 KiB
SQL
-- 相册元数据扩展字段
|
|
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); |