ฉันกำลังเปลี่ยนแอปพลิเคชันจากการใช้ฐานข้อมูล SQLite ปกติไปเป็นฐานข้อมูลที่เปิดใช้งานการค้นหาข้อความแบบเต็ม มีคอลัมน์ BLOB หลายคอลัมน์ที่เก็บสิ่งต่างๆ เช่น ลายเซ็นดิจิทัล ซึ่งเห็นได้ชัดว่าไม่จำเป็นต้องจัดทำดัชนี ฉันได้อ่านเจอว่ามีคนอื่นแก้ไขปัญหานี้ด้วยการย้ายข้อมูลที่ไม่ใช่ TEXT ทั้งหมดไปยังตารางที่ไม่ใช่ FTS3 ที่แยกจากกัน ซึ่งพวกเขารวมเข้ากับตาราง FTS3 เมื่อจำเป็น แต่นี่เป็นวิธีแก้ปัญหาที่ไม่เหมาะสมมาก ไม่มีวิธีใดที่จะยกเว้นบางคอลัมน์จากการจัดทำดัชนีหรือไม่
จะจัดเก็บข้อมูลไบนารี่ในตาราง SQLite ที่เปิดใช้งาน FTS3 ได้อย่างไร
คำตอบ (2)
มันไม่สง่างาม SQL เป็นแบบเชิงสัมพันธ์ การรวมเป็นส่วนหนึ่งของชีวิตตามธรรมชาติ การคิดว่าพวกเขา "ไม่สง่างาม" คือสิ่งที่นำไปสู่การออกแบบฐานข้อมูลที่ไม่ดีตามแบบแผน
คุณพิจารณาแล้วว่าคุณมีข้อมูลสองประเภทที่แตกต่างกัน ได้แก่ ข้อความที่มักต้องค้นหา และ Blob ที่คุณไม่ต้องการ ไม่มีอะไรผิดหรือไม่เหมาะสมเลยในการจัดเก็บข้อมูลเหล่านี้ไว้ในตารางสองตารางที่ต่างกัน
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