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
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.
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.
- 1. stocker des données binaires dans mysql
- 2. comment stocker des fichiers dans sqlite
- 3. Stocker des données binaires dans des chaînes - idéologiquement faux?
- 4. trouver les tables a des données binaires
- 5. SQLite FTS3 performances incompatibles
- 6. Comment créer des tables dans sqlite 3?
- 7. Python SQLite FTS3 alternatives?
- 8. Comment stocker des données dans plusieurs tables dans Joomla?
- 9. sqlite-fts3: tokenizer personnalisé?
- 10. Comment stocker directement des données SQLite dans XCode?
- 11. données binaires d'écriture dans une base de données SQLite ContentResolver
- 12. Comment transférer des données binaires avec Python?
- 13. Comment échapper le caractère - dans les requêtes SQLite FTS3?
- 14. SQLite FTS3 simuler LIKE somestring%
- 15. Des tables inattendues apparaissant dans ma base de données SQLite
- 16. Liste des tables système dans SQLite
- 17. Comment puis-je stocker des fichiers audio dans sqlite ..?
- 18. Comment stocker des données avec N colonnes
- 19. Travailler avec des données binaires en PHP
- 20. Lecture des données binaires avec l'erreur seekg
- 21. Écrire des données binaires avec FileSystemObject write()
- 22. Comment puis-je obtenir Riak pour stocker des images ou des données binaires?
- 23. méthodes pour stocker des fichiers binaires dans SVN
- 24. Exporter des données SQL binaires/BLOB?
- 25. comment stocker des nombres binaires plus grands en bitset (C++)
- 26. Evénement COM avec des données binaires dans les arguments
- 27. Comment stocker des données dans datastore - AppEngine
- 28. Détection de l'extension FTS3 dans SQLite3
- 29. Ecrire des données binaires dans stdout avec IronPython
- 30. Comment stocker des données dans un fichier plat sous Android?
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. –
@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. –
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. –