#sql #database #sqlite #exif #system.data.sqlite
#sql #База данных #sqlite #exif #system.data.sqlite
Вопрос:
Я ищу наилучшую производительность при запросе таблицы, содержащей данные EXIF. Рассматриваемые запросы будут искать в данных EXIF только указанные строки и возвращать индекс строки при совпадении.
С учетом сказанного, было бы лучше хранить данные EXIF в таблице с отдельными столбцами для каждого из тегов или мне подойдет хранение всех тегов в одном столбце в виде одной длинной строки с разделителями?
Я буду хранить около 115 тегов EXIF, и каждая запись будет иметь длину от 1500 до 2000 символов, если объединить ее в одну строку.
Ответ №1:
Если вы храните их все в одном столбце, вы не сможете получить преимущества в производительности от индексов. Вы также нарушаете основное правило проектирования базы данных, которое имеет свои последствия (в каждом столбце должна храниться только одна часть данных).
Я бы, вероятно, использовал структуру, подобную этой:
CREATE TABLE Image_EXIF (
image_id INT,
exif_tag_id INT,
exif_value VARCHAR(100), -- I don't know what an appropriate size would really be
CONSTRAINT PK_Image_EXIF PRIMARY KEY CLUSTERED (image_id, exif_tag_id),
CONSTRAINT FK_Image_EXIF_image_id FOREIGN KEY image_id REFERENCES Images (image_id),
CONSTRAINT FK_Image_EXIF_exif_tag_id FOREIGN KEY exif_tag_id REFERENCES EXIF_Tags (exif_tag_id)
)
Таблица EXIF_Tags будет содержать все допустимые теги, а таблица Images будет содержать изображения. Затем вы можете иметь индексы для exif_tag_id
столбца и, возможно exif_value
, столбца для быстрого поиска.
Комментарии:
1. Итак, для каждой записи в
Image
таблице в таблице будет 115 записейImage_EXIF
, правильно?