CREATE TABLE IF NOT EXISTS records ( id INTEGER PRIMARY KEY AUTOINCREMENT, event_id INTEGER NOT NULL REFERENCES events(id), level TEXT NOT NULL CHECK (level IN ('meet', 'city', 'province', 'national')), result_value REAL, result_text TEXT, holder_name TEXT, holder_team_id INTEGER REFERENCES teams(id), achieved_at TEXT, is_current INTEGER NOT NULL DEFAULT 1 CHECK (is_current IN (0, 1)), source TEXT NOT NULL DEFAULT 'history' CHECK (source IN ('history', 'current')), created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE INDEX IF NOT EXISTS idx_records_event_level ON records(event_id, level, is_current); CREATE TABLE IF NOT EXISTS record_breaks ( id INTEGER PRIMARY KEY AUTOINCREMENT, event_id INTEGER NOT NULL REFERENCES events(id), entry_id INTEGER NOT NULL REFERENCES entries(id), level TEXT NOT NULL CHECK (level IN ('meet', 'city', 'province', 'national')), result_value REAL, result_text TEXT, bonus_points REAL NOT NULL DEFAULT 0, state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'approved', 'rejected')), -- approved_by 指向系统库 users,跨库不能建外键。 approved_by INTEGER, approved_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE INDEX IF NOT EXISTS idx_record_breaks_event_id ON record_breaks(event_id, state);