我正在使用SQLite3数据库。我想创建一个FTS5无内容(content="”)或content=“外部表”表,以保存空间并防止数据重复(如果不使用无内容或外部内容表,则会发生数据重复)。
我的场景=〉
tableA (textColumn, idColumn)
tableB (textColumn, idColumn)
tableFTS5 (textColumn, textIdColumn, tableNameColumn)
我做什么=〉
我将数据插入到表A和表B中。然后从表A中读取所有行并插入到表FTS5中,如下所示
tableFTS5.textColumn = tableA.textColumn,
tableFTS5.textIdColumn = tableA.idColumn,
tableFTS5.tableNameColumn = "tableA"
我对表B也使用tableFTS5.tableNameColumn =“tableB”重复此操作。
我需要的是=〉
我想在tableFTS5中查询一些文本,并且只想检索tableFTS5.textIdColumn和tableFTS5.tableNameColumn,有了这两个列值,我就可以从tableA或tableB中检索原始数据。
如果tableFTS5是一个无内容或content=“external”的表,是否可以使用一些触发器或任何其他方法从tableFTS5中检索这些列?
我的信息来源关于此链接到SQLite3 FTS5文档
2条答案
按热度按时间anhgbhbe1#
好的,我可以采取的一种方法是=〉
我有两个包含文本数据的主表(我不想复制这些数据)。
我创建了一个Map表来将主表名和它们的文本IDMap到FTS表的行ID。
我有一个FTS无内容表,它只返回rowids。
但是使用这种方法,我必须管理FTS表和Map表的插入、删除操作,这太复杂了,所以我决定为每个主表创建单独的FTS表,并设置content=“那个主表名”
但是我真的希望无内容的FTS表有一个选项来存储和返回一些用户指定的列,以便存储一些id,而不是文本内容列(因为这会创建文本的重复)。
我试图实现的是所谓的一对一多态关系,这样我就不必创建太多的表。
如果我为无内容的FTS表设置了此选项,那么对于6个文本数据表,我将只创建一个FTS表,因此总表数= 7。但现在如果没有此选项,我将创建12个表,其中6个主表和6个FTS表
我请求开发人员将此选项添加到sqlite。非常感谢
to94eoyn2#
创建无内容的fts5表:
创建触发器,使其在您希望索引的表更新时更新:
然后用感兴趣的表中的数据填充它:
现在您可以查询它并从表中返回数据,如下所示: