Как хранить двоичные данные в таблицах SQLite с включенным FTS3?

Я перевожу приложение с обычной базы данных SQLite на базу данных с включенным полнотекстовым поиском. В нем есть несколько столбцов BLOB, в которых хранятся такие вещи, как цифровые подписи, которые, очевидно, не нужно индексировать. Я читал, что другие люди решают эту проблему, перемещая все данные, отличные от TEXT, в отдельную таблицу, отличную от FTS3, которую они при необходимости соединяют с таблицей FTS3, но это очень неэлегантное решение. Нет ли способа просто исключить определенные столбцы из индексации?


person Community    schedule 14.11.2010    source источник


Ответы (2)


Это не неэлегантно. SQL является реляционным, соединения являются естественной частью жизни. Думая, что они «неэлегантны», это приводит к стереотипно плохим проектам баз данных.

Вы определили, что у вас есть два разных типа данных — текст, который вам часто нужно искать, и большие двоичные объекты, которые вам не нужны. Нет абсолютно ничего неправильного или неэлегантного в том, чтобы хранить их в двух разных таблицах.

person Nicholas Knight    schedule 14.11.2010
comment
Я называю это неэлегантным, потому что обычные таблицы позволяют сосуществовать данным разных типов без необходимости поддерживать разные таблицы, которые вы должны постоянно синхронизировать друг с другом. Это просто не элегантно. Вероятно, мне придется полностью переработать мое приложение. По крайней мере, так я понял, прочитав ваш ответ. - person ; 14.11.2010
comment
@oskar: Если вам нужно полностью перепроектировать свое приложение, чтобы изменить макет базы данных, вы используете базу данных очень неправильно. Выделение нескольких столбцов в отдельную таблицу является чрезвычайно распространенным явлением и должно быть быстрым и безболезненным изменением в любом хорошо спроектированном приложении. - person Nicholas Knight; 14.11.2010
comment
Мне нужно перепроектировать его в том смысле, что каждый оператор SELECT, который у меня есть в настоящее время, должен быть изменен, чтобы включить соединение с другой таблицей, каждый INSERT должен быть изменен для вставки в две отдельные таблицы, и каждый DELETE должен быть изменен удалить из двух разных таблиц. - person ; 14.11.2010

Вы можете сделать это менее хлопотным, создав представление соединения, которое затем можно выбрать. Вы по-прежнему можете использовать MATCH для столбцов, созданных в таблице fts, и вам не нужно выполнять это соединение каждый раз, когда вы хотите выполнить запрос.

person glittershark    schedule 26.10.2012