Bagaimana cara menyimpan data biner dalam tabel SQLite dengan FTS3 diaktifkan?

Saya sedang mentransisikan aplikasi dari menggunakan database SQLite normal ke database dengan pencarian teks lengkap diaktifkan. Ini memiliki beberapa kolom BLOB yang menyimpan hal-hal seperti tanda tangan digital, yang jelas tidak perlu diindeks. Saya pernah membaca bahwa orang lain menyelesaikan masalah ini dengan memindahkan semua data non-TEKS ke tabel non-FTS3 terpisah yang mereka gabung dengan tabel FTS3 bila diperlukan, tetapi ini adalah solusi yang sangat tidak elegan. Apakah tidak ada cara untuk mengecualikan kolom tertentu dari pengindeksan?


person Community    schedule 14.11.2010    source sumber


Jawaban (2)


Itu tidak janggal. SQL bersifat relasional, gabungan adalah bagian alami dari kehidupan. Berpikir bahwa mereka "tidak elegan" itulah yang menyebabkan desain database secara stereotip buruk.

Anda telah menentukan bahwa Anda memiliki dua jenis data yang berbeda -- teks yang sering perlu Anda cari, dan blob yang tidak perlu dicari. Tidak ada yang salah atau janggal menyimpan ini dalam dua tabel berbeda.

person Nicholas Knight    schedule 14.11.2010
comment
Saya menyebutnya tidak elegan karena tabel normal memungkinkan data dari tipe berbeda untuk hidup berdampingan tanpa harus memelihara tabel berbeda sehingga Anda harus selalu sinkron satu sama lain. Itu tidak elegan. Saya mungkin harus merekayasa ulang aplikasi saya sepenuhnya. Atau setidaknya, itulah yang saya ambil dari membaca jawaban Anda. - person ; 14.11.2010
comment
@oskar: Jika Anda harus merekayasa ulang aplikasi Anda sepenuhnya untuk mengubah tata letak basis data, Anda sangat salah menggunakan basis data. Memisahkan beberapa kolom menjadi tabel terpisah adalah hal yang sangat umum dilakukan, dan seharusnya merupakan perubahan yang cepat dan mudah dalam aplikasi apa pun yang dirancang dengan baik. - person Nicholas Knight; 14.11.2010
comment
Saya perlu merekayasa ulang dalam arti bahwa setiap pernyataan SELECT yang saya miliki saat ini harus diubah untuk menyertakan gabungan ke tabel lain, setiap INSERT harus diubah untuk dimasukkan ke dalam dua tabel terpisah, dan setiap DELETE harus diubah untuk menghapus dari dua tabel yang berbeda. - person ; 14.11.2010

Anda dapat mengurangi kerumitannya dengan membuat tampilan gabungan yang kemudian dapat Anda pilih. Anda masih dapat menggunakan MATCH pada kolom yang berasal dari tabel fts, dan Anda tidak perlu melakukan penggabungan itu setiap kali ingin melakukan kueri.

person glittershark    schedule 26.10.2012