SQLite:引用FTS5阴影表中数据的外键

SQLite:引用FTS5阴影表中数据的外键,sqlite,full-text-search,fts3,fts4,Sqlite,Full Text Search,Fts3,Fts4,SQLite(FTS3、FTS4、FTS5)的用户可以创建影子表。例如,如果我创建FTS5表 使用fts5(textData)创建虚拟表测试; 这也将自动创建几个真实(非虚拟)表,其中包含test\u内容,它(显然)存储插入原始虚拟表test的实际数据 我知道SQLite的作者建议这些影子表“不应该被用户直接访问”。但是,从文档中还不清楚这些表的行为是否完全没有任何保证,或者这个建议主要涉及直接在它们上插入或更新。但从这些表格中阅读的风险是什么 特别是-我需要另一个(常规)表具有引用虚拟FTS

SQLite(FTS3、FTS4、FTS5)的用户可以创建影子表。例如,如果我创建FTS5表

使用fts5(textData)创建虚拟表测试;
这也将自动创建几个真实(非虚拟)表,其中包含
test\u内容
,它(显然)存储插入原始虚拟表
test
的实际数据

我知道SQLite的作者建议这些影子表“不应该被用户直接访问”。但是,从文档中还不清楚这些表的行为是否完全没有任何保证,或者这个建议主要涉及直接在它们上插入
更新
。但从这些表格中阅读的风险是什么

特别是-我需要另一个(常规)表具有引用虚拟FTS5表的
rowid
外键:

使用fts5(textData)创建虚拟表测试;
创建表myTable(col1整数引用测试(rowid));
我在文档中找不到这方面的提示,但我自己的实验表明外键在这里不起作用-我仍然可以从
test
表中删除记录,即使它们是从
myTable
中引用的。然而,如果我这样做

使用fts5(textData)创建虚拟表测试;
创建表myTable(col1整数引用test_content(id));
然后,一切似乎都按需工作-如果记录是从
myTable
引用的,我无法从虚拟
test
表中删除记录

这是因为,与直接检查一样,
test
表的
rowid
值始终等于
test\u内容
表的
id
列值。甚至当我手动指定
rowid
时,就像在
插入测试(rowid,value)值(424242,'foobar')-然后在
测试内容中出现一个新行,相应的内容和相应的
id
等于
424242
(即使表中没有以前的记录)


所以基本上,我的问题是-FTS5表的
rowid
和相应
\u内容的
id
之间的这种对应关系是否保证保持不变?或者在某些情况下或在将来的版本中可能会出现这种情况?

您能否给出一个提示,说明如何在FTS5表上实现类似
的外键约束?比如说,我有一个带有文档ID的普通表和一个带有这些文档内容的FTS5表。问题是,如果第一个表中存在相应的文档ID,如何防止从FTS5表中删除内容?我想这可以通过
触发器来实现,但是虚拟表(afaik)也不支持触发器。