2010-11-14 5 views
2

Je suis en train de faire la transition d'une application de l'utilisation d'une base de données SQLite normale vers une autre avec la recherche de texte intégral activée. Il a plusieurs colonnes BLOB qui stockent des choses comme des signatures numériques, qui n'ont évidemment pas besoin d'être indexées. J'ai lu que d'autres personnes résolvent cela en déplaçant toutes les données non-TEXT vers une table distincte, non-FTS3, qu'elles rejoignent en interne avec la table FTS3 quand cela est nécessaire, mais c'est une solution très inélégante. N'existe-t-il pas moyen d'exclure certaines colonnes de l'indexation?Comment stocker des données binaires dans des tables SQLite avec FTS3 activé?

Répondre

0

Ce n'est pas inélégant. SQL est relationnel, les jointures font naturellement partie de la vie. Penser qu'ils sont "inélégants" est ce qui conduit à des conceptions de base de données stéréotypiquement pauvres.

Vous avez déterminé que vous disposez de deux types de données différents: du texte que vous devez souvent rechercher et des objets blobs que vous ne souhaitez pas rechercher. Il n'y a absolument rien de mal ou d'inélégant à les stocker dans deux tables différentes.

+0

Je l'appelle inélégant parce que les tables normales permettent à des données de différents types de coexister sans avoir à maintenir des tables différentes que vous devez constamment synchroniser les unes avec les autres. Ce n'est tout simplement pas élégant. Je vais probablement devoir complètement reengineer mon application. Ou du moins, c'est ainsi que je le prends en lisant votre réponse. –

+0

@oskar: Si vous devez complètement ré-élaborer votre application afin de changer la configuration de votre base de données, vous utilisez la base de données _very_ wrong. Diviser quelques colonnes dans une table séparée est une chose extrêmement commune à faire, et devrait être un changement rapide et indolore dans toute application bien conçue. –

+0

J'ai besoin de le reengineer dans le sens où chaque instruction SELECT que j'ai actuellement devra être modifiée pour inclure une jointure à une autre table, chaque INSERT devra être changé pour être inséré dans deux tables séparées, et chaque DELETE devra être changé pour supprimer de deux tables différentes. –

0

Vous pouvez le rendre moins compliqué en créant une vue de la jointure que vous pouvez ensuite sélectionner. Vous pouvez toujours utiliser MATCH sur les colonnes qui proviennent de la table fts, et vous n'avez pas besoin de faire cette jointure chaque fois que vous voulez interroger.

Questions connexes