จะจัดเก็บข้อมูลไบนารี่ในตาราง SQLite ที่เปิดใช้งาน FTS3 ได้อย่างไร

ฉันกำลังเปลี่ยนแอปพลิเคชันจากการใช้ฐานข้อมูล SQLite ปกติไปเป็นฐานข้อมูลที่เปิดใช้งานการค้นหาข้อความแบบเต็ม มีคอลัมน์ BLOB หลายคอลัมน์ที่เก็บสิ่งต่างๆ เช่น ลายเซ็นดิจิทัล ซึ่งเห็นได้ชัดว่าไม่จำเป็นต้องจัดทำดัชนี ฉันได้อ่านเจอว่ามีคนอื่นแก้ไขปัญหานี้ด้วยการย้ายข้อมูลที่ไม่ใช่ TEXT ทั้งหมดไปยังตารางที่ไม่ใช่ FTS3 ที่แยกจากกัน ซึ่งพวกเขารวมเข้ากับตาราง FTS3 เมื่อจำเป็น แต่นี่เป็นวิธีแก้ปัญหาที่ไม่เหมาะสมมาก ไม่มีวิธีใดที่จะยกเว้นบางคอลัมน์จากการจัดทำดัชนีหรือไม่


person Community    schedule 14.11.2010    source แหล่งที่มา


คำตอบ (2)


มันไม่สง่างาม SQL เป็นแบบเชิงสัมพันธ์ การรวมเป็นส่วนหนึ่งของชีวิตตามธรรมชาติ การคิดว่าพวกเขา "ไม่สง่างาม" คือสิ่งที่นำไปสู่การออกแบบฐานข้อมูลที่ไม่ดีตามแบบแผน

คุณพิจารณาแล้วว่าคุณมีข้อมูลสองประเภทที่แตกต่างกัน ได้แก่ ข้อความที่มักต้องค้นหา และ Blob ที่คุณไม่ต้องการ ไม่มีอะไรผิดหรือไม่เหมาะสมเลยในการจัดเก็บข้อมูลเหล่านี้ไว้ในตารางสองตารางที่ต่างกัน

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