Я перевожу приложение с обычной базы данных SQLite на базу данных с включенным полнотекстовым поиском. В нем есть несколько столбцов BLOB, в которых хранятся такие вещи, как цифровые подписи, которые, очевидно, не нужно индексировать. Я читал, что другие люди решают эту проблему, перемещая все данные, отличные от TEXT, в отдельную таблицу, отличную от FTS3, которую они при необходимости соединяют с таблицей FTS3, но это очень неэлегантное решение. Нет ли способа просто исключить определенные столбцы из индексации?
Как хранить двоичные данные в таблицах SQLite с включенным FTS3?
Ответы (2)
Это не неэлегантно. SQL является реляционным, соединения являются естественной частью жизни. Думая, что они «неэлегантны», это приводит к стереотипно плохим проектам баз данных.
Вы определили, что у вас есть два разных типа данных — текст, который вам часто нужно искать, и большие двоичные объекты, которые вам не нужны. Нет абсолютно ничего неправильного или неэлегантного в том, чтобы хранить их в двух разных таблицах.
person
Nicholas Knight
schedule
14.11.2010
Я называю это неэлегантным, потому что обычные таблицы позволяют сосуществовать данным разных типов без необходимости поддерживать разные таблицы, которые вы должны постоянно синхронизировать друг с другом. Это просто не элегантно. Вероятно, мне придется полностью переработать мое приложение. По крайней мере, так я понял, прочитав ваш ответ.
- person ; 14.11.2010
@oskar: Если вам нужно полностью перепроектировать свое приложение, чтобы изменить макет базы данных, вы используете базу данных очень неправильно. Выделение нескольких столбцов в отдельную таблицу является чрезвычайно распространенным явлением и должно быть быстрым и безболезненным изменением в любом хорошо спроектированном приложении.
- person Nicholas Knight; 14.11.2010
Мне нужно перепроектировать его в том смысле, что каждый оператор SELECT, который у меня есть в настоящее время, должен быть изменен, чтобы включить соединение с другой таблицей, каждый INSERT должен быть изменен для вставки в две отдельные таблицы, и каждый DELETE должен быть изменен удалить из двух разных таблиц.
- person ; 14.11.2010
Вы можете сделать это менее хлопотным, создав представление соединения, которое затем можно выбрать. Вы по-прежнему можете использовать MATCH для столбцов, созданных в таблице fts, и вам не нужно выполнять это соединение каждый раз, когда вы хотите выполнить запрос.
person
glittershark
schedule
26.10.2012