Иностранный ключ в таблицах android fts4
У меня есть следующие таблицы SQL
Parent(_id,name) Kid(_id,name,parent_id)// где parent_id - внешний ключ Toy(_id,name,…,kid_id)// где kid_id - внешний ключ
прямо сейчас у меня есть вопросы, которые получают всех детей данного родителя, а также все игрушки для данного ребенка.
Появилась новая необходимость включить функцию поиска в приложение. Для этого мне нужно перейти на таблицу FTS4. Как определить таблицу fts4, чтобы не потерять возможность поиска по внешнему ключу? Я не испытываю в ФТС ни на что. Но я читал о docid против rowid. Могу ли я использовать docid для значений внешнего ключа? Кто-нибудь, пожалуйста, приведите пример, такой как
CREATE TABLE Kid, использующий fts4(rowid, name, docid); // где docid на самом деле parent_id
1 ответ
Таблицы FTS не очень похожи на реальные таблицы; думать о них как об индексах.
Таблицы FTS должны содержать только текстовые столбцы; хранение parent_id
в таблице FTS нет смысла. Кроме того, docid
такой же, как rowid
и должен совпадать с первичным ключом "реальной" таблицы.
Поэтому таблицы должны выглядеть так:
CREATE TABLE Kid (
_id INTEGER PRIMARY KEY,
name TEXT,
parent_id INTEGER REFERENCES Parent(_id)
);
CREATE VIRTUAL TABLE Kid_FTS USING FTS4 (name);