Вы на правильном пути и хотите использовать числовые идентификаторы вместо строк для путей. Вы хотите таблицу, которая сопоставляет уникальные имена путей с номерами идентификаторов, и используете эти идентификаторы в качестве внешних ключей в исходной таблице.
Что-то вроде:
CREATE TABLE pathnames(id INTEGER PRIMARY KEY, path TEXT NOT NULL UNIQUE);
CREATE TABLE activity(id INTEGER PRIMARY KEY
, path_id INTEGER NOT NULL REFERENCES pathnames(id)
, timestamp INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
, etc);
CREATE INDEX activity_idx_path_id ON activity(path_id);
Тогда легко добавить путь, еслион не существует, и ищите его по имени при вставке строки в таблицу activity
:
BEGIN;
INSERT OR IGNORE INTO pathnames(path) VALUES ('C:\whatever');
INSERT INTO activity(path_id, etc)
VALUES ((SELECT id FROM pathnames WHERE path = 'C:\whatever'), 'created');
COMMIT;
и поиске всего для определенного файла, например,
SELECT timestamp, etc
FROM activity
WHERE path_id = (SELECT id FROM pathnames WHERE path = 'C:\whatever')
ORDER BY timestamp;
за исключением, конечно, в вашем приложении вы будете использовать параметры вместо литеральных строк для всех этих операторов.